diff --git a/hgext3rd/fbamend/hiddenoverride.py b/hgext3rd/fbamend/hiddenoverride.py --- a/hgext3rd/fbamend/hiddenoverride.py +++ b/hgext3rd/fbamend/hiddenoverride.py @@ -10,6 +10,7 @@ import contextlib import os +from mercurial.node import short from mercurial import ( dispatch, error, @@ -92,15 +93,21 @@ fcntl.flock(lockfd, fcntl.LOCK_UN) os.close(lockfd) -def savepinnednodes(repo, newpin, newunpin): +def savepinnednodes(repo, newpin, newunpin, fullargs): # take a narrowed lock so it does not affect repo lock with flock(repo.svfs.join('obsinhibit.lock')): - nodes = set(loadpinnednodes(repo)) + orignodes = loadpinnednodes(repo) + nodes = set(orignodes) nodes |= set(newpin) nodes -= set(newunpin) with util.atomictempfile(repo.svfs.join('obsinhibit')) as f: f.write(''.join(nodes)) + desc = lambda s: [short(n) for n in s] + repo.ui.log('pinnednodes', 'pinnednodes: %r newpin=%r newunpin=%r ' + 'before=%r after=%r\n', fullargs, desc(newpin), + desc(newunpin), desc(orignodes), desc(nodes)) + def runcommand(orig, lui, repo, cmd, fullargs, *args): # return directly for non-repo command if not repo: @@ -118,7 +125,7 @@ newpin = set(n for n in newpin if unfi[n].obsolete()) # only do a write if something has changed if newpin or newunpin: - savepinnednodes(repo, newpin, newunpin) + savepinnednodes(repo, newpin, newunpin, fullargs) return result def createmarkers(orig, repo, rels, *args, **kwargs): diff --git a/tests/test-fbamend-hiddenoverride.t b/tests/test-fbamend-hiddenoverride.t --- a/tests/test-fbamend-hiddenoverride.t +++ b/tests/test-fbamend-hiddenoverride.t @@ -1,9 +1,13 @@ $ cat >> $HGRCPATH << EOF > [extensions] + > blackbox= > fbamend=$TESTDIR/../hgext3rd/fbamend > drawdag=$RUNTESTDIR/drawdag.py > [experimental] > evolution = all + > [blackbox] + > track = command, commandfinish, commandexception, + > pinnednodes > EOF $ hg init @@ -56,6 +60,37 @@ |/ @ 0 A +Check blackbox logs + + $ hg blackbox -l 10000 + *> debugdrawdag (glob) + *> pinnednodes: ['debugdrawdag'] newpin=[] newunpin=['112478962961'] before=[] after=[] (glob) + *> debugdrawdag exited 0 after * (glob) + *> log -G -T '{rev} {desc}\n' (glob) + *> log -G -T '{rev} {desc}\n' exited 0 after * (glob) + *> log -G -T '{rev} {desc}\n' --hidden (glob) + *> log -G -T '{rev} {desc}\n' --hidden exited 0 after * (glob) + *> update 1 --hidden -q (glob) + *> pinnednodes: ['update', '1', '--hidden', '-q'] newpin=['112478962961'] newunpin=[] before=[] after=['112478962961'] (glob) + *> update 1 --hidden -q exited 0 after * (glob) + *> update 0 -q (glob) + *> update 0 -q exited 0 after * (glob) + *> log -G -T '{rev} {desc}\n' (glob) + *> log -G -T '{rev} {desc}\n' exited 0 after * (glob) + *> prune 1 -q (glob) + *> pinnednodes: ['prune', '1', '-q'] newpin=[] newunpin=['112478962961'] before=[] after=[] (glob) + *> prune 1 -q exited 0 after * (glob) + *> log -G -T '{rev} {desc}\n' (glob) + *> log -G -T '{rev} {desc}\n' exited 0 after * (glob) + *> bookmark -ir 1 BOOK --hidden -q (glob) + *> pinnednodes: ['bookmark', '-ir', '1', 'BOOK', '--hidden', '-q'] newpin=['112478962961'] newunpin=[] before=[] after=['112478962961'] (glob) + *> bookmark -ir 1 BOOK --hidden -q exited 0 after * (glob) + *> bookmark -d BOOK -q (glob) + *> bookmark -d BOOK -q exited 0 after * (glob) + *> log -G -T '{rev} {desc}\n' (glob) + *> log -G -T '{rev} {desc}\n' exited 0 after * (glob) + *> blackbox -l 10000 (glob) + The order matters - putting bookmarks or moving working copy on non-obsoleted commits do not pin them. Test this using "debugobsolete" which will not call "createmarkers".