[PATCH] rtemstoolkit/mailer.py: Add --use-gitconfig option
Chris Johns
chrisj at rtems.org
Wed Apr 14 01:02:34 UTC 2021
OK to push with a minor fix noted below ...
On 14/4/21 7:33 am, Alex White wrote:
> This adds the option to pull mail-related configuration values from the
> user's git configuration.
>
> Closes #4384
> ---
> rtemstoolkit/mailer.py | 46 ++++++++++++++++++++++++++++++++++++++++--
> 1 file changed, 44 insertions(+), 2 deletions(-)
>
> diff --git a/rtemstoolkit/mailer.py b/rtemstoolkit/mailer.py
> index aa804ae..763a4d8 100644
> --- a/rtemstoolkit/mailer.py
> +++ b/rtemstoolkit/mailer.py
> @@ -39,11 +39,13 @@ import smtplib
> import socket
>
> from rtemstoolkit import error
> +from rtemstoolkit import execute
> from rtemstoolkit import options
> from rtemstoolkit import path
>
> _options = {
> '--mail' : 'Send email report or results.',
> + '--use-gitconfig': 'Use mail configuration from git config.',
> '--mail-to' : 'Email address to send the email to.',
> '--mail-from' : 'Email address the report is from.',
> '--smtp-host' : 'SMTP host to send via.',
> @@ -58,12 +60,22 @@ def append_options(opts):
>
> def add_arguments(argsp):
> argsp.add_argument('--mail', help = _options['--mail'], action = 'store_true')
> + argsp.add_argument('--use-gitconfig', help = _options['--use-gitconfig'], action = 'store_true')
> for o in list(_options)[1:]:
> argsp.add_argument(o, help = _options[o], type = str)
>
> class mail:
> def __init__(self, opts):
> self.opts = opts
> + self.gitconfig_lines = None
> + if opts.find_arg('--use-gitconfig') is not None:
> + # Read the output of `git config --list` instead of reading the
> + # .gitconfig file directly because Python 2 ConfigParser does not
> + # accept tabs at the beginning of lines.
> + e = execute.capture_execution()
> + exit_code, proc, output = e.open('git config --list', shell=True)
> + if exit_code == 0:
> + self.gitconfig_lines = output.split('\n')
'\n' or os.linesep?
Chris
>
> def _args_are_macros(self):
> return isinstance(self.opts, options.command_line)
> @@ -83,6 +95,16 @@ class mail:
> value = None
> return value
>
> + def _get_from_gitconfig(self, variable_name):
> + if self.gitconfig_lines is None:
> + return None
> +
> + for line in self.gitconfig_lines:
> + if line.startswith(variable_name):
> + ls = line.split('=')
> + if len(ls) >= 2:
> + return ls[1]
> +
> def from_address(self):
>
> def _clean(l):
> @@ -97,6 +119,12 @@ class mail:
> addr = self._get_arg('--mail-from')
> if addr is not None:
> return addr
> + addr = self._get_from_gitconfig('user.email')
> + if addr is not None:
> + name = self._get_from_gitconfig('user.name')
> + if name is not None:
> + addr = '%s <%s>' % (name, addr)
> + return addr
> mailrc = None
> if 'MAILRC' in os.environ:
> mailrc = os.environ['MAILRC']
> @@ -125,6 +153,9 @@ class mail:
>
> def smtp_host(self):
> host = self._get_arg('--smtp-host')
> + if host is not None:
> + return host
> + host = self._get_from_gitconfig('sendemail.smtpserver')
> if host is not None:
> return host
> if self._args_are_macros():
> @@ -135,6 +166,9 @@ class mail:
>
> def smtp_port(self):
> port = self._get_arg('--smtp-port')
> + if port is not None:
> + return port
> + port = self._get_from_gitconfig('sendemail.smtpserverport')
> if port is not None:
> return port
> if self._args_are_macros():
> @@ -142,10 +176,18 @@ class mail:
> return port
>
> def smtp_user(self):
> - return self._get_arg('--smtp-user')
> + user = self._get_arg('--smtp-user')
> + if user is not None:
> + return user
> + user = self._get_from_gitconfig('sendemail.smtpuser')
> + return user
>
> def smtp_password(self):
> - return self._get_arg('--smtp-password')
> + password = self._get_arg('--smtp-password')
> + if password is not None:
> + return password
> + password = self._get_from_gitconfig('sendemail.smtppass')
> + return password
>
> def send(self, to_addr, subject, body):
> from_addr = self.from_address()
>
More information about the devel
mailing list