I have a stack of 13 draft patches on top of a public revision b37b6c015168. I pull from upstream, get a bunch of new changesets, the top one is 1adf382a3e65. The first 8 patches in my stack have landed upstream, so I'm hoping to discard those in favor of their public versions. I rebase my stack on top of the new patch:
% hg rebase -d 1adf382a3e65
(I was updated to the tip of my patch stack.) I do a bunch of manual merging, then when the rebase is complete it says
12 new orphan changesets
Uh oh.
% hg log --template list -G -r 'b37b6c015168::ccce79792b68+1adf382a3e65::693db7f7e53d'
@ 693db7f7e53d Write log of weakmap mark activity when crashing due to assert weakmap.incremental
|\
* : c5021e44f9ad Bug 1167452 - Add a currentgc() function that returns lots of info on the internal incremental GC state. r=jonco weakmap.incremental graveyard.unmarkgray
|\:
* : c02c313df219 Bug 1167452 - Unbarrier lookup for delete r=jonco weakmap.incremental weak.inc.compartmental
|\ \
| * \ 403b19b0d8af Bug 1167452 - Make weakmap marking incremental r=jonco weakmap.incremental
| |\ \
| | * \ ac0a26f6e508 Bug 1167452 - Barrier weakmap operations and maintain weak keys table during incremental collections. r=jonco weakmap.incremental
| | |\ \
| | | * \ 2e8530a01784 Bug 1167452 - Implement a mark queue to control marking order during testing r=jonco weakmap.incremental
| | | |\ \
| | | | * \ f94300930136 Bug 1167452 - Make a Cell::isMarked(color) utility function. r=jonco weakmap.incremental
| | | | |\ \
| | | | | * \ 08538f640dc6 Bug 1167452 - Split mark stack into black and gray. r=jonco weakmap.incremental
| | | | | |\ \
| | | | | | * \ 09274d26d2d8 Bug 1167452 - Prevent barriers from firing during tracing, rename markIteratively -> markEntries r=jonco weakmap.incremental
| | | | | | |\ \
| | | | | | | * \ 5a6895c830e9 Bug 1167452 - Split out nursery weak keys from tenured weak keys r=jonco weakmap.incremental
| | | | | | | |\ \
| | | | | | | | * \ db6e18a6793d Bug 1167452 - Switch weakmap marking code back from GCCellPtr to plain Cell* r=jonco weakmap.incremental
| | | | | | | | |\ \
| | | | | | | | | * \ 8fab14e13919 Bug 1167452 - Set gcLastSweepGroupIndex earlier (debugging feature) r=jonco weakmap.incremental
| | | | | | | | | |\ \
| | | | | | | | | | * : 61ff83409647 Bug 1555199 - Use finishGC to finish a GC instead of looping r=jonco weakmap.incremental
| | | | | | | | | | o : 6836e058b34c Bug 1555199 - Use finishGC to finish a GC instead of looping r=jonco weakmap.incremental
| | | | | | | | | | o : 1adf382a3e65 Bug 1553188 - Part 4 - Update remaining references to browser.xul;r=bdahl
+---------------------x ccce79792b68 Bug 1167452 - Add a currentgc() function that returns lots of info on the internal incremental GC state. r=jonco weakmap.incremental
x | | | | | | | | | : ee9f7a9a7530 Bug 1167452 - Unbarrier lookup for delete r=jonco weakmap.incremental
|/ / / / / / / / / /
x / / / / / / / / / df656e93a4ad Bug 1167452 - Make weakmap marking incremental r=jonco weakmap.incremental
|/ / / / / / / / /
x / / / / / / / / 587232d8aec5 Bug 1167452 - Barrier weakmap operations and maintain weak keys table during incremental collections. r=jonco weakmap.incremental
|/ / / / / / / /
x / / / / / / / ec467bfadf6e Bug 1167452 - Implement a mark queue to control marking order during testing r=jonco weakmap.incremental
|/ / / / / / /
x / / / / / / cd946ab6167a Bug 1167452 - Make a Cell::isMarked(color) utility function. r=jonco weakmap.incremental
|/ / / / / /
x / / / / / 89ddcafd5ce3 Bug 1167452 - Split mark stack into black and gray. r=jonco weakmap.incremental
|/ / / / /
x / / / / 2fc04a617c19 Bug 1167452 - Prevent barriers from firing during tracing, rename markIteratively -> markEntries r=jonco weakmap.incremental
|/ / / /
x / / / ab3769ee51c0 Bug 1167452 - Split out nursery weak keys from tenured weak keys r=jonco weakmap.incremental
|/ / /
x / / ff14f2e1ab04 Bug 1167452 - Switch weakmap marking code back from GCCellPtr to plain Cell* r=jonco weakmap.incremental
|/ /
x : c35c51284c41 Bug 1167452 - Set gcLastSweepGroupIndex earlier (debugging feature) r=jonco weakmap.incremental
x : 787de53debea Bug 1555199 - Use finishGC to finish a GC instead of looping r=jonco weakmap.incremental
:/
o b37b6c015168 Bug 1395509 - Add an alloc policy that tracks malloc memory associated with GC things r=sfink
61ff83409647 is content-divergent. I tried to fix it with
% hg evolve -r 61ff83409647 --content-divergent
merge:[s2] Bug 1555199 - Use finishGC to finish a GC instead of looping r=jonco
with: [s3] Bug 1555199 - Use finishGC to finish a GC instead of looping
base: [551660] Use finishGC to finish a GC instead of looping
rebasing "other" content-divergent changeset f0560f8e8af4 on 6836e058b34c
updating to "local" side of the conflict: 61ff83409647
merging "other" content-divergent changeset 'ffffffffffff'
transaction abort!
rollback completed
** Unknown exception encountered with possibly-broken third-party extension trychooser
** which supports versions 3.8 of Mercurial.
** Please disable trychooser and try your action again.
** If that fixes the bug please report it to the extension author.
** Python 2.7.15 (default, Oct 15 2018, 15:26:09) [GCC 8.2.1 20180801 (Red Hat 8.2.1-2)]
** Mercurial Distributed SCM (version 4.9+396-88d4477ac4f6)
** Extensions loaded: strip, mq, record, rebase, relink, graphlog, convert, transplant, purge, share, histedit, shelve, hggit, show, absorb, fsmonitor, blackbox, journal, qbackout, mqext, evolve, topic, hgsubversion, qimportbz, bzexport, trychooser, mozext, firefoxtree, push-to-try, clang-format
Traceback (most recent call last):
File "/home/sfink/bin/hg", line 43, in <module>
dispatch.run()
File "/home/sfink/src/hg/root-4.9/lib64/python2.7/site-packages/mercurial/dispatch.py", line 99, in run
status = dispatch(req)
File "/home/sfink/src/hg/root-4.9/lib64/python2.7/site-packages/mercurial/dispatch.py", line 225, in dispatch
ret = _runcatch(req) or 0
File "/home/sfink/src/hg/root-4.9/lib64/python2.7/site-packages/mercurial/dispatch.py", line 376, in _runcatch
return _callcatch(ui, _runcatchfunc)
File "/home/sfink/src/hg/root-4.9/lib64/python2.7/site-packages/mercurial/dispatch.py", line 384, in _callcatch
return scmutil.callcatch(ui, func)
File "/home/sfink/src/hg/root-4.9/lib64/python2.7/site-packages/mercurial/scmutil.py", line 166, in callcatch
return func()
File "/home/sfink/src/hg/root-4.9/lib64/python2.7/site-packages/mercurial/dispatch.py", line 367, in _runcatchfunc
return _dispatch(req)
File "/home/sfink/src/hg/root-4.9/lib64/python2.7/site-packages/mercurial/dispatch.py", line 1021, in _dispatch
cmdpats, cmdoptions)
File "/home/sfink/src/hg/root-4.9/lib64/python2.7/site-packages/hgext/journal.py", line 90, in runcommand
return orig(lui, repo, cmd, fullargs, *args)
File "/home/sfink/src/hg/root-4.9/lib64/python2.7/site-packages/mercurial/dispatch.py", line 756, in runcommand
ret = _runcommand(ui, options, cmd, d)
File "/home/sfink/src/hg/root-4.9/lib64/python2.7/site-packages/mercurial/dispatch.py", line 1030, in _runcommand
return cmdfunc()
File "/home/sfink/src/hg/root-4.9/lib64/python2.7/site-packages/mercurial/dispatch.py", line 1018, in <lambda>
d = lambda: util.checksignature(func)(ui, *args, **strcmdopt)
File "/home/sfink/src/hg/root-4.9/lib64/python2.7/site-packages/mercurial/util.py", line 1676, in check
return func(*args, **kwargs)
File "/home/sfink/src/hg/root-4.9/lib64/python2.7/site-packages/mercurial/util.py", line 1676, in check
return func(*args, **kwargs)
File "/home/sfink/src/hg/root-4.9/lib64/python2.7/site-packages/hgext/mq.py", line 3633, in mqcommand
return orig(ui, repo, *args, **kwargs)
File "/home/sfink/src/hg/root-4.9/lib64/python2.7/site-packages/mercurial/util.py", line 1676, in check
return func(*args, **kwargs)
File "/home/sfink/lib/hg/evolve/hgext3rd/evolve/evolvecmd.py", line 1705, in evolve
lastsolved=lastsolved, stacktmplt=stacktmplt)
File "/home/sfink/lib/hg/evolve/hgext3rd/evolve/evolvecmd.py", line 85, in _solveone
dryrun, confirm, progresscb)
File "/home/sfink/lib/hg/evolve/hgext3rd/evolve/evolvecmd.py", line 530, in _solvedivergent
evolvestate)
File "/home/sfink/lib/hg/evolve/hgext3rd/evolve/evolvecmd.py", line 561, in _mergecontentdivergents
mergeancestor = repo.changelog.isancestor(divergent.node(), other.node())
File "/home/sfink/src/hg/root-4.9/lib64/python2.7/site-packages/mercurial/revlog.py", line 1199, in isancestor
a, b = self.rev(a), self.rev(b)
File "/home/sfink/src/hg/root-4.9/lib64/python2.7/site-packages/mercurial/changelog.py", line 372, in rev
r = super(changelog, self).rev(node)
File "/home/sfink/src/hg/root-4.9/lib64/python2.7/site-packages/mercurial/revlog.py", line 623, in rev
return self._nodecache[node]
TypeError: expected string or Unicode object, NoneType found
Notice that 6836e058b34c and 61ff83409647 have the same commit message and are both empty. (The emptiness is ok; that landed upstream.)
I'm using meld as a merge tool. The rebase output relating to that patch looks good:
% hg rebase -d inbound
rebasing 552554:787de53debea "Bug 1555199 - Use finishGC to finish a GC instead of looping r=jonco" (weakmap.incremental)
switching to topic weakmap.incremental
rebasing 552555:c35c51284c41 "Bug 1167452 - Set gcLastSweepGroupIndex earlier (debugging feature) r=jonco" (weakmap.incremental)
merging js/src/gc/GC.cpp
merging js/src/gc/Zone.cpp
merging js/src/gc/Zone.h
Processing 3 file(s)...
<output continues>
(inbound
resolves to the updated upstream tip, 1adf382a3e65.) I also have an extension that runs clang-format by wrapping commit:
extensions.wrapfunction(localrepo.localrepository, 'commit', wrappedcommit)
2e8530a01784 is an interesting case; when manually resolving a conflict, I removed an added line. That changeset has the line re-added.
% hg evolve --any
move:[s4] Bug 1167452 - Set gcLastSweepGroupIndex earlier (debugging feature) r=jonco
atop:[s4] Bug 1167452 - Set gcLastSweepGroupIndex earlier (debugging feature) r=jonco
** Unknown exception encountered with possibly-broken third-party extension trychooser
** which supports versions 3.8 of Mercurial.
** Please disable trychooser and try your action again.
** If that fixes the bug please report it to the extension author.
** Python 2.7.15 (default, Oct 15 2018, 15:26:09) [GCC 8.2.1 20180801 (Red Hat 8.2.1-2)]
** Mercurial Distributed SCM (version 4.9+396-88d4477ac4f6)
** Extensions loaded: strip, mq, record, rebase, relink, graphlog, convert, transplant, purge, share, histedit, shelve, hggit, show, absorb, fsmonitor, blackbox, journal, qbackout, mqext, evolve, topic, hgsubversion, qimportbz, bzexport, trychooser, mozext, firefoxtree, push-to-try, clang-format
** ProgrammingError: tried to relocate a node on top of itself
** (This shouldn't happen. If you still need to move changesets, please do so manually with nothing to rebase - working directory parent is also destination)
I think the core of the issue is shown here:
% hg lg -r '693db7f7e53d+c5021e44f9ad+c02c313df219+ccce79792b68+ee9f7a9a7530+b37b6c015168+parents(.)'
* 693db7f7e53d Write log of weakmap mark activity when crashing due to assert weakmap.incremental
|\
@ : c5021e44f9ad Bug 1167452 - Add a currentgc() function that returns lots of info on the internal incremental GC state. r=jonco weakmap.incremental graveyard.unmarkgray
|\:
* : c02c313df219 Bug 1167452 - Unbarrier lookup for delete r=jonco weakmap.incremental weak.inc.compartmental
|\ \
+---x ccce79792b68 Bug 1167452 - Add a currentgc() function that returns lots of info on the internal incremental GC state. r=jonco weakmap.incremental
x : ee9f7a9a7530 Bug 1167452 - Unbarrier lookup for delete r=jonco weakmap.incremental
:/
o b37b6c015168 Bug 1395509 - Add an alloc policy that tracks malloc memory associated with GC things r=sfink
Why is the working directory a merge?
I ended up working around this by updating to inbound
and then grafting the unlanded patches on top of it.