hgext/gpg.py
changeset 43076 2372284d9457
parent 42235 ade02721d3fa
child 43077 687b865b95ad
--- a/hgext/gpg.py	Sat Oct 05 10:29:34 2019 -0400
+++ b/hgext/gpg.py	Sun Oct 06 09:45:02 2019 -0400
@@ -36,25 +36,24 @@
 configtable = {}
 configitem = registrar.configitem(configtable)
 
-configitem('gpg', 'cmd',
-    default='gpg',
+configitem(
+    'gpg', 'cmd', default='gpg',
 )
-configitem('gpg', 'key',
-    default=None,
+configitem(
+    'gpg', 'key', default=None,
 )
-configitem('gpg', '.*',
-    default=None,
-    generic=True,
+configitem(
+    'gpg', '.*', default=None, generic=True,
 )
 
 # Custom help category
 _HELP_CATEGORY = 'gpg'
 help.CATEGORY_ORDER.insert(
-    help.CATEGORY_ORDER.index(registrar.command.CATEGORY_HELP),
-    _HELP_CATEGORY
+    help.CATEGORY_ORDER.index(registrar.command.CATEGORY_HELP), _HELP_CATEGORY
 )
 help.CATEGORY_NAMES[_HELP_CATEGORY] = 'Signing changes (GPG)'
 
+
 class gpg(object):
     def __init__(self, path, key=None):
         self.path = path
@@ -77,8 +76,11 @@
             fp = os.fdopen(fd, r'wb')
             fp.write(data)
             fp.close()
-            gpgcmd = ("%s --logger-fd 1 --status-fd 1 --verify "
-                      "\"%s\" \"%s\"" % (self.path, sigfile, datafile))
+            gpgcmd = "%s --logger-fd 1 --status-fd 1 --verify " "\"%s\" \"%s\"" % (
+                self.path,
+                sigfile,
+                datafile,
+            )
             ret = procutil.filter("", gpgcmd)
         finally:
             for f in (sigfile, datafile):
@@ -102,10 +104,12 @@
                 key = l.split(" ", 3)[:2]
                 key.append("")
                 fingerprint = None
-            elif (l.startswith("GOODSIG") or
-                  l.startswith("EXPSIG") or
-                  l.startswith("EXPKEYSIG") or
-                  l.startswith("BADSIG")):
+            elif (
+                l.startswith("GOODSIG")
+                or l.startswith("EXPSIG")
+                or l.startswith("EXPKEYSIG")
+                or l.startswith("BADSIG")
+            ):
                 if key is not None:
                     keys.append(key + [fingerprint])
                 key = l.split(" ", 2)
@@ -114,6 +118,7 @@
             keys.append(key + [fingerprint])
         return keys
 
+
 def newgpg(ui, **opts):
     """create a new gpg instance"""
     gpgpath = ui.config("gpg", "cmd")
@@ -122,11 +127,13 @@
         gpgkey = ui.config("gpg", "key")
     return gpg(gpgpath, gpgkey)
 
+
 def sigwalk(repo):
     """
     walk over every sigs, yields a couple
     ((node, version, sig), (filename, linenumber))
     """
+
     def parsefile(fileiter, context):
         ln = 1
         for l in fileiter:
@@ -149,6 +156,7 @@
     except IOError:
         pass
 
+
 def getkeys(ui, repo, mygpg, sigdata, context):
     """get the keys who signed a data"""
     fn, ln = context
@@ -170,14 +178,19 @@
             ui.write(_("%s Bad signature from \"%s\"\n") % (prefix, key[2]))
             continue
         if key[0] == "EXPSIG":
-            ui.write(_("%s Note: Signature has expired"
-                       " (signed by: \"%s\")\n") % (prefix, key[2]))
+            ui.write(
+                _("%s Note: Signature has expired" " (signed by: \"%s\")\n")
+                % (prefix, key[2])
+            )
         elif key[0] == "EXPKEYSIG":
-            ui.write(_("%s Note: This key has expired"
-                       " (signed by: \"%s\")\n") % (prefix, key[2]))
+            ui.write(
+                _("%s Note: This key has expired" " (signed by: \"%s\")\n")
+                % (prefix, key[2])
+            )
         validkeys.append((key[1], key[2], key[3]))
     return validkeys
 
+
 @command("sigs", [], _('hg sigs'), helpcategory=_HELP_CATEGORY)
 def sigs(ui, repo):
     """list signed changesets"""
@@ -203,6 +216,7 @@
             r = "%5d:%s" % (rev, hgnode.hex(repo.changelog.node(rev)))
             ui.write("%-30s %s\n" % (keystr(ui, k), r))
 
+
 @command("sigcheck", [], _('hg sigcheck REV'), helpcategory=_HELP_CATEGORY)
 def sigcheck(ui, repo, rev):
     """verify all the signatures there may be for a particular revision"""
@@ -227,6 +241,7 @@
     for key in keys:
         ui.write(" %s\n" % keystr(ui, key))
 
+
 def keystr(ui, key):
     """associate a string to a key (username, comment)"""
     keyid, user, fingerprint = key
@@ -236,18 +251,21 @@
     else:
         return user
 
-@command("sign",
-         [('l', 'local', None, _('make the signature local')),
-          ('f', 'force', None, _('sign even if the sigfile is modified')),
-          ('', 'no-commit', None, _('do not commit the sigfile after signing')),
-          ('k', 'key', '',
-           _('the key id to sign with'), _('ID')),
-          ('m', 'message', '',
-           _('use text as commit message'), _('TEXT')),
-          ('e', 'edit', False, _('invoke editor on commit messages')),
-         ] + cmdutil.commitopts2,
-         _('hg sign [OPTION]... [REV]...'),
-         helpcategory=_HELP_CATEGORY)
+
+@command(
+    "sign",
+    [
+        ('l', 'local', None, _('make the signature local')),
+        ('f', 'force', None, _('sign even if the sigfile is modified')),
+        ('', 'no-commit', None, _('do not commit the sigfile after signing')),
+        ('k', 'key', '', _('the key id to sign with'), _('ID')),
+        ('m', 'message', '', _('use text as commit message'), _('TEXT')),
+        ('e', 'edit', False, _('invoke editor on commit messages')),
+    ]
+    + cmdutil.commitopts2,
+    _('hg sign [OPTION]... [REV]...'),
+    helpcategory=_HELP_CATEGORY,
+)
 def sign(ui, repo, *revs, **opts):
     """add a signature for the current or given revision
 
@@ -262,6 +280,7 @@
     with repo.wlock():
         return _dosign(ui, repo, *revs, **opts)
 
+
 def _dosign(ui, repo, *revs, **opts):
     mygpg = newgpg(ui, **opts)
     opts = pycompat.byteskwargs(opts)
@@ -275,18 +294,21 @@
     if revs:
         nodes = [repo.lookup(n) for n in revs]
     else:
-        nodes = [node for node in repo.dirstate.parents()
-                 if node != hgnode.nullid]
+        nodes = [
+            node for node in repo.dirstate.parents() if node != hgnode.nullid
+        ]
         if len(nodes) > 1:
-            raise error.Abort(_('uncommitted merge - please provide a '
-                               'specific revision'))
+            raise error.Abort(
+                _('uncommitted merge - please provide a ' 'specific revision')
+            )
         if not nodes:
             nodes = [repo.changelog.tip()]
 
     for n in nodes:
         hexnode = hgnode.hex(n)
-        ui.write(_("signing %d:%s\n") % (repo.changelog.rev(n),
-                                         hgnode.short(n)))
+        ui.write(
+            _("signing %d:%s\n") % (repo.changelog.rev(n), hgnode.short(n))
+        )
         # build data
         data = node2txt(repo, n, sigver)
         sig = mygpg.sign(data)
@@ -304,8 +326,10 @@
     if not opts["force"]:
         msigs = match.exact(['.hgsigs'])
         if any(repo.status(match=msigs, unknown=True, ignored=True)):
-            raise error.Abort(_("working copy of .hgsigs is changed "),
-                             hint=_("please commit .hgsigs manually"))
+            raise error.Abort(
+                _("working copy of .hgsigs is changed "),
+                hint=_("please commit .hgsigs manually"),
+            )
 
     sigsfile = repo.wvfs(".hgsigs", "ab")
     sigsfile.write(sigmessage)
@@ -320,17 +344,23 @@
     message = opts['message']
     if not message:
         # we don't translate commit messages
-        message = "\n".join(["Added signature for changeset %s"
-                             % hgnode.short(n)
-                             for n in nodes])
+        message = "\n".join(
+            [
+                "Added signature for changeset %s" % hgnode.short(n)
+                for n in nodes
+            ]
+        )
     try:
-        editor = cmdutil.getcommiteditor(editform='gpg.sign',
-                                         **pycompat.strkwargs(opts))
-        repo.commit(message, opts['user'], opts['date'], match=msigs,
-                    editor=editor)
+        editor = cmdutil.getcommiteditor(
+            editform='gpg.sign', **pycompat.strkwargs(opts)
+        )
+        repo.commit(
+            message, opts['user'], opts['date'], match=msigs, editor=editor
+        )
     except ValueError as inst:
         raise error.Abort(pycompat.bytestr(inst))
 
+
 def node2txt(repo, node, ver):
     """map a manifest into some text"""
     if ver == "0":
@@ -338,9 +368,10 @@
     else:
         raise error.Abort(_("unknown signature version"))
 
+
 def extsetup(ui):
     # Add our category before "Repository maintenance".
     help.CATEGORY_ORDER.insert(
-        help.CATEGORY_ORDER.index(command.CATEGORY_MAINTENANCE),
-        _HELP_CATEGORY)
+        help.CATEGORY_ORDER.index(command.CATEGORY_MAINTENANCE), _HELP_CATEGORY
+    )
     help.CATEGORY_NAMES[_HELP_CATEGORY] = 'GPG signing'