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
>
>
>

Reply via email to