hgext3rd/topic/stack.py
changeset 1909 36112e361ee4
parent 1907 95874e8fc5f2
child 1914 17782631d7e8
equal deleted inserted replaced
1908:dbd6d51e63f1 1909:36112e361ee4
    17     if not topic:
    17     if not topic:
    18         topic = repo.currenttopic
    18         topic = repo.currenttopic
    19     if not topic:
    19     if not topic:
    20         raise error.Abort(_('no active topic to list'))
    20         raise error.Abort(_('no active topic to list'))
    21     fm = ui.formatter('topicstack', opts)
    21     fm = ui.formatter('topicstack', opts)
       
    22     prev = None
    22     for idx, r in enumerate(getstack(repo, topic)):
    23     for idx, r in enumerate(getstack(repo, topic)):
       
    24         ctx =  repo[r]
       
    25         p1 = ctx.p1()
       
    26         if p1.obsolete():
       
    27             p1 = repo[_singlesuccessor(repo, p1)]
       
    28         if p1.rev() != prev:
       
    29             # display the parent of the chanset
       
    30             state = 'base'
       
    31             symbol= '_'
       
    32             fm.startitem()
       
    33             fm.plain('  ') # XXX 2 is the right padding by chance
       
    34             fm.write('topic.stack.state', '%s', symbol,
       
    35                      label='topic.stack.state topic.stack.state.%s' % state)
       
    36             fm.plain(' ')
       
    37             fm.write('topic.stack.desc', '%s',
       
    38                      p1.description().splitlines()[0],
       
    39                      label='topic.stack.desc topic.stack.desc.%s' % state)
       
    40             fm.plain('\n')
       
    41             fm.end()
    23         # super crude initial version
    42         # super crude initial version
    24         symbol = ':'
    43         symbol = ':'
    25         state = 'clean'
    44         state = 'clean'
    26         if repo.revs('%d and parents()', r):
    45         if repo.revs('%d and parents()', r):
    27             symbol = '@'
    46             symbol = '@'
    33         fm.write('topic.stack.index', 't%d', idx,
    52         fm.write('topic.stack.index', 't%d', idx,
    34                   label='topic.stack.index topic.stack.index.%s' % state)
    53                   label='topic.stack.index topic.stack.index.%s' % state)
    35         fm.write('topic.stack.state.symbol', '%s', symbol,
    54         fm.write('topic.stack.state.symbol', '%s', symbol,
    36                  label='topic.stack.state topic.stack.state.%s' % state)
    55                  label='topic.stack.state topic.stack.state.%s' % state)
    37         fm.plain(' ')
    56         fm.plain(' ')
    38         fm.write('topic.stack.desc', '%s', repo[r].description().splitlines()[0],
    57         fm.write('topic.stack.desc', '%s', ctx.description().splitlines()[0],
    39                  label='topic.stack.desc topic.stack.desc.%s' % state)
    58                  label='topic.stack.desc topic.stack.desc.%s' % state)
    40         fm.condwrite(state != 'clean', 'topic.stack.state', ' (%s)', state,
    59         fm.condwrite(state != 'clean', 'topic.stack.state', ' (%s)', state,
    41                     label='topic.stack.state topic.stack.state.%s' % state)
    60                     label='topic.stack.state topic.stack.state.%s' % state)
    42         fm.plain('\n')
    61         fm.plain('\n')
    43         fm.end()
    62         fm.end()
       
    63         prev = r
    44 
    64 
    45 # Copied from evolve 081605c2e9b6
    65 # Copied from evolve 081605c2e9b6
    46 
    66 
    47 def _orderrevs(repo, revs):
    67 def _orderrevs(repo, revs):
    48     """Compute an ordering to solve instability for the given revs
    68     """Compute an ordering to solve instability for the given revs
    62     # Remove the revisions with no dependency(A) and add them to the ordering.
    82     # Remove the revisions with no dependency(A) and add them to the ordering.
    63     # Removing these revisions leads to new revisions with no dependency (the
    83     # Removing these revisions leads to new revisions with no dependency (the
    64     # one depending on A) that we can remove from the dependency graph and add
    84     # one depending on A) that we can remove from the dependency graph and add
    65     # to the ordering. We progress in a similar fashion until the ordering is
    85     # to the ordering. We progress in a similar fashion until the ordering is
    66     # built
    86     # built
    67     solvablerevs = collections.deque([r for r in sorted(dependencies.keys())
    87     solvablerevs = [r for r in sorted(dependencies.keys())
    68                                       if not dependencies[r]])
    88                     if not dependencies[r]]
    69     ordering = []
    89     ordering = []
    70     while solvablerevs:
    90     while solvablerevs:
    71         rev = solvablerevs.popleft()
    91         rev = solvablerevs.pop()
    72         for dependent in rdependencies[rev]:
    92         for dependent in rdependencies[rev]:
    73             dependencies[dependent].remove(rev)
    93             dependencies[dependent].remove(rev)
    74             if not dependencies[dependent]:
    94             if not dependencies[dependent]:
    75                 solvablerevs.append(dependent)
    95                 solvablerevs.append(dependent)
    76         del dependencies[rev]
    96         del dependencies[rev]