On Fri, Aug 4, 2017 at 6:37 PM, Michał Górny <mgo...@gentoo.org> 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. > > Changes in v2: use urlparse instead of regexps > > --- > repoman/pym/repoman/actions.py | 45 ++++++++++++++++++++++++++++++ > ++++++++++ > repoman/pym/repoman/argparser.py | 16 +++++++++++++- > 2 files changed, 60 insertions(+), 1 deletion(-) > > diff --git a/repoman/pym/repoman/actions.py b/repoman/pym/repoman/actions. > py > index 00bb5b2ca..8299ed0fe 100644 > --- a/repoman/pym/repoman/actions.py > +++ b/repoman/pym/repoman/actions.py > @@ -14,6 +14,11 @@ import tempfile > import time > from itertools import chain > > +try: > + from urllib.parse import parse_qs, urlsplit, urlunsplit > +except ImportError: > + from urlparse import parse_qs, urlsplit, urlunsplit > + > from _emerge.UserQuery import UserQuery > > from repoman._portage import portage > @@ -324,6 +329,13 @@ class Actions(object): > return (changes.new, changes.changed, changes.removed, > changes.no_expansion, changes.expansion) > > + https_bugtrackers = frozenset([ > + 'bitbucket.org', > + 'bugs.gentoo.org', > + 'github.com', > + 'gitlab.com', > + ]) > + > def get_commit_footer(self): > portage_version = getattr(portage, "VERSION", None) > gpg_key = self.repoman_settings.get("PORTAGE_GPG_KEY", "") > @@ -345,9 +357,42 @@ class Actions(object): > > # Common part of commit footer > commit_footer = "\n" > + for bug in self.options.bug: > + # case 1: pure number NNNNNN > + if bug.isdigit(): > + bug = 'https://bugs.gentoo.org/%s' % > (bug, ) > + else: > + purl = urlsplit(bug) > + qs = parse_qs(purl.query) > + # case 2: long Gentoo bugzilla URL to > shorten > + if (purl.netloc == 'bugs.gentoo.org' and > + purl.path == > '/show_bug.cgi' and > + tuple(qs.keys()) == > ('id',)): > + bug = urlunsplit(('https', > purl.netloc, > + qs['id'][-1], '', > purl.fragment)) > + # case 3: bug tracker w/ http -> https > + elif (purl.scheme == 'http' and > + purl.netloc in > self.https_bugtrackers): > + bug = urlunsplit(('https',) + > purl[1:]) > + commit_footer += "Bug: %s\n" % (bug, ) > + > + for closes in self.options.closes: > + # case 1: pure number NNNN > + if closes.isdigit(): > + closes = 'https://github.com/gentoo/ > gentoo/pull/%s' % (closes, ) > + else: > + purl = urlsplit(closes) > + # case 2: bug tracker w/ http -> https > + if purl.netloc in self.https_bugtrackers: > + closes = urlunsplit(('https',) + > purl[1:]) > + commit_footer += "Closes: %s\n" % (closes, ) > + > if dco_sob: > commit_footer += "Signed-off-by: %s\n" % (dco_sob, > ) > > + print(commit_footer) > + raise SystemExit(666) > Debug lines? -A > + > # Use new footer only for git (see bug #438364). > if self.vcs_settings.vcs in ["git"]: > commit_footer += "Package-Manager: Portage-%s, > Repoman-%s" % ( > 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='Request a confirmation before commiting') > > parser.add_argument( > + '-b', '--bug', dest='bug', action='append', > metavar='<BUG-NO|BUG-URL>', > + default=[], > + help=( > + '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='closes', action='append', > metavar='<PR-NO|PR-URL>', > + default=[], > + help=( > + 'Adds a Closes footer to close GitHub pull request > (or compatible); ' > + 'takes either GitHub PR number or full PR URL')) > + > + parser.add_argument( > '-m', '--commitmsg', dest='commitmsg', > help='specify a commit message on the command line') > > -- > 2.13.4 > > >