# HG changeset patch # User Pierre-Yves David # Date 1351201432 -7200 # Node ID daf32ebfde6bd2f45c28f7e26e33f83e64c2f24e # Parent d044a762f47f8cacda259588dce1000f4c31bcba 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. diff -r d044a762f47f -r daf32ebfde6b mercurial/bookmarks.py --- 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: diff -r d044a762f47f -r daf32ebfde6b tests/test-bookmarks-pushpull.t --- 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