Mercurial > hg
diff mercurial/bookmarks.py @ 17865:daf32ebfde6b stable
bookmark: prevent crashing when a successor is unknown locally (issue3680)
The `%ln` revset substitution does not accept unknown node. We prune unknown
node from potential successors before computing descendants.
This have no impact on the result of this function.
- Descendants of unknown changeset as unknown,
- all successors of unknown changesets are already return by the call who
returned those same unknown changesets,
- unknown changesets are never a valid destination for a bookmark.
author | Pierre-Yves David <pierre-yves.david@logilab.fr> |
---|---|
date | Thu, 25 Oct 2012 23:43:52 +0200 |
parents | 612db9d7e76a |
children | 75b43843eb4d |
line wrap: on
line diff
--- a/mercurial/bookmarks.py Thu Oct 25 23:36:03 2012 +0200 +++ b/mercurial/bookmarks.py Thu Oct 25 23:43:52 2012 +0200 @@ -256,7 +256,7 @@ elif repo.obsstore: # We only need this complicated logic if there is obsolescence # XXX will probably deserve an optimised revset. - + nm = repo.changelog.nodemap validdests = set([old]) plen = -1 # compute the whole set of successors or descendants @@ -268,7 +268,8 @@ # obsolescence marker does not apply to public changeset succs.update(obsolete.allsuccessors(repo.obsstore, [c.node()])) - validdests = set(repo.set('%ln::', succs)) + known = (n for n in succs if nm.get(n) is not None) + validdests = set(repo.set('%ln::', known)) validdests.remove(old) return new in validdests else: