Mercurial > hg
view tests/test-win32text @ 8742:a964ab624385
merge: allow merging going backwards
New behavior is generally superior and more correct, except possibly
with regards to missing files. hg up . is now effectively a no-op,
which is probably the desired behavior for people expecting to move to
tip, but may surprise people who were expecting deleted files to
reappear.
case 1: update to .
a-w -> a-w
classic: ancestor a
missing recreated right?
rmed recreated WRONG
added forgotten WRONG
changed preserved RIGHT
conflicted can't happen
backward merge: ancestor a (NO EFFECT)
missing missing wrong?
rm'ed rm'ed RIGHT
added preserved RIGHT
changed preserved RIGHT
conflicted can't happen
case 2: update to ancestor of .
a-b-w -> b-w
\
a
classic: ancestor a
missing recreated right?
rmed recreated wrong?
added forgotten wrong?
changed preserved RIGHT
conflicted preserved wrong?
backwards merge: ancestor b
missing missing or conflict right?
rm'ed missing or conflict right?
changed preserved RIGHT
conflicted merge RIGHT
added preserved right?
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Mon, 08 Jun 2009 18:14:44 -0500 |
parents | 6c82beaaa11a |
children | f584d63c49c3 |
line wrap: on
line source
#!/bin/sh hg init t cd t cat > unix2dos.py <<EOF import sys for path in sys.argv[1:]: data = file(path, 'rb').read() data = data.replace('\n', '\r\n') file(path, 'wb').write(data) EOF cat > print.py <<EOF import sys print(sys.stdin.read().replace('\n', '<LF>').replace('\r', '<CR>').replace('\0', '<NUL>')) EOF echo '[hooks]' >> .hg/hgrc echo 'pretxncommit.crlf = python:hgext.win32text.forbidcrlf' >> .hg/hgrc echo 'pretxnchangegroup.crlf = python:hgext.win32text.forbidcrlf' >> .hg/hgrc cat .hg/hgrc echo echo hello > f hg add f echo commit should succeed hg ci -m 1 echo hg clone . ../zoz cp .hg/hgrc ../zoz/.hg python unix2dos.py f echo commit should fail hg ci -m 2.1 echo mv .hg/hgrc .hg/hgrc.bak echo commits should succeed hg ci -m 2 hg cp f g hg ci -m 2.2 echo echo push should fail hg push ../zoz echo mv .hg/hgrc.bak .hg/hgrc echo hello > f hg rm g echo commit should succeed hg ci -m 2.3 echo echo push should succeed hg push ../zoz echo echo and now for something completely different mkdir d echo hello > d/f2 python unix2dos.py d/f2 hg add d/f2 hg ci -m 3 hg revert -a rm d/f2 echo hg rem f hg ci -m 4 echo python -c 'file("bin", "wb").write("hello\x00\x0D\x0A")' hg add bin hg ci -m 5 hg log -v echo hg clone . dupe echo for x in a b c d; do echo content > dupe/$x; done hg -R dupe add python unix2dos.py dupe/b dupe/c dupe/d hg -R dupe ci -m a dupe/a hg -R dupe ci -m b/c dupe/[bc] hg -R dupe ci -m d dupe/d hg -R dupe log -v echo hg pull dupe echo hg log -v echo rm .hg/hgrc (echo some; echo text) > f3 python -c 'file("f4.bat", "wb").write("rem empty\x0D\x0A")' hg add f3 f4.bat hg ci -m 6 python print.py < bin python print.py < f3 python print.py < f4.bat echo echo '[extensions]' >> .hg/hgrc echo 'win32text = ' >> .hg/hgrc echo '[decode]' >> .hg/hgrc echo '** = cleverdecode:' >> .hg/hgrc echo '[encode]' >> .hg/hgrc echo '** = cleverencode:' >> .hg/hgrc cat .hg/hgrc echo rm f3 f4.bat bin hg co -C 2>&1 | python -c 'import sys, os; sys.stdout.write(sys.stdin.read().replace(os.getcwd(), "...."))' python print.py < bin python print.py < f3 python print.py < f4.bat echo python -c 'file("f5.sh", "wb").write("# empty\x0D\x0A")' hg add f5.sh hg ci -m 7 python print.py < f5.sh hg cat f5.sh | python print.py echo '% just linefeed' > linefeed hg ci -qAm 8 linefeed python print.py < linefeed hg cat linefeed | python print.py hg st -q hg revert -a linefeed python print.py < linefeed hg st -q echo modified >> linefeed hg st -q hg revert -a hg st -q python print.py < linefeed echo "# disable extension again" echo '[decode]' >> .hg/hgrc echo '** = !' >> .hg/hgrc echo '[encode]' >> .hg/hgrc echo '** = !' >> .hg/hgrc cat .hg/hgrc echo rm f3 f4.bat bin hg co -C 2>&1 | python -c 'import sys, os; sys.stdout.write(sys.stdin.read().replace(os.getcwd(), "...."))' python print.py < bin python print.py < f3 python print.py < f4.bat echo