D6588: abort: added support for merge
taapas1128 (Taapas Agrawal)
phabricator at mercurial-scm.org
Sat Jul 6 18:56:38 UTC 2019
taapas1128 updated this revision to Diff 15783.
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D6588?vs=15770&id=15783
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-commit-unresolved.t
tests/test-shelve2.t
CHANGE DETAILS
diff --git a/tests/test-shelve2.t b/tests/test-shelve2.t
--- a/tests/test-shelve2.t
+++ b/tests/test-shelve2.t
@@ -724,15 +724,20 @@
Unshelve --abort fails with appropriate message if there's no unshelve in
progress
+
+#if abortflag
+ $ hg unshelve --abort
+ abort: no unshelve in progress
+ [255]
+#else
$ hg abort
- abort: no unshelve in progress (abortflag !)
- abort: merge does not support 'hg abort' (abortcommand !)
- (use 'hg commit' or 'hg merge --abort') (abortcommand !)
- abort: merge does not support 'hg abort' (phasebased !)
- (use 'hg commit' or 'hg merge --abort') (phasebased !)
- abort: merge does not support 'hg abort' (stripbased !)
- (use 'hg commit' or 'hg merge --abort') (stripbased !)
- [255]
+ aborting the merge, updating back to 9451eaa6eee3 (abortcommand !)
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (abortcommand !)
+ aborting the merge, updating back to 9451eaa6eee3 (phasebased !)
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (phasebased !)
+ aborting the merge, updating back to 9451eaa6eee3 (stripbased !)
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (stripbased !)
+#endif
$ cd ..
Unshelve respects --keep even if user intervention is needed
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,11 @@
+#testcases abortcommand abortflag
+#if abortflag
+ $ cat >> $HGRCPATH <<EOF
+ > [alias]
+ > abort = merge --abort
+ > EOF
+#endif
+
$ addcommit () {
> echo $1 > $1
> hg add $1
@@ -36,9 +44,11 @@
Testing the abort functionality first in case of conflicts
- $ hg merge --abort
- abort: no merge in progress
+ $ hg abort
+ abort: no merge in progress (abortflag !)
+ abort: no operation in progress (abortcommand !)
[255]
+
$ hg merge
merging A
warning: conflicts while merging A! (edit, then use 'hg resolve --mark')
@@ -53,7 +63,22 @@
abort: cannot specify both --rev and --abort
[255]
- $ hg merge --abort
+#if abortcommand
+when in dry-run mode
+ $ hg abort --dry-run
+ merge in progress, will be aborted
+
+when in no-backup mode
+ $ hg abort --no-backup
+ abort: aborting merge does not support no-backup flag
+ [255]
+
+when dry-run mode is used with no backup
+ $ hg abort --dry-run --no-backup
+ merge in progress, will be aborted
+#endif
+
+ $ hg abort
aborting the merge, updating back to e45016d2b3d3
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
@@ -131,7 +156,7 @@
abort: cannot specify --preview with --abort
[255]
- $ hg merge --abort
+ $ hg abort
aborting the merge, updating back to 68352a18a7c4
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
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,23 @@
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(_("aborting merge does not support no-backup flag"))
+ 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
@@ -4029,6 +4029,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