Fix file-changed-to-dir and dir-to-file commits (issue660).
Allow adding to dirstate files that clash with previously existing
but marked for removal. Protect from reintroducing clashes by revert.
This change doesn't address related issues with update. Current
workaround is to do "clean" update by manually removing conflicting
files/dirs from working directory.
#!/bin/sh
cat >findbranch.py <<EOF
import re, sys
head_re = re.compile('^#(?:(?:\\s+([A-Za-z][A-Za-z0-9_]*)(?:\\s.*)?)|(?:\\s*))$')
for line in sys.stdin:
hmatch = head_re.match(line)
if not hmatch:
sys.exit(1)
if hmatch.group(1) == 'Branch':
sys.exit(0)
sys.exit(1)
EOF
hg init a
cd a
echo "Rev 1" >rev
hg add rev
hg commit -m "No branch."
hg branch abranch
echo "Rev 2" >rev
hg commit -m "With branch."
if hg export 0 | python ../findbranch.py; then
echo "Export of default branch revision has Branch header" 1>&2
exit 1
fi
if hg export 1 | python ../findbranch.py; then
: # Do nothing
else
echo "Export of branch revision is missing Branch header" 1>&2
exit 1
fi
# Make sure import still works with branch information in patches.
cd ..
hg init b
cd b
hg -R ../a export 0 | hg import -
hg -R ../a export 1 | hg import -
cd ..
rm -rf b
hg init b
cd b
hg -R ../a export 0 | hg import --exact -
hg -R ../a export 1 | hg import --exact -