D6588: abort: added support for merge
taapas1128 (Taapas Agrawal)
phabricator at mercurial-scm.org
Thu Jul 4 13:30:12 EDT 2019
taapas1128 updated this revision to Diff 15760.
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D6588?vs=15755&id=15760
CHANGES SINCE LAST ACTION
https://phab.mercurial-scm.org/D6588/new/
REVISION DETAIL
https://phab.mercurial-scm.org/D6588
AFFECTED FILES
mercurial/commands.py
mercurial/hg.py
mercurial/state.py
tests/test-abort.t
tests/test-commit-unresolved.t
CHANGE DETAILS
diff --git a/tests/test-commit-unresolved.t b/tests/test-commit-unresolved.t
--- a/tests/test-commit-unresolved.t
+++ b/tests/test-commit-unresolved.t
@@ -1,3 +1,5 @@
+#testcases hgabort abortflag
+
$ addcommit () {
> echo $1 > $1
> hg add $1
@@ -36,9 +38,18 @@
Testing the abort functionality first in case of conflicts
+#if abortflag
$ hg merge --abort
abort: no merge in progress
[255]
+#endif
+
+#if hgabort
+ $ hg abort
+ abort: no operation in progress
+ [255]
+#endif
+
$ hg merge
merging A
warning: conflicts while merging A! (edit, then use 'hg resolve --mark')
@@ -53,9 +64,33 @@
abort: cannot specify both --rev and --abort
[255]
+#if abortflag
$ hg merge --abort
aborting the merge, updating back to e45016d2b3d3
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+#endif
+
+#if hgabort
+when in dry-run mode
+ $ hg abort --dry-run
+ aborting merge
+
+when in no-backup mode
+ $ hg abort --no-backup
+ abort: merge does not support no-backup flag
+ [255]
+
+when dry-run mode is used with no backup
+ $ hg abort --dry-run --no-backup
+ aborting merge
+ abort: merge does not support no-backup flag
+ [255]
+
+normal abort
+ $ hg abort
+ aborting the merge, updating back to e45016d2b3d3
+ 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+#endif
Checking that we got back in the same state
@@ -131,9 +166,17 @@
abort: cannot specify --preview with --abort
[255]
+#if abortflag
$ hg merge --abort
aborting the merge, updating back to 68352a18a7c4
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+#endif
+
+#if hgabort
+ $ hg abort
+ aborting the merge, updating back to 68352a18a7c4
+ 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+#endif
$ hg id
68352a18a7c4 tip
diff --git a/tests/test-abort.t b/tests/test-abort.t
--- a/tests/test-abort.t
+++ b/tests/test-abort.t
@@ -661,9 +661,8 @@
Unshelve abort fails with appropriate message if there's no unshelve in
progress
$ hg abort
- abort: merge does not support 'hg abort'
- (use 'hg commit' or 'hg merge --abort')
- [255]
+ aborting the merge, updating back to 9451eaa6eee3
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd ..
Abort due to pending changes
diff --git a/mercurial/state.py b/mercurial/state.py
--- a/mercurial/state.py
+++ b/mercurial/state.py
@@ -205,13 +205,6 @@
'To mark the changeset bad: hg bisect --bad\n'
'To abort: hg bisect --reset\n')
)
-addunfinished(
- 'merge', fname=None, clearable=True, allowcommit=True,
- cmdmsg=_('outstanding uncommitted merge'),
- statushint=_('To continue: hg commit\n'
- 'To abort: hg merge --abort'),
- cmdhint=_("use 'hg commit' or 'hg merge --abort'")
-)
def getrepostate(repo):
# experimental config: commands.status.skipstates
diff --git a/mercurial/hg.py b/mercurial/hg.py
--- a/mercurial/hg.py
+++ b/mercurial/hg.py
@@ -956,23 +956,11 @@
abort=False):
"""Branch merge with node, resolving changes. Return true if any
unresolved conflicts."""
- if not abort:
- stats = mergemod.update(repo, node, branchmerge=True, force=force,
- mergeforce=mergeforce, labels=labels)
- else:
- ms = mergemod.mergestate.read(repo)
- if ms.active():
- # there were conflicts
- node = ms.localctx.hex()
- else:
- # there were no conficts, mergestate was not stored
- node = repo['.'].hex()
-
- repo.ui.status(_("aborting the merge, updating back to"
- " %s\n") % node[:12])
- stats = mergemod.update(repo, node, branchmerge=False, force=True,
- labels=labels)
-
+ if abort:
+ return abortmerge(repo.ui, repo, labels=labels)
+
+ stats = mergemod.update(repo, node, branchmerge=True, force=force,
+ mergeforce=mergeforce, labels=labels)
_showstats(repo, stats)
if stats.unresolvedcount:
repo.ui.status(_("use 'hg resolve' to retry unresolved file merges "
@@ -981,6 +969,25 @@
repo.ui.status(_("(branch merge, don't forget to commit)\n"))
return stats.unresolvedcount > 0
+def abortmerge(ui, repo, labels=None, **opts):
+ if opts.get('no_backup'):
+ raise error.Abort(_("merge does not support no-backup flag"))
+ if opts.get('dry_run'):
+ return 0
+ ms = mergemod.mergestate.read(repo)
+ if ms.active():
+ # there were conflicts
+ node = ms.localctx.hex()
+ else:
+ # there were no conficts, mergestate was not stored
+ node = repo['.'].hex()
+
+ repo.ui.status(_("aborting the merge, updating back to"
+ " %s\n") % node[:12])
+ stats = mergemod.update(repo, node, branchmerge=False, force=True,
+ labels=labels)
+ _showstats(repo, stats)
+
def _incoming(displaychlist, subreporecurse, ui, repo, source,
opts, buffered=False):
"""
diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -4101,6 +4101,14 @@
return hg.merge(repo, node, force=force, mergeforce=force,
labels=labels, abort=abort)
+statemod.addunfinished(
+ 'merge', fname=None, clearable=True, allowcommit=True,
+ cmdmsg=_('outstanding uncommitted merge'), abortfunc=hg.abortmerge,
+ statushint=_('To continue: hg commit\n'
+ 'To abort: hg merge --abort'),
+ cmdhint=_("use 'hg commit' or 'hg merge --abort'")
+)
+
@command('outgoing|out',
[('f', 'force', None, _('run even when the destination is unrelated')),
('r', 'rev', [],
To: taapas1128, #hg-reviewers
Cc: pulkit, mercurial-devel
More information about the Mercurial-devel
mailing list