diff -r 48d18ba05480 -r 3f8c11865ed2 hgext/obsolete.py --- a/hgext/obsolete.py Tue Aug 07 18:17:13 2012 +0200 +++ b/hgext/obsolete.py Tue Aug 07 18:05:41 2012 +0200 @@ -609,15 +609,6 @@ finally: lock.release() - # XXX kill me - def addcollapsedobsolete(self, oldnodes, newnode): - """Mark oldnodes as collapsed into newnode.""" - # Assume oldnodes are all descendants of a single rev - rootrevs = self.revs('roots(%ln)', oldnodes) - assert len(rootrevs) == 1, rootrevs - #rootnode = self[rootrevs[0]].node() - for n in oldnodes: - self.addobsolete(newnode, n) repo.__class__ = obsoletingrepo ##################################################################### @@ -873,41 +864,49 @@ repo._rebasestate = {} repo._rebasetarget = None try: - res = orig(ui, repo, *args, **kwargs) - if not reallykeep: - # Filter nullmerge or unrebased entries - repo._rebasestate = dict(p for p in repo._rebasestate.iteritems() - if p[1] >= 0) - if not res and not kwargs.get('abort') and repo._rebasestate: - # Rebased revisions are assumed to be descendants of - # targetrev. If a source revision is mapped to targetrev - # or to another rebased revision, it must have been - # removed. - targetrev = repo[repo._rebasetarget].rev() - newrevs = set([targetrev]) - replacements = {} - for rev, newrev in sorted(repo._rebasestate.items()): - oldnode = repo[rev].node() - if newrev not in newrevs: - newnode = repo[newrev].node() - newrevs.add(newrev) + l = repo.lock() + try: + res = orig(ui, repo, *args, **kwargs) + if not reallykeep: + # Filter nullmerge or unrebased entries + repo._rebasestate = dict(p for p in repo._rebasestate.iteritems() + if p[1] >= 0) + if not res and not kwargs.get('abort') and repo._rebasestate: + # Rebased revisions are assumed to be descendants of + # targetrev. If a source revision is mapped to targetrev + # or to another rebased revision, it must have been + # removed. + targetrev = repo[repo._rebasetarget].rev() + newrevs = set([targetrev]) + replacements = {} + for rev, newrev in sorted(repo._rebasestate.items()): + oldnode = repo[rev].node() + if newrev not in newrevs: + newnode = repo[newrev].node() + newrevs.add(newrev) + else: + newnode = nullid + replacements[oldnode] = newnode + + if kwargs.get('collapse'): + newnodes = set(n for n in replacements.values() if n != nullid) + if newnodes: + # Collapsing into more than one revision? + assert len(newnodes) == 1, newnodes + newnode = newnodes.pop() + markers = [(repo[r], (repo[newnode],)) + for r in replacements] + else: + newnode = nullid + markers = [(repo[r], ()) + for r in replacements] + createmarkers(repo, markers) else: - newnode = nullid - replacements[oldnode] = newnode - - if kwargs.get('collapse'): - newnodes = set(n for n in replacements.values() if n != nullid) - if newnodes: - # Collapsing into more than one revision? - assert len(newnodes) == 1, newnodes - newnode = newnodes.pop() - else: - newnode = nullid - repo.addcollapsedobsolete(replacements, newnode) - else: - for oldnode, newnode in replacements.iteritems(): - repo.addobsolete(newnode, oldnode) - return res + for oldnode, newnode in replacements.iteritems(): + repo.addobsolete(newnode, oldnode) + return res + finally: + l.release() finally: delattr(repo, '_rebasestate') delattr(repo, '_rebasetarget')