runtests-cmdline: all
test -e t/tmp || mkdir t/tmp
+ TMPDIR="$(test_tmp)" t/test-drecurse.sh
TMPDIR="$(test_tmp)" t/test-cat-file.sh
TMPDIR="$(test_tmp)" t/test-compression.sh
TMPDIR="$(test_tmp)" t/test-fsck.sh
#!/usr/bin/env python
+
+from os.path import relpath
from bup import options, drecurse
from bup.helpers import *
if len(extra) != 1:
o.fatal("exactly one filename expected")
+drecurse_top = extra[0]
excluded_paths = parse_excludes(flags, o.fatal)
-
-it = drecurse.recursive_dirlist(extra, opt.xdev, excluded_paths=excluded_paths)
+if not drecurse_top.startswith('/'):
+ excluded_paths = [relpath(x) for x in excluded_paths]
+it = drecurse.recursive_dirlist([drecurse_top], opt.xdev,
+ excluded_paths=excluded_paths)
if opt.profile:
import cProfile
def do_it():
raise fatal("couldn't read %s" % parameter)
for exclude_path in f.readlines():
excluded_paths.append(realpath(exclude_path.strip()))
- return excluded_paths
+ return sorted(frozenset(excluded_paths))
def parse_rx_excludes(options, fatal):
--- /dev/null
+#!/usr/bin/env bash
+. ./wvtest-bup.sh
+. t/lib.sh
+
+set -o pipefail
+
+top="$(WVPASS pwd)" || exit $?
+tmpdir="$(WVPASS wvmktempdir)" || exit $?
+
+export BUP_DIR="$tmpdir/bup"
+export GIT_DIR="$tmpdir/bup"
+
+bup() { "$top/bup" "$@"; }
+
+WVPASS cd "$tmpdir"
+
+# These tests aren't comprehensive, but test-save-restore-excludes.sh
+# exercises some of the same code more thoroughly via index, and
+# --xdev is handled in test-xdev.sh.
+
+WVSTART "drecurse"
+WVPASS bup init
+WVPASS mkdir src src/a src/b
+WVPASS touch src/a/1 src/a/2 src/b/1 src/b/2 src/c
+(cd src && WVPASS ln -s a a-link)
+WVPASSEQ "$(bup drecurse src)" "src/c
+src/b/2
+src/b/1
+src/b/
+src/a/2
+src/a/1
+src/a/
+src/a-link
+src/"
+
+WVSTART "drecurse --exclude (file)"
+WVPASSEQ "$(bup drecurse --exclude src/b/2 src)" "src/c
+src/b/1
+src/b/
+src/a/2
+src/a/1
+src/a/
+src/a-link
+src/"
+
+WVSTART "drecurse --exclude (dir)"
+WVPASSEQ "$(bup drecurse --exclude src/b/ src)" "src/c
+src/a/2
+src/a/1
+src/a/
+src/a-link
+src/"
+
+WVSTART "drecurse --exclude (symlink)"
+WVPASSEQ "$(bup drecurse --exclude src/a-link src)" "src/c
+src/b/2
+src/b/1
+src/b/
+src/a/2
+src/a/1
+src/a/
+src/"
+
+WVSTART "drecurse --exclude (absolute path)"
+WVPASSEQ "$(bup drecurse --exclude src/b/2 "$(pwd)/src")" "$(pwd)/src/c
+$(pwd)/src/b/1
+$(pwd)/src/b/
+$(pwd)/src/a/2
+$(pwd)/src/a/1
+$(pwd)/src/a/
+$(pwd)/src/a-link
+$(pwd)/src/"
+
+WVSTART "drecurse --exclude-from"
+WVPASS echo "src/b" > exclude-list
+WVPASSEQ "$(bup drecurse --exclude-from exclude-list src)" "src/c
+src/a/2
+src/a/1
+src/a/
+src/a-link
+src/"
+
+WVPASS rm -rf "$tmpdir"