xref: /openbsd-src/regress/usr.bin/rsync/lib.sh (revision b6cae74b6564e00a5f5ef5de5a508134286f3e41)
13a0ab0b7Sclaudio#! /bin/sh
23a0ab0b7Sclaudio
33a0ab0b7Sclaudioset -u
43a0ab0b7Sclaudioset -e
53a0ab0b7Sclaudio
63a0ab0b7Sclaudio# Library of functions.
73a0ab0b7Sclaudio# Intended to be sourced by scripts (or interactive shells if you want).
83a0ab0b7Sclaudio
93a0ab0b7Sclaudiogenfile_stdout_16m ()
103a0ab0b7Sclaudio{
113a0ab0b7Sclaudio    seq -f%015g 1048576
123a0ab0b7Sclaudio}
133a0ab0b7Sclaudiogenfile_stdout_1m ()
143a0ab0b7Sclaudio{
153a0ab0b7Sclaudio    seq -f%015g 65536
163a0ab0b7Sclaudio}
173a0ab0b7Sclaudiogenfile ()
183a0ab0b7Sclaudio{
193a0ab0b7Sclaudio    #touch "$1"
203a0ab0b7Sclaudio    genfile_stdout_1m > "$1"
213a0ab0b7Sclaudio}
223a0ab0b7Sclaudio
233a0ab0b7Sclaudio# makes a directory path and optionally a file in it.
243a0ab0b7Sclaudio# if you want the last element to be a directory, add / at the end
253a0ab0b7Sclaudiomkdirfile ()
263a0ab0b7Sclaudio{
273a0ab0b7Sclaudio    case "$1" in
283a0ab0b7Sclaudio        '') error that cannot work;;
293a0ab0b7Sclaudio        */) mkdir -p "$1";;
303a0ab0b7Sclaudio        */*) mkdir -p "${1%/*}"; genfile "$1";;
313a0ab0b7Sclaudio        *) genfile "$1";;
323a0ab0b7Sclaudio    esac
333a0ab0b7Sclaudio}
343a0ab0b7Sclaudio
353a0ab0b7Sclaudiomkdirsymlink ()
363a0ab0b7Sclaudio{
373a0ab0b7Sclaudio    (
383a0ab0b7Sclaudio        mkdir -p "$1"
393a0ab0b7Sclaudio        cd "$1"
403a0ab0b7Sclaudio        ln -sf "$2" "$3"
413a0ab0b7Sclaudio    )
423a0ab0b7Sclaudio}
433a0ab0b7Sclaudio
443a0ab0b7Sclaudio# make a first interesting tree
453a0ab0b7Sclaudiogenerate_tree_1 ()
463a0ab0b7Sclaudio{
473a0ab0b7Sclaudio    mkdirfile foo/bar/baz/one.txt
483a0ab0b7Sclaudio    mkdirfile foo/bar/baz/one2.txt
493a0ab0b7Sclaudio    mkdirfile 'foo/bar/baz/  two.txt'
503a0ab0b7Sclaudio    mkdirfile 'foo/bar/baz/two  2.txt'
513a0ab0b7Sclaudio    mkdirfile 'foo/bar/baz/two3.txt  '
523a0ab0b7Sclaudio    mkdirsymlink foo/baz/ ../bar/baz/one.txt three.txt
533a0ab0b7Sclaudio    mkdirfile one/two/three/four.txt
543a0ab0b7Sclaudio    mkdirfile foo/five/one/two/five/blah.txt
553a0ab0b7Sclaudio    mkdirfile foo/one/two/five/blah.txt
563a0ab0b7Sclaudio}
573a0ab0b7Sclaudio
583a0ab0b7Sclaudio# a frontend for find
593a0ab0b7Sclaudio# first argument is a dir to chdir to
603a0ab0b7Sclaudiofindme ()
613a0ab0b7Sclaudio{
623a0ab0b7Sclaudio    if [ $# -lt 2 ] ; then
633a0ab0b7Sclaudio        echo usage: different 1>&2
643a0ab0b7Sclaudio        return 1
653a0ab0b7Sclaudio    fi
663a0ab0b7Sclaudio    (
673a0ab0b7Sclaudio        cd "$1" ; shift
68a8f40aaaSanton        # Remove unstable fields:
69a8f40aaaSanton        #    1: inode
70a8f40aaaSanton        #    2: size in blocks
71a8f40aaaSanton        # 8-10: last modification time
72a8f40aaaSanton        find "$@" -ls |
73*b6cae74bSanton        sed -e 's/^[[:space:]]*//' -e 's/[[:space:]][[:space:]]*/ /g' |
74a8f40aaaSanton        cut -d ' ' -f 3-7,11- |
75a8f40aaaSanton        sort
763a0ab0b7Sclaudio    )
773a0ab0b7Sclaudio}
783a0ab0b7Sclaudio
793a0ab0b7Sclaudio# compare two trees.  This will later be modular to pick between:
803a0ab0b7Sclaudio# - diff
813a0ab0b7Sclaudio# - find . -print0 | sort --zero-terminated | xargs -0 tar fc foo.tar
823a0ab0b7Sclaudio# - mtree
833a0ab0b7Sclaudiocompare_trees ()
843a0ab0b7Sclaudio{
853a0ab0b7Sclaudio    if [ $# -ne 2 ] ; then
863a0ab0b7Sclaudio        echo usage: different 1>&2
873a0ab0b7Sclaudio        return 1
883a0ab0b7Sclaudio    fi
893a0ab0b7Sclaudio    # files_and_permissions
903a0ab0b7Sclaudio    findme "$1" . > find1
913a0ab0b7Sclaudio    findme "$2" . > find2
923a0ab0b7Sclaudio    diff -u find[12]
933a0ab0b7Sclaudio    # file contents
943a0ab0b7Sclaudio    diff -ru "$1" "$2"
953a0ab0b7Sclaudio}
96