path_auditor: cache names of audited directories
We use a separate cache to avoid problems with
audit = path_auditor(repo.root)
audit("subrepo")
audit("subrepo/file")
whitelisting "subrepo" (which is fine) and then using the same whitelist
with "subrepo/file" (which is not fine).
Since we create a separate path_auditor for every path on the command line,
a "hg add dir/a dir/b dir/c" will still lstat dir 3 times just to audit
the paths.
#!/bin/sh
# check that renames are correctly saved by a commit after a merge
# test with the merge on 3 having the rename on the local parent
hg init a
cd a
echo line1 > foo
hg add foo
hg ci -m '0: add foo' -d '0 0'
echo line2 >> foo
hg ci -m '1: change foo' -d '0 0'
hg up -C 0
hg mv foo bar
rm bar
echo line0 > bar
echo line1 >> bar
hg ci -m '2: mv foo bar; change bar' -d '0 0'
hg merge 1
echo '% contents of bar should be line0 line1 line2'
cat bar
hg ci -m '3: merge with local rename' -d '0 0'
hg debugindex .hg/store/data/bar.i
hg debugrename bar
hg debugindex .hg/store/data/foo.i
# revert the content change from rev 2
hg up -C 2
rm bar
echo line1 > bar
hg ci -m '4: revert content change from rev 2' -d '0 0'
hg log --template '#rev#:#node|short# #parents#\n'
echo '% this should use bar@rev2 as the ancestor'
hg --debug merge 3
echo '% contents of bar should be line1 line2'
cat bar
hg ci -m '5: merge' -d '0 0'
hg debugindex .hg/store/data/bar.i
# same thing, but with the merge on 3 having the rename on the remote parent
echo
echo
cd ..
hg clone -U -r 1 -r 2 a b
cd b
hg up -C 1
hg merge 2
echo '% contents of bar should be line0 line1 line2'
cat bar
hg ci -m '3: merge with remote rename' -d '0 0'
hg debugindex .hg/store/data/bar.i
hg debugrename bar
hg debugindex .hg/store/data/foo.i
# revert the content change from rev 2
hg up -C 2
rm bar
echo line1 > bar
hg ci -m '4: revert content change from rev 2' -d '0 0'
hg log --template '#rev#:#node|short# #parents#\n'
echo '% this should use bar@rev2 as the ancestor'
hg --debug merge 3
echo '% contents of bar should be line1 line2'
cat bar
hg ci -m '5: merge' -d '0 0'
hg debugindex .hg/store/data/bar.i