[PATCH 3 of 5] histedit: add obsolete support
pierre-yves.david at logilab.fr
pierre-yves.david at logilab.fr
Tue Oct 2 04:42:09 CDT 2012
# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at logilab.fr>
# Date 1348747188 -7200
# Node ID 1e4d478adb0b377447a0eefba190ec03ff750a57
# Parent 2ac4884a1a22b58deb148ca0895493d03ab2bea8
histedit: add obsolete support
When the obsolete feature is enabled, histedit creates obsolescence marker
instead of stripping replaced changesets.
For now, we keep stripping temporary nodes created along the way.
diff --git a/hgext/histedit.py b/hgext/histedit.py
--- a/hgext/histedit.py
+++ b/hgext/histedit.py
@@ -154,10 +154,11 @@ from mercurial import hg
from mercurial import lock as lockmod
from mercurial import node
from mercurial import repair
from mercurial import scmutil
from mercurial import util
+from mercurial import obsolete
from mercurial import merge as mergemod
from mercurial.i18n import _
cmdtable = {}
command = cmdutil.command(cmdtable)
@@ -506,11 +507,19 @@ def histedit(ui, repo, *parent, **opts):
if not keep:
if mapping:
movebookmarks(ui, repo, mapping)
# TODO update mq state
- cleanupnode(ui, repo, 'replaced', mapping)
+ if obsolete._enabled:
+ markers = []
+ for prec, succs in mapping.iteritems():
+ markers.append((repo[prec],
+ tuple(repo[s] for s in succs)))
+ if markers:
+ obsolete.createmarkers(repo, markers)
+ else:
+ cleanupnode(ui, repo, 'replaced', mapping)
cleanupnode(ui, repo, 'temp', tmpnodes)
os.unlink(os.path.join(repo.path, 'histedit-state'))
if os.path.exists(repo.sjoin('undo')):
os.unlink(repo.sjoin('undo'))
diff --git a/tests/test-histedit-obsolete.t b/tests/test-histedit-obsolete.t
new file mode 100644
--- /dev/null
+++ b/tests/test-histedit-obsolete.t
@@ -0,0 +1,94 @@
+ $ . "$TESTDIR/histedit-helpers.sh"
+
+Enable obsolete
+
+ $ cat > ${TESTTMP}/obs.py << EOF
+ > import mercurial.obsolete
+ > mercurial.obsolete._enabled = True
+ > EOF
+
+ $ cat >> $HGRCPATH << EOF
+ > [ui]
+ > logtemplate= {rev}:{node|short} {desc|firstline}
+ > [phases]
+ > publish=False
+ > [extensions]'
+ > histedit=
+ >
+ > obs=${TESTTMP}/obs.py
+ > EOF
+
+ $ hg init base
+ $ cd base
+
+ $ for x in a b c d e f ; do
+ > echo $x > $x
+ > hg add $x
+ > hg ci -m $x
+ > done
+
+ $ hg log --graph
+ @ 5:652413bf663e f
+ |
+ o 4:e860deea161a e
+ |
+ o 3:055a42cdd887 d
+ |
+ o 2:177f92b77385 c
+ |
+ o 1:d2ae7f538514 b
+ |
+ o 0:cb9a9f314b8b a
+
+
+ $ HGEDITOR=cat hg histedit 1
+ pick d2ae7f538514 1 b
+ pick 177f92b77385 2 c
+ pick 055a42cdd887 3 d
+ pick e860deea161a 4 e
+ pick 652413bf663e 5 f
+
+ # Edit history between d2ae7f538514 and 652413bf663e
+ #
+ # Commands:
+ # p, pick = use commit
+ # e, edit = use commit, but stop for amending
+ # f, fold = use commit, but fold into previous commit (combines N and N-1)
+ # d, drop = remove commit from history
+ # m, mess = edit message without changing commit content
+ #
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ cat >> commands.txt <<EOF
+ > pick 177f92b77385 2 c
+ > drop d2ae7f538514 1 b
+ > pick 055a42cdd887 3 d
+ > fold e860deea161a 4 e
+ > pick 652413bf663e 5 f
+ > EOF
+ $ hg histedit 1 --commands commands.txt --verbose | grep histedit
+ saved backup bundle to $TESTTMP/base/.hg/strip-backup/34a9919932c1-backup.hg (glob)
+ $ hg log --graph --hidden
+ @ 8:0efacef7cb48 f
+ |
+ o 7:ae467701c500 d
+ |
+ o 6:d36c0562f908 c
+ |
+ | x 5:652413bf663e f
+ | |
+ | x 4:e860deea161a e
+ | |
+ | x 3:055a42cdd887 d
+ | |
+ | x 2:177f92b77385 c
+ | |
+ | x 1:d2ae7f538514 b
+ |/
+ o 0:cb9a9f314b8b a
+
+ $ hg debugobsolete
+ e860deea161a2f77de56603b340ebbb4536308ae ae467701c5006bf21ffcfdb555b3d6b63280b6b7 0 {'date': '*', 'user': 'test'} (glob)
+ 652413bf663ef2a641cab26574e46d5f5a64a55a 0efacef7cb481bf574f69075b82d044fdbe5c20f 0 {'date': '*': 'test'} (glob)
+ d2ae7f538514cd87c17547b0de4cea71fe1af9fb 0 {'date': '*', 'user': 'test'} (glob)
+ 055a42cdd88768532f9cf79daa407fc8d138de9b ae467701c5006bf21ffcfdb555b3d6b63280b6b7 0 {'date': '*': 'test'} (glob)
+ 177f92b773850b59254aa5e923436f921b55483b d36c0562f908c692f5204d606d4ff3537d41f1bf 0 {'date': '*', 'user': 'test'} (glob)
More information about the Mercurial-devel
mailing list