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
# This test tries to exercise the ssh functionality with a dummy script
cat <<'EOF' > dummyssh
#!/bin/sh
# this attempts to deal with relative pathnames
cd `dirname $0`
# check for proper args
if [ $1 != "user@dummy" ] ; then
exit -1
fi
# check that we're in the right directory
if [ ! -x dummyssh ] ; then
exit -1
fi
SSH_CLIENT='127.0.0.1 1 2'
export SSH_CLIENT
echo Got arguments 1:$1 2:$2 3:$3 4:$4 5:$5 >> dummylog
$2
EOF
chmod +x dummyssh
echo "# creating 'remote'"
hg init remote
cd remote
echo this > foo
echo this > fooO
hg ci -A -m "init" -d "1000000 0" foo fooO
echo '[server]' > .hg/hgrc
echo 'uncompressed = True' >> .hg/hgrc
echo '[hooks]' >> .hg/hgrc
echo 'changegroup = echo changegroup in remote: u=$HG_URL >> ../dummylog' >> .hg/hgrc
cd ..
echo "# repo not found error"
hg clone -e ./dummyssh ssh://user@dummy/nonexistent local
echo "# clone remote via stream"
hg clone -e ./dummyssh --uncompressed ssh://user@dummy/remote local-stream 2>&1 | \
sed -e 's/[0-9][0-9.]*/XXX/g' -e 's/[KM]\(B\/sec\)/X\1/'
cd local-stream
hg verify
cd ..
echo "# clone remote via pull"
hg clone -e ./dummyssh ssh://user@dummy/remote local
echo "# verify"
cd local
hg verify
echo '[hooks]' >> .hg/hgrc
echo 'changegroup = echo changegroup in local: u=$HG_URL >> ../dummylog' >> .hg/hgrc
echo "# empty default pull"
hg paths
hg pull -e ../dummyssh
echo "# local change"
echo bleah > foo
hg ci -m "add" -d "1000000 0"
echo "# updating rc"
echo "default-push = ssh://user@dummy/remote" >> .hg/hgrc
echo "[ui]" >> .hg/hgrc
echo "ssh = ../dummyssh" >> .hg/hgrc
echo "# find outgoing"
hg out ssh://user@dummy/remote
echo "# find incoming on the remote side"
hg incoming -R ../remote -e ../dummyssh ssh://user@dummy/local
echo "# push"
hg push
cd ../remote
echo "# check remote tip"
hg tip
hg verify
hg cat -r tip foo
echo z > z
hg ci -A -m z -d '1000001 0' z
cd ../local
echo r > r
hg ci -A -m z -d '1000002 0' r
echo "# push should succeed"
hg push
cd ..
cat dummylog