Mercurial > hg
changeset 32095:c52728b383b4 stable
discovery: prevent crash caused by prune marker having no parent data
If a marker has no parent information, parents field is set to None, which
caused TypeError. I think this shouldn't normally happen, but somehow
I have such marker in my repo.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Wed, 19 Apr 2017 23:10:05 +0900 |
parents | 2de67783dd31 |
children | 726121fa86e1 |
files | mercurial/discovery.py tests/test-obsolete-checkheads.t |
diffstat | 2 files changed, 30 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/discovery.py Mon May 01 15:40:41 2017 +0200 +++ b/mercurial/discovery.py Wed Apr 19 23:10:05 2017 +0900 @@ -511,7 +511,7 @@ for m in markers: nexts = m[1] # successors if not nexts: # this is a prune marker - nexts = m[5] # parents + nexts = m[5] or () # parents for n in nexts: if n not in seen: seen.add(n)
--- a/tests/test-obsolete-checkheads.t Mon May 01 15:40:41 2017 +0200 +++ b/tests/test-obsolete-checkheads.t Wed Apr 19 23:10:05 2017 +0900 @@ -281,3 +281,32 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) + +Old head is pruned without parent data and new unrelated head added +=================================================================== + +setup + + $ cd .. + $ rm -R remote local + $ cp -R backup1 remote + $ hg clone remote local -qr c70b08862e08 + $ cd local + $ hg up -q '.^' + $ mkcommit new-unrelated + created new head + $ hg debugobsolete `getid old` + $ hg log -G --hidden + @ 350a93b716be (draft) add new-unrelated + | + | x c70b08862e08 (draft) add old + |/ + o b4952fcf48cf (public) add base + + + $ hg push + pushing to $TESTTMP/remote (glob) + searching for changes + abort: push creates new remote head 350a93b716be! + (merge or see 'hg help push' for details about pushing new heads) + [255]