Mercurial > hg
changeset 17759:9c7497cd39fd
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.
author | Pierre-Yves David <pierre-yves.david@logilab.fr> |
---|---|
date | Thu, 27 Sep 2012 13:59:48 +0200 |
parents | 5863f0e4cd3a |
children | 1b8e820ef19d |
files | hgext/histedit.py tests/test-histedit-obsolete.t |
diffstat | 2 files changed, 104 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/histedit.py Thu Oct 11 08:36:50 2012 +0200 +++ b/hgext/histedit.py Thu Sep 27 13:59:48 2012 +0200 @@ -156,6 +156,7 @@ 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 _ @@ -508,7 +509,15 @@ if mapping: movebookmarks(ui, repo, mapping, topmost, ntm) # 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'))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-histedit-obsolete.t Thu Sep 27 13:59:48 2012 +0200 @@ -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)