diff mercurial/merge.py @ 26304:bca60842e22d

update: move default destination into a revset This is another step toward having "default" destination more clear and unified. Not all the logic is there because some bookmark related computation happened elsewhere. It will be moved later. The function is private because as for the other ones, cleanup is needed before we can proceed.
author Pierre-Yves David <pierre-yves.david@fb.com>
date Fri, 18 Sep 2015 17:23:10 -0700
parents 007ac1acfcac
children d3bd6cefd742
line wrap: on
line diff
--- a/mercurial/merge.py	Thu Sep 17 14:03:15 2015 -0700
+++ b/mercurial/merge.py	Fri Sep 18 17:23:10 2015 -0700
@@ -21,7 +21,6 @@
 )
 from . import (
     copies,
-    error as errormod,
     filemerge,
     obsolete,
     subrepo,
@@ -985,42 +984,10 @@
             pas = [repo[ancestor]]
 
         if node is None:
-            # Here is where we should consider bookmarks, divergent bookmarks,
-            # foreground changesets (successors), and tip of current branch;
-            # but currently we are only checking the branch tips.
-            try:
-                node = repo.branchtip(wc.branch())
-            except errormod.RepoLookupError:
-                if wc.branch() == 'default': # no default branch!
-                    node = repo.lookup('tip') # update to tip
-                else:
-                    raise util.Abort(_("branch %s not found") % wc.branch())
-
-            if p1.obsolete() and not p1.children():
-                # allow updating to successors
-                successors = obsolete.successorssets(repo, p1.node())
-
-                # behavior of certain cases is as follows,
-                #
-                # divergent changesets: update to highest rev, similar to what
-                #     is currently done when there are more than one head
-                #     (i.e. 'tip')
-                #
-                # replaced changesets: same as divergent except we know there
-                # is no conflict
-                #
-                # pruned changeset: no update is done; though, we could
-                #     consider updating to the first non-obsolete parent,
-                #     similar to what is current done for 'hg prune'
-
-                if successors:
-                    # flatten the list here handles both divergent (len > 1)
-                    # and the usual case (len = 1)
-                    successors = [n for sub in successors for n in sub]
-
-                    # get the max revision for the given successors set,
-                    # i.e. the 'tip' of a set
-                    node = repo.revs('max(%ln)', successors).first()
+            nodes = list(repo.set('_updatedefaultdest()'))
+            if nodes:
+                node = nodes[0].node()
+                if p1.obsolete() and not p1.children():
                     pas = [p1]
 
         overwrite = force and not branchmerge