bookmarks: extract valid destination logic in a dedicated function
We usually update bookmarks only if the new location is descendant of the old
bookmarks location. We extract this logic into a function. This is the first
step to allow more complex logic using obsolescence in this validation of the
bookmark movement.
--- a/mercurial/bookmarks.py Sun Aug 26 00:27:44 2012 +0200
+++ b/mercurial/bookmarks.py Sun Aug 26 00:28:56 2012 +0200
@@ -209,7 +209,7 @@
cl = repo[nl]
if cl.rev() >= cr.rev():
continue
- if cr in cl.descendants():
+ if validdest(repo, cl, cr):
repo._bookmarks[k] = cr.node()
changed = True
ui.status(_("updating bookmark %s\n") % k)
@@ -252,3 +252,7 @@
ui.status(_("no changed bookmarks found\n"))
return 1
return 0
+
+def validdest(repo, old, new):
+ """Is the new bookmark destination a valid update from the old one"""
+ return new in old.descendants()
--- a/mercurial/discovery.py Sun Aug 26 00:27:44 2012 +0200
+++ b/mercurial/discovery.py Sun Aug 26 00:28:56 2012 +0200
@@ -7,7 +7,7 @@
from node import nullid, short
from i18n import _
-import util, setdiscovery, treediscovery, phases, obsolete
+import util, setdiscovery, treediscovery, phases, obsolete, bookmarks
def findcommonincoming(repo, remote, heads=None, force=False):
"""Return a tuple (common, anyincoming, heads) used to identify the common
@@ -255,7 +255,7 @@
rnode = remotebookmarks.get(bm)
if rnode and rnode in repo:
lctx, rctx = repo[bm], repo[rnode]
- if rctx == lctx.ancestor(rctx):
+ if bookmarks.validdest(repo, rctx, lctx):
bookmarkedheads.add(lctx.node())
# 3. Check for new heads.
--- a/mercurial/localrepo.py Sun Aug 26 00:27:44 2012 +0200
+++ b/mercurial/localrepo.py Sun Aug 26 00:28:56 2012 +0200
@@ -1992,7 +1992,7 @@
if nr in self:
cr = self[nr]
cl = self[nl]
- if cl in cr.descendants():
+ if bookmarks.validdest(self, cr, cl):
r = remote.pushkey('bookmarks', k, nr, nl)
if r:
self.ui.status(_("updating bookmark %s\n") % k)