Re: [gentoo-portage-dev] [PATCH v4] repoman commit: Support --bug (-b) and --closes (-c) for git footer

2017-08-06 Thread Michał Górny
On nie, 2017-08-06 at 00:18 -0700, Zac Medico wrote:
> On Sat, Aug 5, 2017 at 11:53 PM, Michał Górny  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/NN', 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/man/repoman.1| 14 ++
> >  repoman/pym/repoman/actions.py   | 42 
> > 
> >  repoman/pym/repoman/argparser.py | 16 ++-
> >  3 files changed, 71 insertions(+), 1 deletion(-)
> > 
> > v4: now with manpage update
> 
> Looks good.

Thanks. Pushed now.

-- 
Best regards,
Michał Górny


signature.asc
Description: This is a digitally signed message part


Re: [gentoo-portage-dev] [PATCH v4] repoman commit: Support --bug (-b) and --closes (-c) for git footer

2017-08-06 Thread Zac Medico
On Sat, Aug 5, 2017 at 11:53 PM, Michał Górny  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/NN', 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/man/repoman.1| 14 ++
>  repoman/pym/repoman/actions.py   | 42 
> 
>  repoman/pym/repoman/argparser.py | 16 ++-
>  3 files changed, 71 insertions(+), 1 deletion(-)
>
> v4: now with manpage update

Looks good.
-- 
Thanks,
Zac



[gentoo-portage-dev] [PATCH v4] repoman commit: Support --bug (-b) and --closes (-c) for git footer

2017-08-05 Thread Michał Górny
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/NN', 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/man/repoman.1| 14 ++
 repoman/pym/repoman/actions.py   | 42 
 repoman/pym/repoman/argparser.py | 16 ++-
 3 files changed, 71 insertions(+), 1 deletion(-)

v4: now with manpage update

diff --git a/repoman/man/repoman.1 b/repoman/man/repoman.1
index 4101c283f..a49c72c0d 100644
--- a/repoman/man/repoman.1
+++ b/repoman/man/repoman.1
@@ -21,6 +21,20 @@ BASH.
 \fB-a\fR, \fB--ask\fR
 Request a confirmation before commiting
 .TP
+\fB-b\fR, \fB--bug\fR
+Include a bug reference in the commit message footer. The argument can
+be either a Gentoo bug number or a full bug URL (either Gentoo
+or upstream). Gentoo bug URLs are automatically shortened to
+the canonical \fBhttps://bugs.gentoo.org/NN\fR form, and HTTPS
+is forced for known bug trackers.
+.TP
+\fB-c\fR, \fB--closes\fR
+Include a \fBCloses\fR tag in the commit message footer that can be used
+to close pull requests (and issues) on GitHub and other compatible
+services (GitLab, Bitbucket). The argument can be either a PR number for
+the gentoo/gentoo GitHub repository or a full PR/bug URL. For bug URLs,
+HTTPS is forced automatically for known bug/PR trackers.
+.TP
 \fB\-\-digest=\fR
 Automatically update Manifest digests for modified files. This
 option triggers a behavior that is very similar to that enabled
diff --git a/repoman/pym/repoman/actions.py b/repoman/pym/repoman/actions.py
index 00bb5b2ca..2112299c0 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,6 +357,36 @@ class Actions(object):
 
# Common part of commit footer
commit_footer = "\n"
+   for bug in self.options.bug:
+   # case 1: pure number NN
+   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 
+   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:
+