dirstate.statwalk: explicitly test for ignored directories
This removes a hack where we appended '/' to a dirname so that:
- it would not appear on the "dc" dict
- it would always be matched by the match function
This was a contorted way of checking if the directory was matched by
some hgignore pattern, and it would still fail with some uses of
--include/--exclude patterns.
Things would still work fine if we removed the check altogether and
just appended things to "work" directly, but then we would end up
walking ignored directories too, which could be quite a bit of work.
This allows further simplification of the match function returned by
util._matcher, and fixes walking the working directory with a
--include pattern that matches only the end of a name.
#!/bin/sh
echo '# basic operation'
hg init basic
cd basic
echo a > a
hg commit -d '0 0' -A -m a
echo b >> a
hg commit -d '1 0' -m b
hg backout -d '2 0' tip
cat a
echo '# file that was removed is recreated'
cd ..
hg init remove
cd remove
echo content > a
hg commit -d '0 0' -A -m a
hg rm a
hg commit -d '1 0' -m b
hg backout -d '2 0' --merge tip
cat a
echo '# backout of backout is as if nothing happened'
hg backout -d '3 0' --merge tip
cat a 2>/dev/null || echo cat: a: No such file or directory
echo '# backout with merge'
cd ..
hg init merge
cd merge
echo line 1 > a
hg commit -d '0 0' -A -m a
echo line 2 >> a
hg commit -d '1 0' -m b
echo line 3 >> a
hg commit -d '2 0' -m c
hg backout --merge -d '3 0' 1
hg commit -d '4 0' -m d
cat a
echo '# backout should not back out subsequent changesets'
hg init onecs
cd onecs
echo 1 > a
hg commit -d '0 0' -A -m a
echo 2 >> a
hg commit -d '1 0' -m b
echo 1 > b
hg commit -d '2 0' -A -m c
hg backout -d '3 0' 1
hg locate b
cd ..
hg init m
cd m
echo a > a
hg commit -d '0 0' -A -m a
echo b > b
hg commit -d '1 0' -A -m b
echo c > c
hg commit -d '2 0' -A -m b
hg update 1
echo d > d
hg commit -d '3 0' -A -m c
hg merge 2
hg commit -d '4 0' -A -m d
echo '# backout of merge should fail'
hg backout 4
echo '# backout of merge with bad parent should fail'
hg backout --parent 0 4
echo '# backout of non-merge with parent should fail'
hg backout --parent 0 3
echo '# backout with valid parent should be ok'
hg backout -d '5 0' --parent 2 4
hg rollback
hg update -C
hg backout -d '6 0' --parent 3 4
exit 0