--- 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')