--- a/hgext/inhibit.py Tue Jan 19 15:30:23 2016 -0800
+++ b/hgext/inhibit.py Wed Jan 27 13:57:08 2016 -0800
@@ -207,6 +207,7 @@
# obsolete commit to inhibit them
visibleobsolete = repo.revs('obsolete() - hidden()')
ignoreset = set(getattr(repo, '_rebaseset', []))
+ ignoreset |= set(getattr(repo, '_obsoletenotrebased', []))
visibleobsolete = list(r for r in visibleobsolete if r not in ignoreset)
if visibleobsolete:
_inhibitmarkers(repo, [repo[r].node() for r in visibleobsolete])
@@ -216,6 +217,28 @@
inhibitposttransaction)
return transaction
+
+# We wrap these two functions to address the following scenario:
+# - Assuming that we have markers between commits in the rebase set and
+# destination and that these markers are inhibited
+# - At the end of the rebase the nodes are still visible because rebase operate
+# without inhibition and skip these nodes
+# We keep track in repo._obsoletenotrebased of the obsolete commits skipped by
+# the rebase and lift the inhibition in the end of the rebase.
+
+def _computeobsoletenotrebased(orig, repo, *args, **kwargs):
+ r = orig(repo, *args, **kwargs)
+ repo._obsoletenotrebased = r.keys()
+ return r
+
+def _clearrebased(orig, ui, repo, *args, **kwargs):
+ r = orig(ui, repo, *args, **kwargs)
+ tonode = repo.changelog.node
+ if util.safehasattr(repo, '_obsoletenotrebased'):
+ _deinhibitmarkers(repo, [tonode(k) for k in repo._obsoletenotrebased])
+ return r
+
+
def extsetup(ui):
# lets wrap the computation of the obsolete set
# We apply inhibition there
@@ -262,6 +285,12 @@
extensions.wrapfunction(rebase,
'_filterobsoleterevs',
_filterobsoleterevswrap)
+ extensions.wrapfunction(rebase, 'clearrebased', _clearrebased)
+ if util.safehasattr(rebase, '_computeobsoletenotrebased'):
+ extensions.wrapfunction(rebase,
+ '_computeobsoletenotrebased',
+ _computeobsoletenotrebased)
+
except KeyError:
pass
# There are two ways to save bookmark changes during a transation, we