mirror of
https://github.com/facebook/sapling.git
synced 2025-01-07 14:10:42 +03:00
histedit: add support to output nodechanges using formatter
The JSON output of nodechanges will help in automation and to improve editor integrations such as for Nuclide. Differential Revision: https://phab.mercurial-scm.org/D1348
This commit is contained in:
parent
04f1e48a0d
commit
0b80228ebd
@ -917,7 +917,8 @@ def findoutgoing(ui, repo, remote=None, force=False, opts=None):
|
||||
('o', 'outgoing', False, _('changesets not found in destination')),
|
||||
('f', 'force', False,
|
||||
_('force outgoing even for unrelated repositories')),
|
||||
('r', 'rev', [], _('first revision to be edited'), _('REV'))],
|
||||
('r', 'rev', [], _('first revision to be edited'), _('REV'))] +
|
||||
cmdutil.formatteropts,
|
||||
_("[OPTIONS] ([ANCESTOR] | --outgoing [URL])"))
|
||||
def histedit(ui, repo, *freeargs, **opts):
|
||||
"""interactively edit changeset history
|
||||
@ -1095,6 +1096,8 @@ def _validateargs(ui, repo, state, freeargs, opts, goal, rules, revs):
|
||||
|
||||
def _histedit(ui, repo, state, *freeargs, **opts):
|
||||
opts = pycompat.byteskwargs(opts)
|
||||
fm = ui.formatter('histedit', opts)
|
||||
fm.startitem()
|
||||
goal = _getgoal(opts)
|
||||
revs = opts.get('rev', [])
|
||||
rules = opts.get('commands', '')
|
||||
@ -1117,7 +1120,8 @@ def _histedit(ui, repo, state, *freeargs, **opts):
|
||||
_newhistedit(ui, repo, state, revs, freeargs, opts)
|
||||
|
||||
_continuehistedit(ui, repo, state)
|
||||
_finishhistedit(ui, repo, state)
|
||||
_finishhistedit(ui, repo, state, fm)
|
||||
fm.end()
|
||||
|
||||
def _continuehistedit(ui, repo, state):
|
||||
"""This function runs after either:
|
||||
@ -1164,7 +1168,7 @@ def _continuehistedit(ui, repo, state):
|
||||
state.write()
|
||||
ui.progress(_("editing"), None)
|
||||
|
||||
def _finishhistedit(ui, repo, state):
|
||||
def _finishhistedit(ui, repo, state, fm):
|
||||
"""This action runs when histedit is finishing its session"""
|
||||
repo.ui.pushbuffer()
|
||||
hg.update(repo, state.parentctxnode, quietempty=True)
|
||||
@ -1198,6 +1202,13 @@ def _finishhistedit(ui, repo, state):
|
||||
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')
|
||||
hf = fm.hexfunc
|
||||
fl = fm.formatlist
|
||||
fd = fm.formatdict
|
||||
nodechanges = fd({hf(oldn): fl([hf(n) for n in newn], name='node')
|
||||
for oldn, newn in mapping.iteritems()},
|
||||
key="oldnode", value="newnodes")
|
||||
fm.data(nodechanges=nodechanges)
|
||||
|
||||
state.clear()
|
||||
if os.path.exists(repo.sjoin('undo')):
|
||||
|
54
tests/test-histedit-templates.t
Normal file
54
tests/test-histedit-templates.t
Normal file
@ -0,0 +1,54 @@
|
||||
Testing templating for histedit command
|
||||
|
||||
Setup
|
||||
|
||||
$ cat >> $HGRCPATH <<EOF
|
||||
> [extensions]
|
||||
> histedit=
|
||||
> [experimental]
|
||||
> evolution=createmarkers
|
||||
> EOF
|
||||
|
||||
$ hg init repo
|
||||
$ cd repo
|
||||
$ for ch in a b c d; do echo foo > $ch; hg commit -Aqm "Added "$ch; done
|
||||
|
||||
$ hg log -G -T "{rev}:{node|short} {desc}"
|
||||
@ 3:62615734edd5 Added d
|
||||
|
|
||||
o 2:28ad74487de9 Added c
|
||||
|
|
||||
o 1:29becc82797a Added b
|
||||
|
|
||||
o 0:18d04c59bb5d Added a
|
||||
|
||||
Getting the JSON output for nodechanges
|
||||
|
||||
$ hg histedit -Tjson --commands - 2>&1 <<EOF
|
||||
> pick 28ad74487de9 Added c
|
||||
> pick 62615734edd5 Added d
|
||||
> pick 18d04c59bb5d Added a
|
||||
> pick 29becc82797a Added b
|
||||
> EOF
|
||||
[
|
||||
{
|
||||
"nodechanges": {"18d04c59bb5d2d4090ad9a5b59bd6274adb63add": ["109f8ec895447f81b380ba8d4d8b66539ccdcb94"], "28ad74487de9599d00d81085be739c61fc340652": ["bff9e07c1807942b161dab768aa793b48e9a7f9d"], "29becc82797a4bc11ec8880b58eaecd2ab3e7760": ["f5dcf3b4db23f31f1aacf46c33d1393de303d26f"], "62615734edd52f06b6fb9c2beb429e4fe30d57b8": ["201423b441c84d9e6858daed653e0d22485c1cfa"]}
|
||||
}
|
||||
]
|
||||
|
||||
$ hg log -G -T "{rev}:{node|short} {desc}"
|
||||
@ 7:f5dcf3b4db23 Added b
|
||||
|
|
||||
o 6:109f8ec89544 Added a
|
||||
|
|
||||
o 5:201423b441c8 Added d
|
||||
|
|
||||
o 4:bff9e07c1807 Added c
|
||||
|
||||
$ hg histedit -T "{nodechanges|json}" --commands - 2>&1 <<EOF
|
||||
> pick bff9e07c1807 Added c
|
||||
> pick 201423b441c8 Added d
|
||||
> pick 109f8ec89544 Added a
|
||||
> roll f5dcf3b4db23 Added b
|
||||
> EOF
|
||||
{"109f8ec895447f81b380ba8d4d8b66539ccdcb94": ["8d01470bfeab64d3de13c49adb79d88790d38396"], "f3ec56a374bdbdf1953cacca505161442c6f3a3e": [], "f5dcf3b4db23f31f1aacf46c33d1393de303d26f": ["8d01470bfeab64d3de13c49adb79d88790d38396"]} (no-eol)
|
Loading…
Reference in New Issue
Block a user