t/test-restore-map-owner.sh \
t/test-restore-single-file.sh \
t/test-rm-between-index-and-save.sh \
+ t/test-save-with-valid-parent.sh \
t/test-sparse-files.sh \
t/test-command-without-init-fails.sh \
t/test-redundant-saves.sh \
def __iter__(self):
return self.iter()
+ def find(self, name):
+ return next((e for e in self.iter(name, wantrecurse=lambda x : True)
+ if e.name == name),
+ None)
+
def exists(self):
return self.m
def filter(self, prefixes, wantrecurse=None):
for (rp, path) in reduce_paths(prefixes):
+ any_entries = False
for e in self.iter(rp, wantrecurse=wantrecurse):
+ any_entries = True
assert(e.name.startswith(rp))
name = path + e.name[len(rp):]
yield (name, e)
-
+ if not any_entries:
+ # Always return at least the top for each prefix.
+ # Otherwise something like "save x/y" will produce
+ # nothing if x is up to date.
+ pe = self.find(rp)
+ assert(pe)
+ name = path + pe.name[len(rp):]
+ yield (name, pe)
# FIXME: this function isn't very generic, because it splits the filename
# in an odd way and depends on a terminating '/' to indicate directories.
--- /dev/null
+#!/usr/bin/env bash
+. ./wvtest-bup.sh || exit $?
+. t/lib.sh || exit $?
+
+set -o pipefail
+
+top="$(WVPASS pwd)" || exit $?
+tmpdir="$(WVPASS wvmktempdir)" || exit $?
+
+export BUP_DIR="$tmpdir/bup"
+export GIT_DIR="$tmpdir/bup"
+
+bup() { "$top/bup" "$@"; }
+compare-trees() { "$top/t/compare-trees" "$@"; }
+
+WVPASS cd "$tmpdir"
+
+# Make sure that we can explicitly save a path whose parent is up to
+# date.
+
+WVSTART "save path with up to date parent"
+WVPASS bup init
+
+WVPASS mkdir -p src/a src/b
+WVPASS touch src/a/1 src/b/2
+WVPASS bup index -u src
+WVPASS bup save -n src src
+
+WVPASS bup save -n src src/b
+WVPASS bup restore -C restore "src/latest/$(pwd)/"
+WVPASS test ! -e restore/src/a
+WVPASS "$top/t/compare-trees" -c src/b/ restore/src/b/
+
+WVPASS bup save -n src src/a/1
+WVPASS rm -r restore
+WVPASS bup restore -C restore "src/latest/$(pwd)/"
+WVPASS test ! -e restore/src/b
+WVPASS "$top/t/compare-trees" -c src/a/ restore/src/a/
+
+WVPASS rm -rf "$tmpdir"