hgext/churn.py
changeset 43077 687b865b95ad
parent 43076 2372284d9457
child 43085 eef9a2d67051
--- a/hgext/churn.py	Sun Oct 06 09:45:02 2019 -0400
+++ b/hgext/churn.py	Sun Oct 06 09:48:39 2019 -0400
@@ -32,17 +32,17 @@
 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should
 # be specifying the version(s) of Mercurial they are tested with, or
 # leave the attribute unspecified.
-testedwith = 'ships-with-hg-core'
+testedwith = b'ships-with-hg-core'
 
 
 def changedlines(ui, repo, ctx1, ctx2, fns):
     added, removed = 0, 0
     fmatch = scmutil.matchfiles(repo, fns)
-    diff = ''.join(patch.diff(repo, ctx1.node(), ctx2.node(), fmatch))
-    for l in diff.split('\n'):
-        if l.startswith("+") and not l.startswith("+++ "):
+    diff = b''.join(patch.diff(repo, ctx1.node(), ctx2.node(), fmatch))
+    for l in diff.split(b'\n'):
+        if l.startswith(b"+") and not l.startswith(b"+++ "):
             added += 1
-        elif l.startswith("-") and not l.startswith("--- "):
+        elif l.startswith(b"-") and not l.startswith(b"--- "):
             removed += 1
     return (added, removed)
 
@@ -50,17 +50,17 @@
 def countrate(ui, repo, amap, *pats, **opts):
     """Calculate stats"""
     opts = pycompat.byteskwargs(opts)
-    if opts.get('dateformat'):
+    if opts.get(b'dateformat'):
 
         def getkey(ctx):
             t, tz = ctx.date()
             date = datetime.datetime(*time.gmtime(float(t) - tz)[:6])
             return encoding.strtolocal(
-                date.strftime(encoding.strfromlocal(opts['dateformat']))
+                date.strftime(encoding.strfromlocal(opts[b'dateformat']))
             )
 
     else:
-        tmpl = opts.get('oldtemplate') or opts.get('template')
+        tmpl = opts.get(b'oldtemplate') or opts.get(b'template')
         tmpl = logcmdutil.maketemplater(ui, repo, tmpl)
 
         def getkey(ctx):
@@ -69,12 +69,12 @@
             return ui.popbuffer()
 
     progress = ui.makeprogress(
-        _('analyzing'), unit=_('revisions'), total=len(repo)
+        _(b'analyzing'), unit=_(b'revisions'), total=len(repo)
     )
     rate = {}
     df = False
-    if opts.get('date'):
-        df = dateutil.matchdate(opts['date'])
+    if opts.get(b'date'):
+        df = dateutil.matchdate(opts[b'date'])
 
     m = scmutil.match(repo[None], pats, opts)
 
@@ -85,12 +85,12 @@
 
         key = getkey(ctx).strip()
         key = amap.get(key, key)  # alias remap
-        if opts.get('changesets'):
+        if opts.get(b'changesets'):
             rate[key] = (rate.get(key, (0,))[0] + 1, 0)
         else:
             parents = ctx.parents()
             if len(parents) > 1:
-                ui.note(_('revision %d is a merge, ignoring...\n') % (rev,))
+                ui.note(_(b'revision %d is a merge, ignoring...\n') % (rev,))
                 return
 
             ctx1 = parents[0]
@@ -108,50 +108,50 @@
 
 
 @command(
-    'churn',
+    b'churn',
     [
         (
-            'r',
-            'rev',
+            b'r',
+            b'rev',
             [],
-            _('count rate for the specified revision or revset'),
-            _('REV'),
+            _(b'count rate for the specified revision or revset'),
+            _(b'REV'),
         ),
         (
-            'd',
-            'date',
-            '',
-            _('count rate for revisions matching date spec'),
-            _('DATE'),
+            b'd',
+            b'date',
+            b'',
+            _(b'count rate for revisions matching date spec'),
+            _(b'DATE'),
         ),
         (
-            't',
-            'oldtemplate',
-            '',
-            _('template to group changesets (DEPRECATED)'),
-            _('TEMPLATE'),
+            b't',
+            b'oldtemplate',
+            b'',
+            _(b'template to group changesets (DEPRECATED)'),
+            _(b'TEMPLATE'),
         ),
         (
-            'T',
-            'template',
-            '{author|email}',
-            _('template to group changesets'),
-            _('TEMPLATE'),
+            b'T',
+            b'template',
+            b'{author|email}',
+            _(b'template to group changesets'),
+            _(b'TEMPLATE'),
         ),
         (
-            'f',
-            'dateformat',
-            '',
-            _('strftime-compatible format for grouping by date'),
-            _('FORMAT'),
+            b'f',
+            b'dateformat',
+            b'',
+            _(b'strftime-compatible format for grouping by date'),
+            _(b'FORMAT'),
         ),
-        ('c', 'changesets', False, _('count rate by number of changesets')),
-        ('s', 'sort', False, _('sort by key (default: sort by count)')),
-        ('', 'diffstat', False, _('display added/removed lines separately')),
-        ('', 'aliases', '', _('file with email aliases'), _('FILE')),
+        (b'c', b'changesets', False, _(b'count rate by number of changesets')),
+        (b's', b'sort', False, _(b'sort by key (default: sort by count)')),
+        (b'', b'diffstat', False, _(b'display added/removed lines separately')),
+        (b'', b'aliases', b'', _(b'file with email aliases'), _(b'FILE')),
     ]
     + cmdutil.walkopts,
-    _("hg churn [-d DATE] [-r REV] [--aliases FILE] [FILE]"),
+    _(b"hg churn [-d DATE] [-r REV] [--aliases FILE] [FILE]"),
     helpcategory=command.CATEGORY_MAINTENANCE,
     inferrepo=True,
 )
@@ -193,21 +193,21 @@
     '''
 
     def pad(s, l):
-        return s + " " * (l - encoding.colwidth(s))
+        return s + b" " * (l - encoding.colwidth(s))
 
     amap = {}
     aliases = opts.get(r'aliases')
-    if not aliases and os.path.exists(repo.wjoin('.hgchurn')):
-        aliases = repo.wjoin('.hgchurn')
+    if not aliases and os.path.exists(repo.wjoin(b'.hgchurn')):
+        aliases = repo.wjoin(b'.hgchurn')
     if aliases:
-        for l in open(aliases, "rb"):
+        for l in open(aliases, b"rb"):
             try:
-                alias, actual = l.rsplit('=' in l and '=' or None, 1)
+                alias, actual = l.rsplit(b'=' in l and b'=' or None, 1)
                 amap[alias.strip()] = actual.strip()
             except ValueError:
                 l = l.strip()
                 if l:
-                    ui.warn(_("skipping malformed alias: %s\n") % l)
+                    ui.warn(_(b"skipping malformed alias: %s\n") % l)
                 continue
 
     rate = list(countrate(ui, repo, amap, *pats, **opts).items())
@@ -224,7 +224,7 @@
     maxname = max(len(k) for k, v in rate)
 
     ttywidth = ui.termwidth()
-    ui.debug("assuming %i character terminal\n" % ttywidth)
+    ui.debug(b"assuming %i character terminal\n" % ttywidth)
     width = ttywidth - maxname - 2 - 2 - 2
 
     if opts.get(r'diffstat'):
@@ -232,21 +232,21 @@
 
         def format(name, diffstat):
             added, removed = diffstat
-            return "%s %15s %s%s\n" % (
+            return b"%s %15s %s%s\n" % (
                 pad(name, maxname),
-                '+%d/-%d' % (added, removed),
-                ui.label('+' * charnum(added), 'diffstat.inserted'),
-                ui.label('-' * charnum(removed), 'diffstat.deleted'),
+                b'+%d/-%d' % (added, removed),
+                ui.label(b'+' * charnum(added), b'diffstat.inserted'),
+                ui.label(b'-' * charnum(removed), b'diffstat.deleted'),
             )
 
     else:
         width -= 6
 
         def format(name, count):
-            return "%s %6d %s\n" % (
+            return b"%s %6d %s\n" % (
                 pad(name, maxname),
                 sum(count),
-                '*' * charnum(sum(count)),
+                b'*' * charnum(sum(count)),
             )
 
     def charnum(count):