diff -r 47f1d7b4305d -r be3a94d3105f hgext3rd/pullbundle.py --- a/hgext3rd/pullbundle.py Mon Sep 24 00:51:39 2018 +0200 +++ b/hgext3rd/pullbundle.py Mon Sep 24 01:16:00 2018 +0200 @@ -190,6 +190,8 @@ head = max(localmissing) allslices.extend(localslices) + # unknown subrange might had to be computed + repo.stablerange.save(repo) return [(rangeid, outgoingfromnodes(repo, nodes)) for rangeid, nodes in allslices] @@ -250,6 +252,9 @@ prerange = (headrev, precut) size = stablerange.rangelength(repo, prerange) sub = stablerange.subranges(repo, prerange)[:-1] + # This power of two check is too simplistic and misbehave when too many + # merge are involved. because de merge, there can be "canonical" range + # with various size. while not poweroftwo(tailsize): for prerange in reversed(sub): if tailsize <= 0: