Commit 2e550b3d authored by Phillip J. Eby's avatar Phillip J. Eby

Implementation for patch request #1457316: support --identity option

for setup.py "upload" command.
parent 3c3346da
...@@ -1754,8 +1754,21 @@ built using an earlier invocation of \file{setup.py}, but that only ...@@ -1754,8 +1754,21 @@ built using an earlier invocation of \file{setup.py}, but that only
distributions named on the command line for the invocation including distributions named on the command line for the invocation including
the \command{upload} command are uploaded. the \command{upload} command are uploaded.
The \command{upload} command uses the username and password stored in The \command{upload} command uses the username, password, and repository
the file \file{\$HOME/.pypirc}, see section~\ref{pypirc}. URL from the \file{\$HOME/.pypirc} file (see section~\ref{pypirc} for
more on this file).
You can use the \programopt{--sign} option to tell \command{upload} to
sign each uploaded file using GPG (GNU Privacy Guard). The
\program{gpg} program must be available for execution on the system
\envvar{PATH}. You can also specify which key to use for signing
using the \programopt{--identity=\var{name}} option.
Other \command{upload} options include
\programopt{--repository=\var{url}} (which lets you override the
repository setting from \file{\$HOME/.pypirc}), and
\programopt{--show-response} (which displays the full response text
from the PyPI server for help in debugging upload problems).
\chapter{Examples} \chapter{Examples}
\label{examples} \label{examples}
......
...@@ -29,6 +29,7 @@ class upload(Command): ...@@ -29,6 +29,7 @@ class upload(Command):
'display full response text from server'), 'display full response text from server'),
('sign', 's', ('sign', 's',
'sign files to upload using gpg'), 'sign files to upload using gpg'),
('identity=', 'i', 'GPG identity used to sign files'),
] ]
boolean_options = ['show-response', 'sign'] boolean_options = ['show-response', 'sign']
...@@ -38,8 +39,13 @@ class upload(Command): ...@@ -38,8 +39,13 @@ class upload(Command):
self.repository = '' self.repository = ''
self.show_response = 0 self.show_response = 0
self.sign = False self.sign = False
self.identity = None
def finalize_options(self): def finalize_options(self):
if self.identity and not self.sign:
raise DistutilsOptionError(
"Must use --sign for --identity to have meaning"
)
if os.environ.has_key('HOME'): if os.environ.has_key('HOME'):
rc = os.path.join(os.environ['HOME'], '.pypirc') rc = os.path.join(os.environ['HOME'], '.pypirc')
if os.path.exists(rc): if os.path.exists(rc):
...@@ -67,7 +73,10 @@ class upload(Command): ...@@ -67,7 +73,10 @@ class upload(Command):
def upload_file(self, command, pyversion, filename): def upload_file(self, command, pyversion, filename):
# Sign if requested # Sign if requested
if self.sign: if self.sign:
spawn(("gpg", "--detach-sign", "-a", filename), gpg_args = ["gpg", "--detach-sign", "-a", filename]
if self.identity:
gpg_args[2:2] = ["--local-user", self.identity]
spawn(gpg_args,
dry_run=self.dry_run) dry_run=self.dry_run)
# Fill in the data - send all the meta-data in case we need to # Fill in the data - send all the meta-data in case we need to
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment