# HG changeset patch # User Yuya Nishihara # Date 2017-04-19 14:10:05 # Node ID c52728b383b475fdbfb2e9098f9728ad131630bc # Parent 2de67783dd31c66be1677aa443b95eabb0129a75 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. diff --git a/mercurial/discovery.py b/mercurial/discovery.py --- a/mercurial/discovery.py +++ b/mercurial/discovery.py @@ -511,7 +511,7 @@ def pushingmarkerfor(obsstore, pushset, 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) diff --git a/tests/test-obsolete-checkheads.t b/tests/test-obsolete-checkheads.t --- a/tests/test-obsolete-checkheads.t +++ b/tests/test-obsolete-checkheads.t @@ -281,3 +281,32 @@ Pulling the missing data makes it work 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]