commit:     fcf54ef65f910d84cc96cd9951175658967659a7
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Sat Sep 19 16:47:44 2015 +0000
Commit:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Sat Sep 19 16:47:44 2015 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=fcf54ef6

repoamn: add missed new file gpg.py

 pym/repoman/gpg.py | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 79 insertions(+)

diff --git a/pym/repoman/gpg.py b/pym/repoman/gpg.py
new file mode 100644
index 0000000..a6c4c5f
--- /dev/null
+++ b/pym/repoman/gpg.py
@@ -0,0 +1,79 @@
+
+import errno
+import logging
+import subprocess
+import sys
+
+import portage
+from portage import os
+from portage import _encodings
+from portage import _unicode_encode
+from portage.exception import MissingParameter
+from portage.process import find_binary
+
+
+# Setup the GPG commands
+def gpgsign(filename, repoman_settings, options):
+       gpgcmd = repoman_settings.get("PORTAGE_GPG_SIGNING_COMMAND")
+       if gpgcmd in [None, '']:
+               raise MissingParameter("PORTAGE_GPG_SIGNING_COMMAND is unset!"
+                       " Is make.globals missing?")
+       if "${PORTAGE_GPG_KEY}" in gpgcmd and \
+               "PORTAGE_GPG_KEY" not in repoman_settings:
+               raise MissingParameter("PORTAGE_GPG_KEY is unset!")
+       if "${PORTAGE_GPG_DIR}" in gpgcmd:
+               if "PORTAGE_GPG_DIR" not in repoman_settings:
+                       repoman_settings["PORTAGE_GPG_DIR"] = \
+                               os.path.expanduser("~/.gnupg")
+                       logging.info(
+                               "Automatically setting PORTAGE_GPG_DIR to '%s'" 
%
+                               repoman_settings["PORTAGE_GPG_DIR"])
+               else:
+                       repoman_settings["PORTAGE_GPG_DIR"] = \
+                               
os.path.expanduser(repoman_settings["PORTAGE_GPG_DIR"])
+               if not os.access(repoman_settings["PORTAGE_GPG_DIR"], os.X_OK):
+                       raise portage.exception.InvalidLocation(
+                               "Unable to access directory: 
PORTAGE_GPG_DIR='%s'" %
+                               repoman_settings["PORTAGE_GPG_DIR"])
+       gpgvars = {"FILE": filename}
+       for k in ("PORTAGE_GPG_DIR", "PORTAGE_GPG_KEY"):
+               v = repoman_settings.get(k)
+               if v is not None:
+                       gpgvars[k] = v
+       gpgcmd = portage.util.varexpand(gpgcmd, mydict=gpgvars)
+       if options.pretend:
+               print("(" + gpgcmd + ")")
+       else:
+               # Encode unicode manually for bug #310789.
+               gpgcmd = portage.util.shlex_split(gpgcmd)
+
+               if sys.hexversion < 0x3020000 and sys.hexversion >= 0x3000000 
and \
+                       not os.path.isabs(gpgcmd[0]):
+                       # Python 3.1 _execvp throws TypeError for non-absolute 
executable
+                       # path passed as bytes (see 
http://bugs.python.org/issue8513).
+                       fullname = find_binary(gpgcmd[0])
+                       if fullname is None:
+                               raise 
portage.exception.CommandNotFound(gpgcmd[0])
+                       gpgcmd[0] = fullname
+
+               gpgcmd = [
+                       _unicode_encode(arg, encoding=_encodings['fs'], 
errors='strict')
+                       for arg in gpgcmd]
+               rValue = subprocess.call(gpgcmd)
+               if rValue == os.EX_OK:
+                       os.rename(filename + ".asc", filename)
+               else:
+                       raise portage.exception.PortageException(
+                               "!!! gpg exited with '" + str(rValue) + "' 
status")
+
+def need_signature(filename):
+       try:
+               with open(
+                       _unicode_encode(
+                               filename, encoding=_encodings['fs'], 
errors='strict'),
+                       'rb') as f:
+                       return b"BEGIN PGP SIGNED MESSAGE" not in f.readline()
+       except IOError as e:
+               if e.errno in (errno.ENOENT, errno.ESTALE):
+                       return False
+               raise

Reply via email to