comparison hgext3rd/topic/stack.py @ 4650:7c05b1625921

stack: get stack data directly from stack and remove stackdata() stackdata function began its life in 137f8b04901e as a proto-stack: it computed stack revs on its own and only had one property to return, "changesetcount". Later it started to prepare and return more properties, but since b933a8068c17 it was computing revs using a getstack function. And then finally in 17749d9d3968 it started to rely on stack class entirely. It was a good function, but now, when all the logic it provided was factored into stack class, I'd say it's finally time for it to be put to rest.
author Anton Shestakov <av6@dwimlabs.net>
date Sun, 05 May 2019 17:39:46 +0800
parents 6b7ad4b50d00
children 55c347b4874f
comparison
equal deleted inserted replaced
4649:6b7ad4b50d00 4650:7c05b1625921
240 240
241 label = 'topic' 241 label = 'topic'
242 if topic == repo.currenttopic: 242 if topic == repo.currenttopic:
243 label = 'topic.active' 243 label = 'topic.active'
244 244
245 data = stackdata(repo, branch=branch, topic=topic) 245 st = stack(repo, branch, topic)
246 empty = False 246 empty = False
247 if data['changesetcount'] == 0: 247 if st.changesetcount == 0:
248 empty = True 248 empty = True
249 if topic is not None: 249 if topic is not None:
250 fm.plain(_('### topic: %s') 250 fm.plain(_('### topic: %s')
251 % ui.label(topic, label), 251 % ui.label(topic, label),
252 label='topic.stack.summary.topic') 252 label='topic.stack.summary.topic')
253 253
254 if 1 < data['headcount']: 254 if 1 < len(st.heads):
255 fm.plain(' (') 255 fm.plain(' (')
256 fm.plain('%d heads' % data['headcount'], 256 fm.plain('%d heads' % len(st.heads),
257 label='topic.stack.summary.headcount.multiple') 257 label='topic.stack.summary.headcount.multiple')
258 fm.plain(')') 258 fm.plain(')')
259 fm.plain('\n') 259 fm.plain('\n')
260 fm.plain(_('### target: %s (branch)') 260 fm.plain(_('### target: %s (branch)')
261 % '+'.join(data['branches']), # XXX handle multi branches 261 % '+'.join(st.branches), # XXX handle multi branches
262 label='topic.stack.summary.branches') 262 label='topic.stack.summary.branches')
263 if topic is None: 263 if topic is None:
264 if 1 < data['headcount']: 264 if 1 < len(st.heads):
265 fm.plain(' (') 265 fm.plain(' (')
266 fm.plain('%d heads' % data['headcount'], 266 fm.plain('%d heads' % len(st.heads),
267 label='topic.stack.summary.headcount.multiple') 267 label='topic.stack.summary.headcount.multiple')
268 fm.plain(')') 268 fm.plain(')')
269 else: 269 else:
270 if data['behindcount'] == -1: 270 if st.behindcount == -1:
271 fm.plain(', ') 271 fm.plain(', ')
272 fm.plain('ambiguous rebase destination - %s' % data['behinderror'], 272 fm.plain('ambiguous rebase destination - %s' % st.behinderror,
273 label='topic.stack.summary.behinderror') 273 label='topic.stack.summary.behinderror')
274 elif data['behindcount']: 274 elif st.behindcount:
275 fm.plain(', ') 275 fm.plain(', ')
276 fm.plain('%d behind' % data['behindcount'], label='topic.stack.summary.behindcount') 276 fm.plain('%d behind' % st.behindcount, label='topic.stack.summary.behindcount')
277 fm.plain('\n') 277 fm.plain('\n')
278 278
279 if empty: 279 if empty:
280 fm.plain(_("(stack is empty)\n")) 280 fm.plain(_("(stack is empty)\n"))
281 281
374 fm.condwrite(states != ['clean'] and idx is not None, 'topic.stack.state', 374 fm.condwrite(states != ['clean'] and idx is not None, 'topic.stack.state',
375 ' (%s)', fm.formatlist(states, 'topic.stack.state'), 375 ' (%s)', fm.formatlist(states, 'topic.stack.state'),
376 label='topic.stack.state ' + labelsgen('topic.stack.state.%s', states)) 376 label='topic.stack.state ' + labelsgen('topic.stack.state.%s', states))
377 fm.plain('\n') 377 fm.plain('\n')
378 fm.end() 378 fm.end()
379
380 def stackdata(repo, branch=None, topic=None):
381 """get various data about a stack
382
383 :changesetcount: number of non-obsolete changesets in the stack
384 :unstablecount: number of unstable changesets
385 :headcount: number of heads on the topic
386 :behindcount: number of changeset on rebase destination
387 """
388 data = {}
389 current = stack(repo, branch, topic)
390 data['changesetcount'] = current.changesetcount
391 data['unstablecount'] = current.unstablecount
392 data['headcount'] = len(current.heads)
393 data['behindcount'] = current.behindcount
394 data['behinderror'] = current.behinderror
395 data['branches'] = current.branches
396 return data