--- a/README Wed May 17 00:23:19 2017 +0200
+++ b/README Wed May 17 09:52:06 2017 +0200
@@ -127,6 +127,9 @@
-------------------
- also enable the new cache (from 6.1.0) for 'evolve.server-only',
+ - fix hg stack json output to be valid json
+ - stack: now display if current revision is in bad state (issue5533)
+ - obscache: fix more cache invalidation propagation
6.1.0 -- 2017-05-03
-------------------
--- a/hgext3rd/evolve/obscache.py Wed May 17 00:23:19 2017 +0200
+++ b/hgext3rd/evolve/obscache.py Wed May 17 09:52:06 2017 +0200
@@ -482,6 +482,7 @@
def destroyed(self):
if 'obsstore' in vars(self):
self.obsstore.obscache.clear()
+ super(obscacherepo, self).destroyed()
def transaction(self, *args, **kwargs):
tr = super(obscacherepo, self).transaction(*args, **kwargs)
--- a/hgext3rd/topic/stack.py Wed May 17 00:23:19 2017 +0200
+++ b/hgext3rd/topic/stack.py Wed May 17 09:52:06 2017 +0200
@@ -15,6 +15,12 @@
trevs = repo.revs("topic(%s) - obsolete()", topic)
return _orderrevs(repo, trevs)
+def labelsgen(prefix, labelssuffix):
+ """ Takes a label prefix and a list of suffixes. Returns a string of the prefix
+ formatted with each suffix separated with a space.
+ """
+ return ' '.join(prefix % suffix for suffix in labelssuffix)
+
def showstack(ui, repo, topic, opts):
fm = ui.formatter('topicstack', opts)
prev = None
@@ -59,35 +65,44 @@
# super crude initial version
for idx, isentry, ctx in entries[::-1]:
+
+ states = []
+ iscurrentrevision = repo.revs('%d and parents()', ctx.rev())
+
+ if iscurrentrevision:
+ states.append('current')
+
if not isentry:
symbol = '^'
- state = 'base'
- elif repo.revs('%d and parents()', ctx.rev()):
+ # "base" is kind of a "ghost" entry
+ # skip other label for them (no current, no unstable)
+ states = ['base']
+ elif iscurrentrevision:
symbol = '@'
- state = 'current'
elif repo.revs('%d and unstable()', ctx.rev()):
symbol = '$'
- state = 'unstable'
+ states.append('unstable')
else:
symbol = ':'
- state = 'clean'
+ states.append('clean')
fm.startitem()
fm.data(isentry=isentry)
+
if idx is None:
fm.plain(' ')
else:
fm.write('topic.stack.index', 't%d', idx,
- label='topic.stack.index topic.stack.index.%s' % state)
+ label='topic.stack.index ' + labelsgen('topic.stack.index.%s', states))
fm.write('topic.stack.state.symbol', '%s', symbol,
- label='topic.stack.state topic.stack.state.%s' % state)
+ label='topic.stack.state ' + labelsgen('topic.stack.state.%s', states))
fm.plain(' ')
fm.write('topic.stack.desc', '%s', ctx.description().splitlines()[0],
- label='topic.stack.desc topic.stack.desc.%s' % state)
- fm.condwrite(state != 'clean' and idx is not None, 'topic.stack.state',
- ' (%s)', state,
- label='topic.stack.state topic.stack.state.%s' % state)
+ label='topic.stack.desc ' + labelsgen('topic.stack.desc.%s', states))
+ fm.condwrite(states != ['clean'] and idx is not None, 'topic.stack.state',
+ ' (%s)', fm.formatlist(states, 'topic.stack.state'),
+ label='topic.stack.state ' + labelsgen('topic.stack.state.%s', states))
fm.plain('\n')
- fm.end()
+ fm.end()
def stackdata(repo, topic):
"""get various data about a stack
--- a/tests/test-topic-stack.t Wed May 17 00:23:19 2017 +0200
+++ b/tests/test-topic-stack.t Wed May 17 09:52:06 2017 +0200
@@ -77,6 +77,53 @@
t2: c_d
t1: c_c
^ c_b
+ $ hg stack -Tjson | python -m json.tool
+ [
+ {
+ "isentry": true,
+ "topic.stack.desc": "c_f",
+ "topic.stack.index": 4,
+ "topic.stack.state": [
+ "current"
+ ],
+ "topic.stack.state.symbol": "@"
+ },
+ {
+ "isentry": true,
+ "topic.stack.desc": "c_e",
+ "topic.stack.index": 3,
+ "topic.stack.state": [
+ "clean"
+ ],
+ "topic.stack.state.symbol": ":"
+ },
+ {
+ "isentry": true,
+ "topic.stack.desc": "c_d",
+ "topic.stack.index": 2,
+ "topic.stack.state": [
+ "clean"
+ ],
+ "topic.stack.state.symbol": ":"
+ },
+ {
+ "isentry": true,
+ "topic.stack.desc": "c_c",
+ "topic.stack.index": 1,
+ "topic.stack.state": [
+ "clean"
+ ],
+ "topic.stack.state.symbol": ":"
+ },
+ {
+ "isentry": false,
+ "topic.stack.desc": "c_b",
+ "topic.stack.state": [
+ "base"
+ ],
+ "topic.stack.state.symbol": "^"
+ }
+ ]
error case, nothing to list
@@ -135,6 +182,26 @@
t2@ c_d (current)
t1: c_c
^ c_b
+ $ hg up t3
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg topic --list
+ ### topic: foo
+ ### branch: default
+ t4$ c_f (unstable)
+ t3@ c_e (current)
+ t2: c_d
+ t1: c_c
+ ^ c_b
+ $ hg topic --list --color=debug
+ [topic.stack.summary.topic|### topic: [topic.active|foo]]
+ [topic.stack.summary.branches|### branch: default]
+ [topic.stack.index topic.stack.index.unstable|t4][topic.stack.state topic.stack.state.unstable|$] [topic.stack.desc topic.stack.desc.unstable|c_f][topic.stack.state topic.stack.state.unstable| (unstable)]
+ [topic.stack.index topic.stack.index.current|t3][topic.stack.state topic.stack.state.current|@] [topic.stack.desc topic.stack.desc.current|c_e][topic.stack.state topic.stack.state.current| (current)]
+ [topic.stack.index topic.stack.index.clean|t2][topic.stack.state topic.stack.state.clean|:] [topic.stack.desc topic.stack.desc.clean|c_d]
+ [topic.stack.index topic.stack.index.clean|t1][topic.stack.state topic.stack.state.clean|:] [topic.stack.desc topic.stack.desc.clean|c_c]
+ [topic.stack.state topic.stack.state.base|^] [topic.stack.desc topic.stack.desc.base|c_b]
+ $ hg up t2
+ 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
Also test the revset: