hgext/show.py
changeset 43076 2372284d9457
parent 42596 83666f011679
child 43077 687b865b95ad
--- a/hgext/show.py	Sat Oct 05 10:29:34 2019 -0400
+++ b/hgext/show.py	Sun Oct 06 09:45:02 2019 -0400
@@ -28,9 +28,7 @@
 from __future__ import absolute_import
 
 from mercurial.i18n import _
-from mercurial.node import (
-    nullrev,
-)
+from mercurial.node import nullrev
 from mercurial import (
     cmdutil,
     commands,
@@ -58,6 +56,7 @@
 
 revsetpredicate = registrar.revsetpredicate()
 
+
 class showcmdfunc(registrar._funcregistrarbase):
     """Register a function to be invoked for an `hg show <thing>`."""
 
@@ -84,17 +83,23 @@
         func._fmtopic = fmtopic
         func._csettopic = csettopic
 
+
 showview = showcmdfunc()
 
-@command('show', [
-    # TODO: Switch this template flag to use cmdutil.formatteropts if
-    # 'hg show' becomes stable before --template/-T is stable. For now,
-    # we are putting it here without the '(EXPERIMENTAL)' flag because it
-    # is an important part of the 'hg show' user experience and the entire
-    # 'hg show' experience is experimental.
-    ('T', 'template', '', ('display with template'), _('TEMPLATE')),
-    ], _('VIEW'),
-    helpcategory=command.CATEGORY_CHANGE_NAVIGATION)
+
+@command(
+    'show',
+    [
+        # TODO: Switch this template flag to use cmdutil.formatteropts if
+        # 'hg show' becomes stable before --template/-T is stable. For now,
+        # we are putting it here without the '(EXPERIMENTAL)' flag because it
+        # is an important part of the 'hg show' user experience and the entire
+        # 'hg show' experience is experimental.
+        ('T', 'template', '', 'display with template', _('TEMPLATE')),
+    ],
+    _('VIEW'),
+    helpcategory=command.CATEGORY_CHANGE_NAVIGATION,
+)
 def show(ui, repo, view=None, template=None):
     """show various repository information
 
@@ -127,16 +132,20 @@
         ui.write('\n')
 
         for name, func in sorted(views.items()):
-            ui.write(('%s\n') % pycompat.sysbytes(func.__doc__))
+            ui.write('%s\n' % pycompat.sysbytes(func.__doc__))
 
         ui.write('\n')
-        raise error.Abort(_('no view requested'),
-                          hint=_('use "hg show VIEW" to choose a view'))
+        raise error.Abort(
+            _('no view requested'),
+            hint=_('use "hg show VIEW" to choose a view'),
+        )
 
     # TODO use same logic as dispatch to perform prefix matching.
     if view not in views:
-        raise error.Abort(_('unknown view: %s') % view,
-                          hint=_('run "hg show" to see available views'))
+        raise error.Abort(
+            _('unknown view: %s') % view,
+            hint=_('run "hg show" to see available views'),
+        )
 
     template = template or 'show'
 
@@ -155,6 +164,7 @@
     else:
         return fn(ui, repo)
 
+
 @showview('bookmarks', fmtopic='bookmarks')
 def showbookmarks(ui, repo, fm):
     """bookmarks and their associated changeset"""
@@ -177,21 +187,27 @@
         fm.context(ctx=repo[node])
         fm.write('bookmark', '%s', bm)
         fm.write('node', fm.hexfunc(node), fm.hexfunc(node))
-        fm.data(active=bm == active,
-                longestbookmarklen=longestname,
-                nodelen=nodelen)
+        fm.data(
+            active=bm == active, longestbookmarklen=longestname, nodelen=nodelen
+        )
+
 
 @showview('stack', csettopic='stack')
 def showstack(ui, repo, displayer):
     """current line of work"""
     wdirctx = repo['.']
     if wdirctx.rev() == nullrev:
-        raise error.Abort(_('stack view only available when there is a '
-                            'working directory'))
+        raise error.Abort(
+            _('stack view only available when there is a ' 'working directory')
+        )
 
     if wdirctx.phase() == phases.public:
-        ui.write(_('(empty stack; working directory parent is a published '
-                   'changeset)\n'))
+        ui.write(
+            _(
+                '(empty stack; working directory parent is a published '
+                'changeset)\n'
+            )
+        )
         return
 
     # TODO extract "find stack" into a function to facilitate
@@ -238,8 +254,11 @@
     # merge or rebase targets.
     if basectx:
         # TODO make this customizable?
-        newheads = set(repo.revs('heads(%d::) - %ld - not public()',
-                                 basectx.rev(), stackrevs))
+        newheads = set(
+            repo.revs(
+                'heads(%d::) - %ld - not public()', basectx.rev(), stackrevs
+            )
+        )
     else:
         newheads = set()
 
@@ -258,8 +277,10 @@
     # TODO use proper graph symbols from graphmod
 
     tres = formatter.templateresources(ui, repo)
-    shortesttmpl = formatter.maketemplater(ui, '{shortest(node, %d)}' % nodelen,
-                                           resources=tres)
+    shortesttmpl = formatter.maketemplater(
+        ui, '{shortest(node, %d)}' % nodelen, resources=tres
+    )
+
     def shortest(ctx):
         return shortesttmpl.renderdefault({'ctx': ctx, 'node': ctx.hex()})
 
@@ -278,8 +299,9 @@
 
         sourcectx = repo[stackrevs[-1]]
 
-        sortedheads = sorted(newheads, key=lambda x: revdistance[x],
-                             reverse=True)
+        sortedheads = sorted(
+            newheads, key=lambda x: revdistance[x], reverse=True
+        )
 
         for i, rev in enumerate(sortedheads):
             ctx = repo[rev]
@@ -289,7 +311,7 @@
             else:
                 ui.write('  ')
 
-            ui.write(('o  '))
+            ui.write('o  ')
             displayer.show(ctx, nodelen=nodelen)
             displayer.flush(ctx)
             ui.write('\n')
@@ -300,15 +322,21 @@
                 ui.write(' /')
 
             ui.write('    (')
-            ui.write(_('%d commits ahead') % revdistance[rev],
-                     label='stack.commitdistance')
+            ui.write(
+                _('%d commits ahead') % revdistance[rev],
+                label='stack.commitdistance',
+            )
 
             if haverebase:
                 # TODO may be able to omit --source in some scenarios
                 ui.write('; ')
-                ui.write(('hg rebase --source %s --dest %s' % (
-                         shortest(sourcectx), shortest(ctx))),
-                         label='stack.rebasehint')
+                ui.write(
+                    (
+                        'hg rebase --source %s --dest %s'
+                        % (shortest(sourcectx), shortest(ctx))
+                    ),
+                    label='stack.rebasehint',
+                )
 
             ui.write(')\n')
 
@@ -345,12 +373,13 @@
             ui.write(' /   ')
 
         ui.write(_('(stack base)'), '\n', label='stack.label')
-        ui.write(('o  '))
+        ui.write('o  ')
 
         displayer.show(basectx, nodelen=nodelen)
         displayer.flush(basectx)
         ui.write('\n')
 
+
 @revsetpredicate('_underway([commitage[, headage]])')
 def underwayrevset(repo, subset, x):
     args = revset.getargsdict(x, 'underway', 'commitage headage')
@@ -374,8 +403,11 @@
     rsargs = []
     if args['commitage']:
         rs += ' and date(%s)'
-        rsargs.append(revsetlang.getstring(args['commitage'],
-                                           _('commitage requires a string')))
+        rsargs.append(
+            revsetlang.getstring(
+                args['commitage'], _('commitage requires a string')
+            )
+        )
 
     mutable = repo.revs(rs, *rsargs)
     relevant = revset.baseset(mutable)
@@ -389,8 +421,11 @@
     rsargs = []
     if args['headage']:
         rs += ' and date(%s)'
-        rsargs.append(revsetlang.getstring(args['headage'],
-                                           _('headage requires a string')))
+        rsargs.append(
+            revsetlang.getstring(
+                args['headage'], _('headage requires a string')
+            )
+        )
 
     relevant += repo.revs(rs, *rsargs)
 
@@ -401,6 +436,7 @@
 
     return subset & relevant
 
+
 @showview('work', csettopic='work')
 def showwork(ui, repo, displayer):
     """changesets that aren't finished"""
@@ -411,8 +447,15 @@
     revdag = graphmod.dagwalker(repo, revs)
 
     ui.setconfig('experimental', 'graphshorten', True)
-    logcmdutil.displaygraph(ui, repo, revdag, displayer, graphmod.asciiedges,
-                            props={'nodelen': nodelen})
+    logcmdutil.displaygraph(
+        ui,
+        repo,
+        revdag,
+        displayer,
+        graphmod.asciiedges,
+        props={'nodelen': nodelen},
+    )
+
 
 def extsetup(ui):
     # Alias `hg <prefix><view>` to `hg show <view>`.
@@ -420,8 +463,9 @@
         for view in showview._table:
             name = '%s%s' % (prefix, view)
 
-            choice, allcommands = cmdutil.findpossible(name, commands.table,
-                                                       strict=True)
+            choice, allcommands = cmdutil.findpossible(
+                name, commands.table, strict=True
+            )
 
             # This alias is already a command name. Don't set it.
             if name in choice:
@@ -433,6 +477,7 @@
 
             ui.setconfig('alias', name, 'show %s' % view, source='show')
 
+
 def longestshortest(repo, revs, minlen=4):
     """Return the length of the longest shortest node to identify revisions.
 
@@ -448,8 +493,11 @@
     if not revs:
         return minlen
     cl = repo.changelog
-    return max(len(scmutil.shortesthexnodeidprefix(repo, cl.node(r), minlen))
-               for r in revs)
+    return max(
+        len(scmutil.shortesthexnodeidprefix(repo, cl.node(r), minlen))
+        for r in revs
+    )
+
 
 # Adjust the docstring of the show command so it shows all registered views.
 # This is a bit hacky because it runs at the end of module load. When moved
@@ -460,11 +508,18 @@
     longest = max(map(len, showview._table.keys()))
     entries = []
     for key in sorted(showview._table.keys()):
-        entries.append(r'    %s   %s' % (
-            pycompat.sysstr(key.ljust(longest)), showview._table[key]._origdoc))
+        entries.append(
+            r'    %s   %s'
+            % (
+                pycompat.sysstr(key.ljust(longest)),
+                showview._table[key]._origdoc,
+            )
+        )
 
     cmdtable['show'][0].__doc__ = pycompat.sysstr('%s\n\n%s\n    ') % (
         cmdtable['show'][0].__doc__.rstrip(),
-        pycompat.sysstr('\n\n').join(entries))
+        pycompat.sysstr('\n\n').join(entries),
+    )
+
 
 _updatedocstring()