comparison hgext3rd/topic/stack.py @ 2348:5737e0680f10 stable

ui: hg topic now display if current revision is in bad state (issue5533) Previously, hg topic didn't showed the state of the current revision. Now if show both informations.
author Boris Feld <boris.feld@octobus.net>
date Wed, 10 May 2017 14:46:01 +0200
parents a5117a5becf8
children bc36a608e9e4
comparison
equal deleted inserted replaced
2341:a5117a5becf8 2348:5737e0680f10
12 12
13 def getstack(repo, topic): 13 def getstack(repo, topic):
14 # XXX need sorting 14 # XXX need sorting
15 trevs = repo.revs("topic(%s) - obsolete()", topic) 15 trevs = repo.revs("topic(%s) - obsolete()", topic)
16 return _orderrevs(repo, trevs) 16 return _orderrevs(repo, trevs)
17
18 def labelsgen(prefix, labelssuffix):
19 """ Takes a label prefix and a list of suffixes. Returns a string of the prefix
20 formatted with each suffix separated with a space.
21 """
22 return ' '.join(prefix % suffix for suffix in labelssuffix)
17 23
18 def showstack(ui, repo, topic, opts): 24 def showstack(ui, repo, topic, opts):
19 fm = ui.formatter('topicstack', opts) 25 fm = ui.formatter('topicstack', opts)
20 prev = None 26 prev = None
21 entries = [] 27 entries = []
57 idxmap[ctx.rev()] = idx 63 idxmap[ctx.rev()] = idx
58 prev = r 64 prev = r
59 65
60 # super crude initial version 66 # super crude initial version
61 for idx, isentry, ctx in entries[::-1]: 67 for idx, isentry, ctx in entries[::-1]:
68
69 states = []
70 iscurrentrevision = repo.revs('%d and parents()', ctx.rev())
71
72 if iscurrentrevision:
73 states.append('current')
74
62 if not isentry: 75 if not isentry:
63 symbol = '^' 76 symbol = '^'
64 state = 'base' 77 # "base" is kind of a "ghost" entry
65 elif repo.revs('%d and parents()', ctx.rev()): 78 # skip other label for them (no current, no unstable)
79 states = ['base']
80 elif iscurrentrevision:
66 symbol = '@' 81 symbol = '@'
67 state = 'current'
68 elif repo.revs('%d and unstable()', ctx.rev()): 82 elif repo.revs('%d and unstable()', ctx.rev()):
69 symbol = '$' 83 symbol = '$'
70 state = 'unstable' 84 states.append('unstable')
71 else: 85 else:
72 symbol = ':' 86 symbol = ':'
73 state = 'clean' 87 states.append('clean')
74 fm.startitem() 88 fm.startitem()
75 fm.data(isentry=isentry) 89 fm.data(isentry=isentry)
90
76 if idx is None: 91 if idx is None:
77 fm.plain(' ') 92 fm.plain(' ')
78 else: 93 else:
79 fm.write('topic.stack.index', 't%d', idx, 94 fm.write('topic.stack.index', 't%d', idx,
80 label='topic.stack.index topic.stack.index.%s' % state) 95 label='topic.stack.index ' + labelsgen('topic.stack.index.%s', states))
81 fm.write('topic.stack.state.symbol', '%s', symbol, 96 fm.write('topic.stack.state.symbol', '%s', symbol,
82 label='topic.stack.state topic.stack.state.%s' % state) 97 label='topic.stack.state ' + labelsgen('topic.stack.state.%s', states))
83 fm.plain(' ') 98 fm.plain(' ')
84 fm.write('topic.stack.desc', '%s', ctx.description().splitlines()[0], 99 fm.write('topic.stack.desc', '%s', ctx.description().splitlines()[0],
85 label='topic.stack.desc topic.stack.desc.%s' % state) 100 label='topic.stack.desc ' + labelsgen('topic.stack.desc.%s', states))
86 fm.condwrite(state != 'clean' and idx is not None, 'topic.stack.state', 101 fm.condwrite(states != ['clean'] and idx is not None, 'topic.stack.state',
87 ' (%s)', state, 102 ' (%s)', fm.formatlist(states, 'topic.stack.state'),
88 label='topic.stack.state topic.stack.state.%s' % state) 103 label='topic.stack.state ' + labelsgen('topic.stack.state.%s', states))
89 fm.plain('\n') 104 fm.plain('\n')
90 fm.end() 105 fm.end()
91 106
92 def stackdata(repo, topic): 107 def stackdata(repo, topic):
93 """get various data about a stack 108 """get various data about a stack