8 top="$(WVPASS pwd)" || exit $?
9 tmpdir="$(WVPASS wvmktempdir)" || exit $?
10 export BUP_DIR="$tmpdir/bup"
12 bup() { "$top/bup" "$@"; }
14 # Inject code to coordinate test
16 WVPASS rm -rf "$tmpdir/mod"
17 WVPASS mkdir -p "$tmpdir/mod"
18 cat > "$tmpdir/mod/pause_after_save_stat.py" << EOF
25 def test_save_symlink_race_pause_save(name):
26 if name == b'$tmpdir/save/link':
27 with open('$tmpdir/waiting-after-save-stat', 'w') as f:
29 while os.path.exists('$tmpdir/block-save'):
32 bup.cmd.save.after_nondir_metadata_stat = test_save_symlink_race_pause_save
38 PYTHONPATH="$tmpdir/mod" bup --import-py-module pause_after_save_stat "$@"
43 WVPASS mkdir "$tmpdir/save"
45 WVSTART "symlink metadata vs. content race"
46 WVPASS ln -sf a "$tmpdir/save/link"
47 WVPASS bup index "$tmpdir/save"
48 WVPASS touch "$tmpdir/block-save"
52 while ! test -e "$tmpdir/waiting-after-save-stat"; do
53 "$top/dev/python" -c 'import time; time.sleep(0.01)'
55 ln -sf abc "$tmpdir/save/link"
56 rm "$tmpdir/block-save"
59 trap "kill $truncator" EXIT
61 WVPASS instrumented-bup save -n test "$tmpdir/save"
63 meta_tgt=$(WVPASS bup ls -ls "test/latest/$tmpdir/save/link" |
65 data_tgt=$(git -C "$BUP_DIR" show $(WVPASS bup ls -ls "test/latest/$tmpdir/save/link" |
67 WVPASSEQ abc $meta_tgt
68 WVPASSEQ abc $data_tgt
70 WVPASS rm -rf "$tmpdir"