diff hgext3rd/topic/stack.py @ 1955:5452a575b4e5

topic: extract display from entry computation We are about to reverse the order of the output (most recent first) so it will be useful.
author Pierre-Yves David <pierre-yves.david@fb.com>
date Fri, 01 Apr 2016 16:55:24 -0700
parents 61f36480740f
children d8f1e432b16a
line wrap: on
line diff
--- a/hgext3rd/topic/stack.py	Fri Apr 01 16:40:19 2016 -0700
+++ b/hgext3rd/topic/stack.py	Fri Apr 01 16:55:24 2016 -0700
@@ -21,47 +21,47 @@
         raise error.Abort(_('no active topic to list'))
     fm = ui.formatter('topicstack', opts)
     prev = None
+    entries = []
     for idx, r in enumerate(getstack(repo, topic), 1):
         ctx = repo[r]
         p1 = ctx.p1()
         if p1.obsolete():
             p1 = repo[_singlesuccessor(repo, p1)]
         if p1.rev() != prev:
-            # display the parent of the changeset
-            state = 'base'
+            entries.append((None, p1))
+        entries.append((idx, ctx))
+        prev = r
+
+    # super crude initial version
+    for idx, ctx in entries:
+        if idx is None:
             symbol = '_'
-            fm.startitem()
-            fm.plain('  ') # XXX 2 is the right padding by chance
-            fm.write('topic.stack.state', '%s', symbol,
-                     label='topic.stack.state topic.stack.state.%s' % state)
-            fm.plain(' ')
-            fm.write('topic.stack.desc', '%s',
-                     p1.description().splitlines()[0],
-                     label='topic.stack.desc topic.stack.desc.%s' % state)
-            fm.plain('\n')
-            fm.end()
-        # super crude initial version
-        symbol = ':'
-        state = 'clean'
-        if repo.revs('%d and parents()', r):
+            state = 'base'
+        elif repo.revs('%d and parents()', ctx.rev()):
             symbol = '@'
             state = 'current'
-        if repo.revs('%d and unstable()', r):
+        elif repo.revs('%d and unstable()', ctx.rev()):
             symbol = '$'
             state = 'unstable'
+        else:
+            symbol = ':'
+            state = 'clean'
         fm.startitem()
-        fm.write('topic.stack.index', 't%d', idx,
-                 label='topic.stack.index topic.stack.index.%s' % state)
+        if idx is None:
+            fm.plain('  ')
+        else:
+            fm.write('topic.stack.index', 't%d', idx,
+                     label='topic.stack.index topic.stack.index.%s' % state)
         fm.write('topic.stack.state.symbol', '%s', symbol,
                  label='topic.stack.state topic.stack.state.%s' % state)
         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', 'topic.stack.state', ' (%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)
         fm.plain('\n')
         fm.end()
-        prev = r
 
 # Copied from evolve 081605c2e9b6