Patchwork [6,of,7] destutil: allow to disable the "on head check" in destmerge

login
register
mail settings
Submitter Pierre-Yves David
Date Feb. 14, 2016, 2:16 a.m.
Message ID <622bb8fc32e96b0130b7.1455416188@marginatus.alto.octopoid.net>
Download mbox | patch
Permalink /patch/13176/
State Superseded
Headers show

Comments

Pierre-Yves David - Feb. 14, 2016, 2:16 a.m.
# HG changeset patch
# User Pierre-Yves David <pierre-yves.david@fb.com>
# Date 1454972295 0
#      Mon Feb 08 22:58:15 2016 +0000
# Node ID 622bb8fc32e96b0130b733fdc60118a6dd69540f
# Parent  6386ab5b42f3742c47f265ea66149a7229bb50d0
# EXP-Topic destination
# Available At http://hg.netv6.net/marmoute-wip/mercurial/
#              hg pull http://hg.netv6.net/marmoute-wip/mercurial/ -r 622bb8fc32e9
destutil: allow to disable the "on head check" in destmerge

'hg merge' refuses to pick a default destination if the working copy is not on
a head. This is a very sensible default for 'hg merge' but 'hg rebase' should
work in this situation. So we introduce a way to disable this check. It will
soon be used by rebase.

Patch

diff --git a/mercurial/destutil.py b/mercurial/destutil.py
--- a/mercurial/destutil.py
+++ b/mercurial/destutil.py
@@ -214,11 +214,11 @@  def _destmergebook(repo, action='merge',
         msg, hint = msgdestmerge['nootherbookmarks'][action]
         raise error.Abort(msg, hint=hint)
     assert node is not None
     return node
 
-def _destmergebranch(repo, action='merge', sourceset=None):
+def _destmergebranch(repo, action='merge', sourceset=None, onheadcheck=True):
     """find merge destination based on branch heads"""
     node = None
 
     if sourceset is None:
         sourceset = [repo[repo.dirstate.p1()].rev()]
@@ -233,11 +233,11 @@  def _destmergebranch(repo, action='merge
                 msg, hint = msgdestmerge['multiplebranchessourceset'][action]
                 raise error.Abort(msg, hint=hint)
             branch = ctx.branch()
 
     bheads = repo.branchheads(branch)
-    if not repo.revs('%ld and %ln', sourceset, bheads):
+    if onheadcheck and not repo.revs('%ld and %ln', sourceset, bheads):
         # Case A: working copy if not on a head. (merge only)
         #
         # This is probably a user mistake We bailout pointing at 'hg update'
         if len(repo.heads()) <= 1:
             msg, hint = msgdestmerge['nootherheadsbehind'][action]
@@ -273,21 +273,22 @@  def _destmergebranch(repo, action='merge
     else:
         node = nbhs[0]
     assert node is not None
     return node
 
-def destmerge(repo, action='merge', sourceset=None):
+def destmerge(repo, action='merge', sourceset=None, onheadcheck=True):
     """return the default destination for a merge
 
     (or raise exception about why it can't pick one)
 
     :action: the action being performed, controls emitted error message
     """
     if repo._activebookmark:
         node = _destmergebook(repo, action=action, sourceset=sourceset)
     else:
-        node = _destmergebranch(repo, action=action, sourceset=sourceset)
+        node = _destmergebranch(repo, action=action, sourceset=sourceset,
+                                onheadcheck=onheadcheck)
     return repo[node].rev()
 
 histeditdefaultrevset = 'reverse(only(.) and not public() and not ::merge())'
 
 def desthistedit(ui, repo):