[PATCH 2 of 2] resolve: new command
Matt Mackall
mpm at selenic.com
Sun Apr 6 16:46:35 CDT 2008
# HG changeset patch
# User Matt Mackall <mpm at selenic.com>
# Date 1207518367 18000
# Node ID e14ba50418254bd555f879637a59ff5674ffcc52
# Parent 32649adf4620c895af549abaa4122a0f16488d0a
resolve: new command
- add basic resolve command functionality
- point failed update and merge at resolve
diff -r 32649adf4620 -r e14ba5041825 mercurial/commands.py
--- a/mercurial/commands.py Sun Apr 06 16:46:05 2008 -0500
+++ b/mercurial/commands.py Sun Apr 06 16:46:07 2008 -0500
@@ -13,6 +13,7 @@
import difflib, patch, time, help, mdiff, tempfile
import version, socket
import archival, changegroup, cmdutil, hgweb.server, sshserver, hbisect
+import merge as merge_
# Commands start here, listed alphabetically
@@ -2231,6 +2232,42 @@
finally:
del wlock
+def resolve(ui, repo, *pats, **opts):
+ """resolve file merges from a branch merge or update
+
+ This command will attempt to resolve unresolved merges from the
+ last update or merge command. This will use the local file
+ revision preserved at the last update or merge to cleanly retry
+ the file merge attempt. With no file or options specified, this
+ command will attempt to resolve all unresolved files.
+ """
+
+ if len([x for x in opts if opts[x]]) > 1:
+ raise util.Abort(_("too many options specified"))
+
+ ms = merge_.mergestate(repo)
+ ms.read()
+
+ mf = util.matcher(repo.root, "", pats, [], [])[1]
+
+ for f in ms:
+ print f
+ if mf(f):
+ print "matched"
+ if opts.get("list"):
+ ui.write("%s %s\n" % (ms[f].upper(), f))
+ elif opts.get("mark"):
+ ms.mark(f, "r")
+ ms.write()
+ elif opts.get("unmark"):
+ ms.mark(f, "u")
+ ms.write()
+ else:
+ wctx = repo.workingctx()
+ mctx = wctx.parents()[-1]
+ ms.resolve(f, wctx, mctx)
+ ms.write()
+
def revert(ui, repo, *pats, **opts):
"""restore individual files or dirs to an earlier state
@@ -3191,6 +3228,12 @@
_('forcibly copy over an existing managed file')),
] + walkopts + dryrunopts,
_('hg rename [OPTION]... SOURCE... DEST')),
+ "resolve":
+ (resolve,
+ [('l', 'list', None, _('list state of files needing merge')),
+ ('m', 'mark', None, _('mark files as resolved')),
+ ('u', 'unmark', None, _('unmark files as resolved'))],
+ ('hg resolve [OPTION] [FILES...]')),
"revert":
(revert,
[('a', 'all', None, _('revert all changes when no arguments given')),
diff -r 32649adf4620 -r e14ba5041825 mercurial/hg.py
--- a/mercurial/hg.py Sun Apr 06 16:46:05 2008 -0500
+++ b/mercurial/hg.py Sun Apr 06 16:46:07 2008 -0500
@@ -271,15 +271,7 @@
stats = _merge.update(repo, node, False, False, 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()))
+ repo.ui.status(_("use 'hg resolve' to retry unresolved file merges\n"))
return stats[3] > 0
def clean(repo, node, show_stats=True):
@@ -294,11 +286,7 @@
_showstats(repo, stats)
if stats[3]:
pl = repo.parents()
- repo.ui.status(_("There are unresolved merges,"
- " you can redo the full merge using:\n"
- " hg update -C %s\n"
- " hg merge %s\n")
- % (pl[0].rev(), pl[1].rev()))
+ repo.ui.status(_("use 'hg resolve' to retry unresolved file merges\n"))
elif remind:
repo.ui.status(_("(branch merge, don't forget to commit)\n"))
return stats[3] > 0
diff -r 32649adf4620 -r e14ba5041825 tests/test-add.out
--- a/tests/test-add.out Sun Apr 06 16:46:05 2008 -0500
+++ b/tests/test-add.out Sun Apr 06 16:46:07 2008 -0500
@@ -18,9 +18,7 @@
warning: conflicts during merge.
merging a failed!
0 files updated, 0 files merged, 0 files removed, 1 files unresolved
-There are unresolved merges, you can redo the full merge using:
- hg update -C 2
- hg merge 1
+use 'hg resolve' to retry unresolved file merges
M a
? a.orig
% should fail
diff -r 32649adf4620 -r e14ba5041825 tests/test-conflict.out
--- a/tests/test-conflict.out Sun Apr 06 16:46:05 2008 -0500
+++ b/tests/test-conflict.out Sun Apr 06 16:46:07 2008 -0500
@@ -4,9 +4,7 @@
warning: conflicts during merge.
merging a failed!
0 files updated, 0 files merged, 0 files removed, 1 files unresolved
-There are unresolved merges, you can redo the full merge using:
- hg update -C 2
- hg merge 1
+use 'hg resolve' to retry unresolved file merges
e7fe8eb3e180+0d24b7662d3e+ tip
<<<<<<< local
something else
diff -r 32649adf4620 -r e14ba5041825 tests/test-convert-svn-sink.out
--- a/tests/test-convert-svn-sink.out Sun Apr 06 16:46:05 2008 -0500
+++ b/tests/test-convert-svn-sink.out Sun Apr 06 16:46:07 2008 -0500
@@ -265,9 +265,7 @@
warning: conflicts during merge.
merging b failed!
2 files updated, 0 files merged, 0 files removed, 1 files unresolved
-There are unresolved merges, you can redo the full merge using:
- hg update -C 2
- hg merge 4
+use 'hg resolve' to retry unresolved file merges
assuming destination b-hg
initializing svn repo 'b-hg'
initializing svn wc 'b-hg-wc'
diff -r 32649adf4620 -r e14ba5041825 tests/test-debugcomplete.out
--- a/tests/test-debugcomplete.out Sun Apr 06 16:46:05 2008 -0500
+++ b/tests/test-debugcomplete.out Sun Apr 06 16:46:07 2008 -0500
@@ -33,6 +33,7 @@
recover
remove
rename
+resolve
revert
rollback
root
@@ -79,6 +80,7 @@
recover
remove
rename
+resolve
revert
rollback
root
diff -r 32649adf4620 -r e14ba5041825 tests/test-globalopts.out
--- a/tests/test-globalopts.out Sun Apr 06 16:46:05 2008 -0500
+++ b/tests/test-globalopts.out Sun Apr 06 16:46:07 2008 -0500
@@ -183,6 +183,7 @@
recover roll back an interrupted transaction
remove remove the specified files on the next commit
rename rename files; equivalent of copy + remove
+ resolve resolve file merges from a branch merge or update
revert restore individual files or dirs to an earlier state
rollback roll back the last transaction
root print the root (top) of the current working dir
@@ -236,6 +237,7 @@
recover roll back an interrupted transaction
remove remove the specified files on the next commit
rename rename files; equivalent of copy + remove
+ resolve resolve file merges from a branch merge or update
revert restore individual files or dirs to an earlier state
rollback roll back the last transaction
root print the root (top) of the current working dir
diff -r 32649adf4620 -r e14ba5041825 tests/test-help.out
--- a/tests/test-help.out Sun Apr 06 16:46:05 2008 -0500
+++ b/tests/test-help.out Sun Apr 06 16:46:07 2008 -0500
@@ -74,6 +74,7 @@
recover roll back an interrupted transaction
remove remove the specified files on the next commit
rename rename files; equivalent of copy + remove
+ resolve resolve file merges from a branch merge or update
revert restore individual files or dirs to an earlier state
rollback roll back the last transaction
root print the root (top) of the current working dir
@@ -123,6 +124,7 @@
recover roll back an interrupted transaction
remove remove the specified files on the next commit
rename rename files; equivalent of copy + remove
+ resolve resolve file merges from a branch merge or update
revert restore individual files or dirs to an earlier state
rollback roll back the last transaction
root print the root (top) of the current working dir
diff -r 32649adf4620 -r e14ba5041825 tests/test-merge-local.out
--- a/tests/test-merge-local.out Sun Apr 06 16:46:05 2008 -0500
+++ b/tests/test-merge-local.out Sun Apr 06 16:46:07 2008 -0500
@@ -21,10 +21,7 @@
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
+use 'hg resolve' to retry unresolved file merges
2 files updated, 0 files merged, 3 files removed, 0 files unresolved
--- a/zzz1_merge_ok
+++ b/zzz1_merge_ok
@@ -42,10 +39,7 @@
warning: conflicts during merge.
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
+use 'hg resolve' to retry unresolved file merges
2 files updated, 0 files merged, 3 files removed, 0 files unresolved
--- a/zzz1_merge_ok
+++ b/zzz1_merge_ok
diff -r 32649adf4620 -r e14ba5041825 tests/test-merge-revert2.out
--- a/tests/test-merge-revert2.out Sun Apr 06 16:46:05 2008 -0500
+++ b/tests/test-merge-revert2.out Sun Apr 06 16:46:07 2008 -0500
@@ -13,10 +13,7 @@
warning: conflicts during merge.
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
+use 'hg resolve' to retry unresolved file merges
diff -r f248da0d4c3e file1
--- a/file1
+++ b/file1
diff -r 32649adf4620 -r e14ba5041825 tests/test-merge7.out
--- a/tests/test-merge7.out Sun Apr 06 16:46:05 2008 -0500
+++ b/tests/test-merge7.out Sun Apr 06 16:46:07 2008 -0500
@@ -11,9 +11,7 @@
warning: conflicts during merge.
merging test.txt failed!
0 files updated, 0 files merged, 0 files removed, 1 files unresolved
-There are unresolved merges, you can redo the full merge using:
- hg update -C 1
- hg merge 2
+use 'hg resolve' to retry unresolved file merges
pulling from ../test-a
searching for changes
adding changesets
@@ -33,9 +31,7 @@
warning: conflicts during merge.
merging test.txt failed!
0 files updated, 0 files merged, 0 files removed, 1 files unresolved
-There are unresolved merges, you can redo the full merge using:
- hg update -C 3
- hg merge 4
+use 'hg resolve' to retry unresolved file merges
one
<<<<<<< local
two-point-five
diff -r 32649adf4620 -r e14ba5041825 tests/test-merge9.out
--- a/tests/test-merge9.out Sun Apr 06 16:46:05 2008 -0500
+++ b/tests/test-merge9.out Sun Apr 06 16:46:07 2008 -0500
@@ -7,14 +7,10 @@
merging bar failed!
merging baz
1 files updated, 1 files merged, 0 files removed, 1 files unresolved
-There are unresolved merges, you can redo the full merge using:
- hg update -C 2
- hg merge 1
+use 'hg resolve' to retry unresolved file merges
3 files updated, 0 files merged, 1 files removed, 0 files unresolved
merging bar
merging bar failed!
merging baz
1 files updated, 1 files merged, 0 files removed, 1 files unresolved
-There are unresolved merges, you can redo the full merge using:
- hg update -C 1
- hg merge 2
+use 'hg resolve' to retry unresolved file merges
More information about the Mercurial-devel
mailing list