[PATCH] histedit: expose histedit plan via tags RFC
timeless
timeless at mozdev.org
Fri Dec 25 21:23:05 UTC 2015
# HG changeset patch
# User timeless <timeless at mozdev.org>
# Date 1451069184 0
# Fri Dec 25 18:46:24 2015 +0000
# Node ID ea3b6c05af8fe118aafe23f719bce3ad86f3f297
# Parent e2aa9c4030c4109e5efa50462ffc6048ca30106f
histedit: expose histedit plan via tags RFC
This isn't ready for merging, but I'd like people to think about this...
https://public.etherpad-mozilla.org/p/HisteditLabels
$ EDITOR=cat hg histedit --edit-plan
mess 4a16ba62654e 2 1
drop 5d1098ab227e 3 2
fold 6767ceabe4dd 4 3
roll 361cfb0601fc 5 4
pick 405aae9a557f 6 5
pick 629dbc9cce33 7 6
pick fb6bc3d9960a 8 7
pick c67e1d4dd153 9 8
$ hg log -G --template "{rev}\n{tags}"
@ 12
| h_2_applied tip
o 11
h_0_applied
o 10
| h_0 h_0_origin
o 9
| h_10 h_10_pick
o 8
| h_9 h_9_pick
o 7
| h_8 h_8_pick
o 6
| h_7 h_7_pick
o 5
| h_6 h_6_roll
o 4
| h_5 h_5_fold
o 3
| h-next h_4 h_4_drop
o 2
| h-current h_3 h_3_mess
o 1
| h-prev h_2 h_2_origin
o 0
h_1 h_1_dropped
diff --git a/hgext/histedit.py b/hgext/histedit.py
--- a/hgext/histedit.py
+++ b/hgext/histedit.py
@@ -193,6 +193,7 @@
from mercurial import scmutil
from mercurial import util
from mercurial import obsolete
+from mercurial import localrepo
from mercurial import merge as mergemod
from mercurial.lock import release
from mercurial.i18n import _
@@ -1260,7 +1261,7 @@
1) the list of final node
2) the list of temporary node
- This meant to be used on abort as less data are required in this case.
+ This is meant to be used on abort as less data are required in this case.
"""
replacements = state.replacements
allsuccs = set()
@@ -1428,6 +1429,55 @@
ui.write(_('hist: %s (histedit --continue)\n') %
(ui.label(_('%d remaining'), 'histedit.remaining') %
len(state.actions)))
+def reposetup(ui, repo):
+ class histeditrepo(repo.__class__):
+ def _findtags(self):
+ '''augment tags from base class with patch tags'''
+ result = super(histeditrepo, self)._findtags()
+
+ histedittags = []
+
+ state = histeditstate(repo)
+
+ if not state.inprogress():
+ return result
+ state.read()
+
+ i = 0
+ def addstate(rev, tag):
+ histedittags.append((rev, "h_%d" % i))
+ histedittags.append((rev, "h_%d_%s" % (i, tag)))
+ for (origin, applied) in state.replacements:
+ if len(applied):
+ histedittags.append((applied[0], "h_%d_%s" % (i, 'applied')))
+ addstate(origin, 'origin')
+ else:
+ addstate(origin, 'dropped')
+ i += 1
+ if i != 0:
+ histedittags.append((histedittags[-1][0], 'h-prev'))
+ if state.actions:
+ histedittags.append((state.actions[0].node, 'h-current'))
+ if len(state.actions) > 1:
+ histedittags.append((state.actions[1].node, 'h-next'))
+ for a in state.actions:
+ addstate(a.node, a.verb)
+ i += 1
+ if not histedittags:
+ return result
+
+ tags = result[0]
+ for item in histedittags:
+ if item[1] in tags:
+ self.ui.warn(_('tag %s overrides histedit concept of same '
+ 'name\n') % item[1])
+ else:
+ tags[item[1]] = item[0]
+
+ return result
+
+ if repo.local():
+ repo.__class__ = histeditrepo
def extsetup(ui):
cmdutil.summaryhooks.add('histedit', summaryhook)
More information about the Mercurial-devel
mailing list