[PATCH 3 of 4] destupdate: also include bookmark related logic
Pierre-Yves David
pierre-yves.david at ens-lyon.org
Thu Oct 8 16:42:17 CDT 2015
# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at fb.com>
# Date 1443513806 25200
# Tue Sep 29 01:03:26 2015 -0700
# Node ID 725812283ac94ac10c38ba1112b0857191a1f621
# Parent 18cba2544597d954fde95ee36f6450faab57fcbc
destupdate: also include bookmark related logic
For the same reason, we move the bookmark related update logic into the
'destupdate' function. This requires to extend the returns of the function to
include the bookmark that needs to move (more or less) and the bookmark to
activate at the end of the function.
diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -6543,10 +6543,11 @@ def update(ui, repo, node=None, rev=None
See :hg:`help dates` for a list of formats valid for -d/--date.
Returns 0 on success, 1 if there are unresolved files.
"""
+ movemarkfrom = None
if rev and node:
raise util.Abort(_("please specify just one revision"))
if rev is None or rev == '':
rev = node
@@ -6558,24 +6559,22 @@ def update(ui, repo, node=None, rev=None
if date:
if rev is not None:
raise util.Abort(_("you can't specify a revision and a date"))
rev = cmdutil.finddate(ui, repo, date)
- # with no argument, we also move the active bookmark, if any
- rev, movemarkfrom = bookmarks.calculateupdate(ui, repo, rev)
-
# if we defined a bookmark, we have to remember the original name
brev = rev
rev = scmutil.revsingle(repo, rev, rev).rev()
if check and clean:
raise util.Abort(_("cannot specify both -c/--check and -C/--clean"))
if check:
cmdutil.bailifchanged(repo, merge=False)
if rev is None:
- rev = destutil.destupdate(repo, clean=clean, check=check)
+ updata = destutil.destupdate(repo, clean=clean, check=check)
+ rev, movemarkfrom, brev = updata
repo.ui.setconfig('ui', 'forcemerge', tool, 'update')
if clean:
ret = hg.clean(repo, rev)
diff --git a/mercurial/destutil.py b/mercurial/destutil.py
--- a/mercurial/destutil.py
+++ b/mercurial/destutil.py
@@ -5,30 +5,43 @@
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
from .i18n import _
from . import (
+ bookmarks,
error,
util,
obsolete,
)
def destupdate(repo, clean=False, check=False):
"""destination for bare update operation
+
+ return (rev, ancestor, movemark, activemark)
+
+ - rev: the revision to update to,
+ - a bookmark moved by the update
+ - a bookmark activated by the update
"""
- # Here is where we should consider bookmarks, divergent bookmarks, and tip
- # of current branch; but currently we are only checking the branch tips.
node = None
wc = repo[None]
p1 = wc.p1()
- try:
- node = repo.branchtip(wc.branch())
- except error.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())
+ activemark = None
+
+ # we also move the active bookmark, if any
+ node, movemark = bookmarks.calculateupdate(repo.ui, repo, None)
+ if node is not None:
+ activemark = node
+
+ if node is None:
+ try:
+ node = repo.branchtip(wc.branch())
+ except error.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())
@@ -75,6 +88,6 @@ def destupdate(repo, clean=False, check=
elif not check: # destination is not a descendant.
msg = _("not a linear update")
hint = _("merge or update --check to force update")
raise util.Abort(msg, hint=hint)
- return rev
+ return rev, movemark, activemark
diff --git a/mercurial/merge.py b/mercurial/merge.py
--- a/mercurial/merge.py
+++ b/mercurial/merge.py
@@ -993,11 +993,12 @@ def update(repo, node, branchmerge, forc
pas = [None]
if ancestor is not None:
pas = [repo[ancestor]]
if node is None:
- node = repo[destutil.destupdate(repo)].node()
+ rev, _mark, _act = destutil.destupdate(repo)
+ node = repo[rev].node()
overwrite = force and not branchmerge
p2 = repo[node]
if pas[0] is None:
More information about the Mercurial-devel
mailing list