Skip to content

Instantly share code, notes, and snippets.

@hotsphink
Last active May 31, 2019 23:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hotsphink/a0179e2d4276c454b376b5805a3708aa to your computer and use it in GitHub Desktop.
Save hotsphink/a0179e2d4276c454b376b5805a3708aa to your computer and use it in GitHub Desktop.
mkgist-created gist

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment