workingctx: correctly compute the flag for noexec filesystems+merge
This bug happens if the filesystem doesn't support exec-bit, during merges,
for example in
24ed7a541f23 on the hg repo.
If f is not in p1, but is in p2 and has the x-bit in p2, since the dirstate is
based on p1, and the FS doesn't support the exec-bit, the dirstate can't
"guess" the right bit.
We instead fix it in workingcontext.flags()/manifest.
#!/bin/sh
"$TESTDIR/hghave" svn svn-bindings || exit 80
fix_path()
{
tr '\\' /
}
echo "[extensions]" >> $HGRCPATH
echo "convert = " >> $HGRCPATH
echo "mq = " >> $HGRCPATH
svnpath=`pwd | fix_path`/svn-repo
svnadmin create "$svnpath"
cat > "$svnpath"/hooks/pre-revprop-change <<'EOF'
#!/bin/sh
REPOS="$1"
REV="$2"
USER="$3"
PROPNAME="$4"
ACTION="$5"
if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi
if [ "$ACTION" = "A" -a "$PROPNAME" = "hg:convert-branch" ]; then exit 0; fi
if [ "$ACTION" = "A" -a "$PROPNAME" = "hg:convert-rev" ]; then exit 0; fi
echo "Changing prohibited revision property" >&2
exit 1
EOF
chmod +x "$svnpath"/hooks/pre-revprop-change
# SVN wants all paths to start with a slash. Unfortunately,
# Windows ones don't. Handle that.
svnurl="$svnpath"
expr "$svnurl" : "\/" > /dev/null
if [ $? -ne 0 ]; then
svnurl="/$svnurl"
fi
svnurl="file://$svnurl"
svn co "$svnurl" "$svnpath"-wc
cd "$svnpath"-wc
echo a > a
svn add a
svn ci -m'added a' a
cd ..
echo % initial roundtrip
hg convert -s svn -d hg "$svnpath"-wc "$svnpath"-hg | grep -v initializing
hg convert -s hg -d svn "$svnpath"-hg "$svnpath"-wc
echo % second roundtrip should do nothing
hg convert -s svn -d hg "$svnpath"-wc "$svnpath"-hg
hg convert -s hg -d svn "$svnpath"-hg "$svnpath"-wc
echo % new hg rev
hg clone "$svnpath"-hg "$svnpath"-work
cd "$svnpath"-work
echo b > b
hg add b
hg ci -mb
echo '% adding an empty revision'
hg qnew -m emtpy empty
hg qfinish -a
cd ..
echo % echo hg to svn
hg --cwd "$svnpath"-hg pull -q "$svnpath"-work
hg convert -s hg -d svn "$svnpath"-hg "$svnpath"-wc
echo % svn back to hg should do nothing
hg convert -s svn -d hg "$svnpath"-wc "$svnpath"-hg
echo % hg back to svn should do nothing
hg convert -s hg -d svn "$svnpath"-hg "$svnpath"-wc