From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id D1B8B139694 for ; Thu, 3 Aug 2017 15:18:39 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 9101B1FC002; Thu, 3 Aug 2017 15:18:38 +0000 (UTC) Received: from mail-oi0-x234.google.com (mail-oi0-x234.google.com [IPv6:2607:f8b0:4003:c06::234]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 43099E0EC3 for ; Thu, 3 Aug 2017 15:18:38 +0000 (UTC) Received: by mail-oi0-x234.google.com with SMTP id x3so15591837oia.1 for ; Thu, 03 Aug 2017 08:18:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=scriptkitty-com.20150623.gappssmtp.com; s=20150623; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc; bh=U5/TMLibwOFyLj7YzkTQbTkkpKWmf8NC19nrOf9OrVs=; b=pC06SE4lP0a5CKR9Ec5cFzYzo0L8mBW0+4cZADrG5Kw8p/XiHCfwikPgoVODelgViN fqoTHe1RsvO6x3vofvJ3cDaAGQ3iEED1dz/6QpKjsMlW8NAp9GcqXwobthNJ1JaaUd8j pWbpI8SVWVq7R3d8iY3iEaIhV45C2LRYlpCxr7dtlbWBAYRylGLzT7xd6H32RDEBXVIs NaouQBnSiyaFGNwqQW913xwSd3KY7QULBOuVhXeNCBaa+cjg7DvFpfEssqHF7VhBqRTr 0Q37BvdtFLepeoOqk6MclqbOOG1SmecBqV3jbBg9k6ie1Tkuw/Q0Vzw8clk8tfwVsLcI q+pw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:sender:in-reply-to:references:from :date:message-id:subject:to:cc; bh=U5/TMLibwOFyLj7YzkTQbTkkpKWmf8NC19nrOf9OrVs=; b=gLW9I5DGSQDLy8MP9sNt5L3y9Nt4PRUq6Q/FLaKeu74YCSDhOMA6zjVoZzEft9nMtd LlOCg0F3pd11jsQojXwt+pRwMyGQMX7lbJbB7QfEyw/UmeLODRhwYdcH0kb9BJx1pz/4 zLETHda3stTsyDiqlYESjy8HXuUx6HIM3Tlz71ZFoFA/pOaUmioO185+Igmsr0HZwV7V OCDG/KwDZsGQymGAZWbn9yGrsPAfugAuleb4vFIZdbyYoskybJUyf0w8L1Co4IxkUjQE NQ9WL8zPjOCsl1wdK/lFdBnQxc5QR6h31DgvD1StE9jtiPaVyANYKBexCmWiCUmA9kFE nsXw== X-Gm-Message-State: AIVw111FDVTpAZ8FLZGRGJxBNSOV3MtCP5l+TEywVVHyugeZL6UCn+1n 8WeSMooYT/VsmfLw6uqaxnWLKCGEpFE1 X-Received: by 10.202.187.194 with SMTP id l185mr1765871oif.228.1501773517149; Thu, 03 Aug 2017 08:18:37 -0700 (PDT) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-portage-dev@lists.gentoo.org Reply-to: gentoo-portage-dev@lists.gentoo.org MIME-Version: 1.0 Sender: antarus@scriptkitty.com Received: by 10.182.32.68 with HTTP; Thu, 3 Aug 2017 08:18:36 -0700 (PDT) X-Originating-IP: [2620:0:1003:410:5964:83b5:b66:82d0] In-Reply-To: <20170803141826.22533-1-mgorny@gentoo.org> References: <20170803141826.22533-1-mgorny@gentoo.org> From: Alec Warner Date: Thu, 3 Aug 2017 11:18:36 -0400 X-Google-Sender-Auth: tfnE5K0ocL1XcdZsXxGCLfS6SrI Message-ID: Subject: Re: [gentoo-portage-dev] [PATCH] repoman commit: Support --bug (-b) and --closes (-c) for git footer To: gentoo-portage-dev@lists.gentoo.org Cc: =?UTF-8?B?TWljaGHFgiBHw7Nybnk=?= Content-Type: multipart/alternative; boundary="001a113cf1f605e9b40555dae5e1" X-Archives-Salt: 84ec1ff8-80b6-44d5-b21e-f5ab3074eba6 X-Archives-Hash: 3c94626154ddcfe1ad24ffb1347be2c7 --001a113cf1f605e9b40555dae5e1 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Aug 3, 2017 at 10:18 AM, Micha=C5=82 G=C3=B3rny = wrote: > Support two new options: --bug (-b) and --closes (-c) to add a plain > 'Bug' reference and a 'Closes' footer for a GitHub pull request. Both > options can be specified multiple times, resulting in multiple footer > tags being written. > > The --bug option accepts either a Gentoo Bugzilla bug number or an URL > to any bug tracker. In the latter case, it performs two trivial > transformations automatically: replaces long 'show_bug.cgi' Bugzilla > URLs with the short 'https://bugs.gentoo.org/NNNNNN', and forces > https:// for a few known services. > > The --closes option accepts either a GitHub Gentoo repository pull > request number or an URL to any pull request (or bug) that uses > the 'Closes' tag. In the latter case, https:// is forced for a few known > services. > --- > repoman/pym/repoman/actions.py | 29 +++++++++++++++++++++++++++++ > repoman/pym/repoman/argparser.py | 16 +++++++++++++++- > 2 files changed, 44 insertions(+), 1 deletion(-) > > diff --git a/repoman/pym/repoman/actions.py b/repoman/pym/repoman/actions= . > py > index 00bb5b2ca..869ca7031 100644 > --- a/repoman/pym/repoman/actions.py > +++ b/repoman/pym/repoman/actions.py > @@ -324,6 +324,11 @@ class Actions(object): > return (changes.new, changes.changed, changes.removed, > changes.no_expansion, changes.expansion) > > + long_bugzilla_url_re =3D re.compile( > + r'https?://bugs\.gentoo\.org/ > show_bug\.cgi\?id=3D(\d+(#.*)?)') > + http_bugtracker_url_re =3D re.compile( > + r'http://(bugs\.gentoo\.org|bitbucket\.org|git(hub|lab)\. > com)/') > + > Would you consider using the urlparse module here, instead of regexp? > def get_commit_footer(self): > portage_version =3D getattr(portage, "VERSION", None) > gpg_key =3D self.repoman_settings.get("PORTAGE_GPG_KEY", = "") > @@ -345,6 +350,30 @@ class Actions(object): > > # Common part of commit footer > commit_footer =3D "\n" > + for bug in self.options.bug: > + # case 1: pure number NNNNNN > + if bug.isdigit(): > + bug =3D 'https://bugs.gentoo.org/%s' % > (bug, ) > + else: > + # case 2: long Gentoo bugzilla URL to > shorten > + m =3D self.long_bugzilla_url_re.match(bug= ) > + if m is not None: > + bug =3D 'https://bugs.gentoo.org/= %s' > % (m.group(1), ) > + # case 3: bug tracker w/ http -> https > + m =3D self.http_bugtracker_url_re.match(b= ug) > + if m is not None: > + bug =3D bug.replace('http', 'http= s', > 1) > + commit_footer +=3D "Bug: %s\n" % (bug, ) > + for closes in self.options.closes: > + # case 1: pure number NNNN > + if closes.isdigit(): > + closes =3D 'https://github.com/gentoo/ > gentoo/pull/%s' % (closes, ) > + else: > + # case 2: bug tracker w/ http -> https > + m =3D self.http_bugtracker_url_re. > match(closes) > + if m is not None: > + closes =3D closes.replace('http', > 'https', 1) > + commit_footer +=3D "Closes: %s\n" % (closes, ) > if dco_sob: > commit_footer +=3D "Signed-off-by: %s\n" % (dco_s= ob, > ) > > diff --git a/repoman/pym/repoman/argparser.py b/repoman/pym/repoman/ > argparser.py > index 2d56a87e6..f32972288 100644 > --- a/repoman/pym/repoman/argparser.py > +++ b/repoman/pym/repoman/argparser.py > @@ -1,5 +1,5 @@ > # repoman: Argument parser > -# Copyright 2007-2014 Gentoo Foundation > +# Copyright 2007-2017 Gentoo Foundation > # Distributed under the terms of the GNU General Public License v2 > > """This module contains functions used in Repoman to parse CLI > arguments.""" > @@ -58,6 +58,20 @@ def parse_args(argv, qahelp, repoman_default_opts): > help=3D'Request a confirmation before commiting') > > parser.add_argument( > + '-b', '--bug', dest=3D'bug', action=3D'append', > metavar=3D'', > + default=3D[], > + help=3D( > + 'Mention a Gentoo or upstream bug in the commit > footer; ' > + 'takes either Gentoo bug number or full bug URL')= ) > + > + parser.add_argument( > + '-c', '--closes', dest=3D'closes', action=3D'append', > metavar=3D'', > + default=3D[], > + help=3D( > + 'Adds a Closes footer to close GitHub pull reques= t > (or compatible); ' > + 'takes either GitHub PR number or full PR URL')) > + > + parser.add_argument( > '-m', '--commitmsg', dest=3D'commitmsg', > help=3D'specify a commit message on the command line') > > -- > 2.13.4 > > > --001a113cf1f605e9b40555dae5e1 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On Thu, Aug 3, 2017 at 10:18 AM, Micha=C5=82 G=C3=B3rny <mgorny@gentoo= .org> wrote:
Support two ne= w options: --bug (-b) and --closes (-c) to add a plain
'Bug' reference and a 'Closes' footer for a GitHub pull req= uest. Both
options can be specified multiple times, resulting in multiple footer
tags being written.

The --bug option accepts either a Gentoo Bugzilla bug number or an URL
to any bug tracker. In the latter case, it performs two trivial
transformations automatically: replaces long 'show_bug.cgi' Bugzill= a
URLs with the short 'https://bugs.gentoo.org/NNNNNN',= and forces
https:// for a few known services.

The --closes option accepts either a GitHub Gentoo repository pull
request number or an URL to any pull request (or bug) that uses
the 'Closes' tag. In the latter case, https:// is forced for a few = known
services.
---
=C2=A0repoman/pym/repoman/actions.py=C2=A0 =C2=A0| 29 +++++++++++++++++++++= ++++++++
=C2=A0repoman/pym/repoman/argparser.py | 16 +++++++++++++++-
=C2=A02 files changed, 44 insertions(+), 1 deletion(-)

diff --git a/repoman/pym/repoman/actions.py b/repoman/pym/repoman/acti= ons.py
index 00bb5b2ca..869ca7031 100644
--- a/repoman/pym/repoman/actions.py
+++ b/repoman/pym/repoman/actions.py
@@ -324,6 +324,11 @@ class Actions(object):
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return (changes.new= , changes.changed, changes.removed,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 changes.no_expansion, changes.expans= ion)

+=C2=A0 =C2=A0 =C2=A0 =C2=A0long_bugzilla_url_re =3D re.compile(
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0r'https?://bugs= \.gentoo\.org/show_bug\.cgi\?id=3D(\d+(#.*)?)')
+=C2=A0 =C2=A0 =C2=A0 =C2=A0http_bugtracker_url_re =3D re.compile(
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0r'http://(bugs\= .gentoo\.org|bitbucket\.org|git(hub|lab)\.com)/')
+

Would you consider using the urlparse= module here, instead of regexp?
=C2=A0
=C2=A0 =C2=A0 =C2=A0 =C2=A0 def get_commit_footer(self):
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 portage_version =3D= getattr(portage, "VERSION", None)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 gpg_key =3D self.re= poman_settings.get("PORTAGE_GPG_KEY", "")
@@ -345,6 +350,30 @@ class Actions(object):

=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 # Common part of co= mmit footer
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 commit_footer =3D &= quot;\n"
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0for bug in self.opt= ions.bug:
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0# case 1: pure number NNNNNN
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0if bug.isdigit():
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0bug =3D 'https://bugs.gentoo.org= /%s' % (bug, )
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0else:
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0# case 2: long Gentoo bugzilla URL to= shorten
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0m =3D self.long_bugzilla_url_re.= match(bug)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if m is not None:
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0bug =3D &= #39;https://bugs.gentoo.org/%s' % (m.group(1), )
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0# case 3: bug tracker w/ http -> h= ttps
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0m =3D self.http_bugtracker_url_re.match(bug)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if m is not None:
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0bug =3D b= ug.replace('http', 'https', 1)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0commit_footer +=3D "Bug: %s\n" % (bug, )
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0for closes in self.= options.closes:
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0# case 1: pure number NNNN
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0if closes.isdigit():
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0closes =3D 'https:= //github.com/gentoo/gentoo/pull/%s' % (closes, )
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0else:
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0# case 2: bug tracker w/ http -> h= ttps
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0m =3D self.http_bugtracker_url_re.match(closes)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if m is not None:
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0closes = =3D closes.replace('http', 'https', 1)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0commit_footer +=3D "Closes: %s\n" % (closes, )
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 if dco_sob:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 commit_footer +=3D "Signed-off-by: %s\n" % (dco_sob, )=

diff --git a/repoman/pym/repoman/argparser.py b/repoman/pym/repoman/argparser.py
index 2d56a87e6..f32972288 100644
--- a/repoman/pym/repoman/argparser.py
+++ b/repoman/pym/repoman/argparser.py
@@ -1,5 +1,5 @@
=C2=A0# repoman: Argument parser
-# Copyright 2007-2014 Gentoo Foundation
+# Copyright 2007-2017 Gentoo Foundation
=C2=A0# Distributed under the terms of the GNU General Public License v2
=C2=A0"""This module contains functions used in Repoman to p= arse CLI arguments."""
@@ -58,6 +58,20 @@ def parse_args(argv, qahelp, repoman_default_opts):
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 help=3D'Request= a confirmation before commiting')

=C2=A0 =C2=A0 =C2=A0 =C2=A0 parser.add_argument(
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0'-b', '= --bug', dest=3D'bug', action=3D'append', metavar=3D'= ;<BUG-NO|BUG-URL>',
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0default=3D[],
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0help=3D(
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0'Mention a Gentoo or upstream bug in the commit footer; '=
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0'takes either Gentoo bug number or full bug URL'))
+
+=C2=A0 =C2=A0 =C2=A0 =C2=A0parser.add_argument(
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0'-c', '= --closes', dest=3D'closes', action=3D'append', metavar= =3D'<PR-NO|PR-URL>',
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0default=3D[],
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0help=3D(
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0'Adds a Closes footer to close GitHub pull request (or compat= ible); '
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0'takes either GitHub PR number or full PR URL'))
+
+=C2=A0 =C2=A0 =C2=A0 =C2=A0parser.add_argument(
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 '-m', '= --commitmsg', dest=3D'commitmsg',
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 help=3D'specify= a commit message on the command line')

--
2.13.4



--001a113cf1f605e9b40555dae5e1--