[obsolete] add kill support
diff --git a/hgext/obsolete.py b/hgext/obsolete.py --- a/hgext/obsolete.py +++ b/hgext/obsolete.py @@ -87,7 +87,7 @@ from mercurial import pushkey from mercurial import discovery from mercurial import error from mercurial import commands -from mercurial.node import hex, bin, short +from mercurial.node import hex, bin, short, nullid from mercurial.lock import release ### Patch changectx @@ -255,6 +255,8 @@ def _obsserialise(obssubrels, flike): <subject-full-hex> <object-full-hex>\n""" for sub, objs in obssubrels.iteritems(): for obj in objs: + if sub is None: + sub = nullid flike.write('%s %s\n' % (hex(sub), hex(obj))) def _obsdeserialise(flike): @@ -264,7 +266,10 @@ def _obsdeserialise(flike): rels = {} for line in flike: subhex, objhex = line.split() - rels.setdefault(bin(subhex), set()).add(bin(objhex)) + subnode = bin(subhex) + if subnode == nullid: + subnode = None + rels.setdefault( subnode, set()).add(bin(objhex)) return rels def reposetup(ui, repo): @@ -291,6 +296,8 @@ def reposetup(ui, repo): def addobsolete(self, sub, obj): """Add a relation marking that node <sub> is a new version of <obj>""" + if sub == nullid: + sub = None self._obssubrels.setdefault(sub, set()).add(obj) self._obsobjrels.setdefault(obj, set()).add(sub) try: diff --git a/tests/test-obsolete.t b/tests/test-obsolete.t --- a/tests/test-obsolete.t +++ b/tests/test-obsolete.t @@ -265,10 +265,42 @@ obsolete published changeset $ hg up null 0 files updated, 0 files merged, 4 files removed, 0 files unresolved - $ mkcommit toto # 8 + $ mkcommit toto # 9 created new head - $ hg debugobsolete 8 0 - 159dfc9fa5d3 try to obsolete immutable changeset 1f0dee641bb7 + $ hg id -n + 9 + $ hg debugobsolete 9 0 + 83b5778897ad try to obsolete immutable changeset 1f0dee641bb7 $ qlog -r 'obsolete()' 3 - 0d3f46688ccc +allow to just kill changeset + + $ qlog + 9 + - 83b5778897ad + 8 + - 159dfc9fa5d3 + 4 + - 725c380fe99b + 3 + - 0d3f46688ccc + 1 + - 7c3bad9141dc + 0 + - 1f0dee641bb7 + + $ hg debugobsolete null 9 + $ hg up null -q # to be not based on 9 anymore + $ qlog + 8 + - 159dfc9fa5d3 + 4 + - 725c380fe99b + 3 + - 0d3f46688ccc + 1 + - 7c3bad9141dc + 0 + - 1f0dee641bb7 +