# HG changeset patch # User Thomas Arendsen Hein # Date 1165856992 -3600 # Node ID ad6f34c83c3dbbcbc51f27054eb86f70a24819d1 # Parent 6033d9f28052b0cbc6e70964ec7e64cd77dda04c Add instructions how to redo/finish failed merge with local working directory. b2ae81a7df29 already implemented this for branch merges. diff --git a/mercurial/hg.py b/mercurial/hg.py --- a/mercurial/hg.py +++ b/mercurial/hg.py @@ -234,11 +234,19 @@ def _update(repo, node): return update(r def update(repo, node): """update the working directory to node, merging linear changes""" + pl = repo.parents() stats = _merge.update(repo, node, False, False, None, None) _showstats(repo, stats) if stats[3]: repo.ui.status(_("There are unresolved merges with" " locally modified files.\n")) + if stats[1]: + repo.ui.status(_("You can finish the partial merge using:\n")) + else: + repo.ui.status(_("You can redo the full merge using:\n")) + # len(pl)==1, otherwise _merge.update() would have raised util.Abort: + repo.ui.status(_(" hg update %s\n hg update %s\n") + % (pl[0].rev(), repo.changectx(node).rev())) return stats[3] def clean(repo, node, wlock=None, show_stats=True): diff --git a/tests/test-merge-local b/tests/test-merge-local new file mode 100755 --- /dev/null +++ b/tests/test-merge-local @@ -0,0 +1,50 @@ +#!/bin/sh + +hg init + +echo "# revision 0" +echo "unchanged" > unchanged +echo "remove me" > remove +echo "copy me" > copy +echo "move me" > move +for i in 1 2 3 4 5 6 7 8 9; do + echo "merge ok $i" >> zzz1_merge_ok +done +echo "merge bad" > zzz2_merge_bad +hg ci -Am "revision 0" -d "1000000 0" + +echo "# revision 1" +hg rm remove +hg mv move moved +hg cp copy copied +echo "added" > added +hg add added +echo "new first line" > zzz1_merge_ok +hg cat zzz1_merge_ok >> zzz1_merge_ok +echo "new last line" >> zzz2_merge_bad +hg ci -m "revision 1" -d "1000000 0" + +echo "# local changes to revision 0" +hg co 0 +echo "new last line" >> zzz1_merge_ok +echo "another last line" >> zzz2_merge_bad +hg diff --nodates | grep "^[+-][^<>]" +hg st + +echo "# local merge with bad merge tool" +HGMERGE=false hg co +hg co 0 +hg diff --nodates | grep "^[+-][^<>]" +hg st + +echo "# local merge with conflicts" +HGMERGE=merge hg co +hg co 0 +hg diff --nodates | grep "^[+-][^<>]" +hg st + +echo "# local merge without conflicts" +hg revert zzz2_merge_bad +HGMERGE=merge hg co +hg diff --nodates | grep "^[+-][^<>]" +hg st diff --git a/tests/test-merge-local.out b/tests/test-merge-local.out new file mode 100644 --- /dev/null +++ b/tests/test-merge-local.out @@ -0,0 +1,67 @@ +# revision 0 +adding copy +adding move +adding remove +adding unchanged +adding zzz1_merge_ok +adding zzz2_merge_bad +# revision 1 +# local changes to revision 0 +4 files updated, 0 files merged, 3 files removed, 0 files unresolved +--- a/zzz1_merge_ok ++++ b/zzz1_merge_ok ++new last line +--- a/zzz2_merge_bad ++++ b/zzz2_merge_bad ++another last line +M zzz1_merge_ok +M zzz2_merge_bad +# local merge with bad merge tool +merging zzz1_merge_ok +merging zzz1_merge_ok failed! +merging zzz2_merge_bad +merging zzz2_merge_bad failed! +3 files updated, 0 files merged, 2 files removed, 2 files unresolved +There are unresolved merges with locally modified files. +You can redo the full merge using: + hg update 0 + hg update 1 +2 files updated, 0 files merged, 3 files removed, 0 files unresolved +--- a/zzz1_merge_ok ++++ b/zzz1_merge_ok ++new last line +--- a/zzz2_merge_bad ++++ b/zzz2_merge_bad ++another last line +M zzz1_merge_ok +M zzz2_merge_bad +# local merge with conflicts +merge: warning: conflicts during merge +merging zzz1_merge_ok +merging zzz2_merge_bad +merging zzz2_merge_bad failed! +3 files updated, 1 files merged, 2 files removed, 1 files unresolved +There are unresolved merges with locally modified files. +You can finish the partial merge using: + hg update 0 + hg update 1 +2 files updated, 0 files merged, 3 files removed, 0 files unresolved +--- a/zzz1_merge_ok ++++ b/zzz1_merge_ok ++new first line ++new last line +--- a/zzz2_merge_bad ++++ b/zzz2_merge_bad ++another last line ++======= ++new last line +M zzz1_merge_ok +M zzz2_merge_bad +# local merge without conflicts +merging zzz1_merge_ok +4 files updated, 1 files merged, 2 files removed, 0 files unresolved +--- a/zzz1_merge_ok ++++ b/zzz1_merge_ok ++new last line +M zzz1_merge_ok +? zzz2_merge_bad.orig diff --git a/tests/test-merge-revert2.out b/tests/test-merge-revert2.out --- a/tests/test-merge-revert2.out +++ b/tests/test-merge-revert2.out @@ -14,6 +14,9 @@ merging file1 merging file1 failed! 0 files updated, 0 files merged, 0 files removed, 1 files unresolved There are unresolved merges with locally modified files. +You can redo the full merge using: + hg update 0 + hg update 1 diff -r f248da0d4c3e file1 --- a/file1 +++ b/file1