histedit: use scmutil.cleanupnodes (BC)
authorJun Wu <quark@fb.com>
Sat, 08 Jul 2017 16:50:31 -0700
changeset 33351 154298576d44
parent 33350 b320ff822c7e
child 33352 967ac37f3d45
histedit: use scmutil.cleanupnodes (BC) This is marked as BC because the strip backup file name has changed.
hgext/histedit.py
tests/test-histedit-arguments.t
tests/test-histedit-bookmark-motion.t
tests/test-histedit-commute.t
tests/test-histedit-edit.t
tests/test-histedit-fold.t
--- a/hgext/histedit.py	Sat Jul 08 16:50:31 2017 -0700
+++ b/hgext/histedit.py	Sat Jul 08 16:50:31 2017 -0700
@@ -1173,7 +1173,7 @@
 
     if not state.keep:
         if mapping:
-            movebookmarks(ui, repo, mapping, state.topmost, ntm)
+            movetopmostbookmarks(repo, state.topmost, ntm)
             # TODO update mq state
     else:
         mapping = {}
@@ -1181,7 +1181,11 @@
     for n in tmpnodes:
         mapping[n] = ()
 
-    safecleanupnode(ui, repo, mapping)
+    # remove entries about unknown nodes
+    nodemap = repo.unfiltered().changelog.nodemap
+    mapping = {k: v for k, v in mapping.items()
+               if k in nodemap and all(n in nodemap for n in v)}
+    scmutil.cleanupnodes(repo, mapping, 'histedit')
 
     state.clear()
     if os.path.exists(repo.sjoin('undo')):
@@ -1561,38 +1565,6 @@
                 marks[name] = newtopmost
             marks.recordchange(tr)
 
-def movebookmarks(ui, repo, mapping, oldtopmost, newtopmost):
-    """Move bookmark from old to newly created node"""
-    if not mapping:
-        # if nothing got rewritten there is not purpose for this function
-        return
-    movetopmostbookmarks(repo, oldtopmost, newtopmost)
-    moves = []
-    for bk, old in sorted(repo._bookmarks.iteritems()):
-        base = old
-        new = mapping.get(base, None)
-        if new is None:
-            continue
-        while not new:
-            # base is killed, trying with parent
-            base = repo[base].p1().node()
-            new = mapping.get(base, (base,))
-            # nothing to move
-        moves.append((bk, new[-1]))
-    if moves:
-        lock = tr = None
-        try:
-            lock = repo.lock()
-            tr = repo.transaction('histedit')
-            marks = repo._bookmarks
-            for mark, new in moves:
-                old = marks[mark]
-                marks[mark] = new
-            marks.recordchange(tr)
-            tr.close()
-        finally:
-            release(tr, lock)
-
 def cleanupnode(ui, repo, nodes):
     """strip a group of nodes from the repository
 
@@ -1610,34 +1582,6 @@
         if roots:
             repair.strip(ui, repo, roots)
 
-def safecleanupnode(ui, repo, nodes):
-    """strip or obsolete nodes
-
-    nodes could be either a set or dict which maps to replacements.
-    nodes could be unknown (outside the repo).
-    """
-    supportsmarkers = obsolete.isenabled(repo, obsolete.createmarkersopt)
-    if supportsmarkers:
-        if util.safehasattr(nodes, 'get'):
-            # nodes is a dict-like mapping
-            # use unfiltered repo for successors in case they are hidden
-            urepo = repo.unfiltered()
-            def getmarker(prec):
-                succs = tuple(urepo[n] for n in nodes.get(prec, ()))
-                return (repo[prec], succs)
-        else:
-            # nodes is a set-like
-            def getmarker(prec):
-                return (repo[prec], ())
-        # sort by revision number because it sound "right"
-        sortednodes = sorted([n for n in nodes if n in repo],
-                             key=repo.changelog.rev)
-        markers = [getmarker(t) for t in sortednodes]
-        if markers:
-            obsolete.createmarkers(repo, markers, operation='histedit')
-    else:
-        return cleanupnode(ui, repo, nodes)
-
 def stripwrapper(orig, ui, repo, nodelist, *args, **kwargs):
     if isinstance(nodelist, str):
         nodelist = [nodelist]
--- a/tests/test-histedit-arguments.t	Sat Jul 08 16:50:31 2017 -0700
+++ b/tests/test-histedit-arguments.t	Sat Jul 08 16:50:31 2017 -0700
@@ -147,7 +147,7 @@
   $ mv .hg/histedit-state.back .hg/histedit-state
 
   $ hg histedit --continue
-  saved backup bundle to $TESTTMP/foo/.hg/strip-backup/08d98a8350f3-02594089-backup.hg (glob)
+  saved backup bundle to $TESTTMP/foo/.hg/strip-backup/08d98a8350f3-02594089-histedit.hg (glob)
   $ hg log -G -T '{rev} {shortest(node)} {desc}\n' -r 2::
   @  4 f5ed five
   |
@@ -157,7 +157,7 @@
   |
   ~
 
-  $ hg unbundle -q $TESTTMP/foo/.hg/strip-backup/08d98a8350f3-02594089-backup.hg
+  $ hg unbundle -q $TESTTMP/foo/.hg/strip-backup/08d98a8350f3-02594089-histedit.hg
   $ hg strip -q -r f5ed --config extensions.strip=
   $ hg up -q 08d98a8350f3
 
@@ -264,7 +264,7 @@
   HG: user: test
   HG: branch 'default'
   HG: changed alpha
-  saved backup bundle to $TESTTMP/foo/.hg/strip-backup/*-backup.hg (glob)
+  saved backup bundle to $TESTTMP/foo/.hg/strip-backup/c8e68270e35a-63d8b8d8-histedit.hg (glob)
 
   $ hg update -q 2
   $ echo x > x
--- a/tests/test-histedit-bookmark-motion.t	Sat Jul 08 16:50:31 2017 -0700
+++ b/tests/test-histedit-bookmark-motion.t	Sat Jul 08 16:50:31 2017 -0700
@@ -87,7 +87,7 @@
   > fold e860deea161a 4 e
   > pick 652413bf663e 5 f
   > EOF
-  saved backup bundle to $TESTTMP/r/.hg/strip-backup/96e494a2d553-45c027ab-backup.hg (glob)
+  saved backup bundle to $TESTTMP/r/.hg/strip-backup/96e494a2d553-45c027ab-histedit.hg (glob)
   $ hg log --graph
   @  changeset:   3:cacdfd884a93
   |  bookmark:    five
@@ -141,7 +141,7 @@
   > pick cacdfd884a93 3 f
   > pick 59d9f330561f 2 d
   > EOF
-  saved backup bundle to $TESTTMP/r/.hg/strip-backup/59d9f330561f-073008af-backup.hg (glob)
+  saved backup bundle to $TESTTMP/r/.hg/strip-backup/59d9f330561f-073008af-histedit.hg (glob)
 
 We expect 'five' to stay at tip, since the tipmost bookmark is most
 likely the useful signal.
--- a/tests/test-histedit-commute.t	Sat Jul 08 16:50:31 2017 -0700
+++ b/tests/test-histedit-commute.t	Sat Jul 08 16:50:31 2017 -0700
@@ -417,7 +417,7 @@
   > EOF
 
   $ HGEDITOR="sh ./editor.sh" hg histedit 0
-  saved backup bundle to $TESTTMP/issue4251/.hg/strip-backup/*-backup.hg (glob)
+  saved backup bundle to $TESTTMP/issue4251/.hg/strip-backup/b0f4233702ca-4cf5af69-histedit.hg (glob)
 
   $ hg --config diff.git=yes export 0
   # HG changeset patch
--- a/tests/test-histedit-edit.t	Sat Jul 08 16:50:31 2017 -0700
+++ b/tests/test-histedit-edit.t	Sat Jul 08 16:50:31 2017 -0700
@@ -273,7 +273,7 @@
   HG: user: test
   HG: branch 'default'
   HG: added f
-  saved backup bundle to $TESTTMP/r/.hg/strip-backup/b5f70786f9b0-c28d9c86-backup.hg (glob)
+  saved backup bundle to $TESTTMP/r/.hg/strip-backup/b5f70786f9b0-c28d9c86-histedit.hg (glob)
 
   $ hg status
 
@@ -437,7 +437,7 @@
   (hg histedit --continue to resume)
   [1]
   $ HGEDITOR=true hg histedit --continue
-  saved backup bundle to $TESTTMP/r0/.hg/strip-backup/cb9a9f314b8b-cc5ccb0b-backup.hg (glob)
+  saved backup bundle to $TESTTMP/r0/.hg/strip-backup/cb9a9f314b8b-cc5ccb0b-histedit.hg (glob)
 
   $ hg log -G
   @  changeset:   0:0efcea34f18a
--- a/tests/test-histedit-fold.t	Sat Jul 08 16:50:31 2017 -0700
+++ b/tests/test-histedit-fold.t	Sat Jul 08 16:50:31 2017 -0700
@@ -305,7 +305,7 @@
   continue: hg histedit --continue
   $ hg histedit --continue
   251d831eeec5: empty changeset
-  saved backup bundle to $TESTTMP/*-backup.hg (glob)
+  saved backup bundle to $TESTTMP/fold-to-empty-test/.hg/strip-backup/888f9082bf99-daa0b8b3-histedit.hg (glob)
   $ hg logt --graph
   @  1:617f94f13c0f +4
   |
@@ -382,7 +382,7 @@
   HG: user: test
   HG: branch 'default'
   HG: changed file
-  saved backup bundle to $TESTTMP/fold-with-dropped/.hg/strip-backup/617f94f13c0f-3d69522c-backup.hg (glob)
+  saved backup bundle to $TESTTMP/fold-with-dropped/.hg/strip-backup/617f94f13c0f-3d69522c-histedit.hg (glob)
   $ hg logt -G
   @  1:10c647b2cdd5 +4
   |