Mercurial > hg
changeset 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 | d044a762f47f |
children | 75b43843eb4d |
files | mercurial/bookmarks.py tests/test-bookmarks-pushpull.t |
diffstat | 2 files changed, 5 insertions(+), 3 deletions(-) [+] |
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:
--- a/tests/test-bookmarks-pushpull.t Thu Oct 25 23:36:03 2012 +0200 +++ b/tests/test-bookmarks-pushpull.t Thu Oct 25 23:43:52 2012 +0200 @@ -262,7 +262,8 @@ 4efff6d98829d9c824c621afd6e3f01865f5439f $ hg id --debug -r 5 c922c0139ca03858f655e4a2af4dd02796a63969 tip Y - $ hg debugobsolete f6fc62dde3c0771e29704af56ba4d8af77abcc2f 4efff6d98829d9c824c621afd6e3f01865f5439f + $ hg debugobsolete f6fc62dde3c0771e29704af56ba4d8af77abcc2f cccccccccccccccccccccccccccccccccccccccc + $ hg debugobsolete cccccccccccccccccccccccccccccccccccccccc 4efff6d98829d9c824c621afd6e3f01865f5439f $ hg push http://localhost:$HGPORT2/ pushing to http://localhost:$HGPORT2/ searching for changes