1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
#!/usr/bin/python
import sys
import os
import re
LIBDIR = '<%= @gitolite_commonhooksdir %>'
sys.path.insert(0, LIBDIR)
import git_multimail
# When editing this list, remember to edit the same list in
# modules/cgit/templates/filter.commit-links.sh
BUG_REFS = {
'Mageia': { 're': re.compile('mga#([0-9]+)'), 'replace': 'https://bugs.mageia.org/show_bug.cgi?id=%s' },
'Red Hat': { 're': re.compile('rhbz#([0-9]+)'), 'replace': 'https://bugzilla.redhat.com/show_bug.cgi?id=%s' },
'Free Desktop': { 're': re.compile('fdo#([0-9]+)'), 'replace': 'https://bugs.freedesktop.org/show_bug.cgi?id=%s' },
'KDE': { 're': re.compile('(?:bko|kde)#([0-9]+)'), 'replace': 'https://bugs.kde.org/show_bug.cgi?id=%s' },
'GNOME': { 're': re.compile('(?:bgo|gnome)#([0-9]+)'), 'replace': 'https://bugzilla.gnome.org/show_bug.cgi?id=%s' },
'Launchpad': { 're': re.compile('lp#([0-9]+)'), 'replace': 'https://launchpad.net/bugs/%s' },
}
COMMIT_RE = re.compile('^commit ([a-f0-9]{40})')
COMMIT_REPLACE = 'http://gitweb.mageia.org/%s/commit/?id=%s'
git_multimail.FOOTER_TEMPLATE = """\
-- \n\
Mageia Git Monkeys.
"""
git_multimail.REVISION_FOOTER_TEMPLATE = git_multimail.FOOTER_TEMPLATE
# Override the Environment class to generate an apporpriate short name which is
# used in git links and as an email prefix
class LinksEnvironment(git_multimail.Environment):
REPO_NAME_RE = re.compile(r'^/git/(?P<name>.+?)(?:\.git)?$')
def get_repo_shortname(self):
"""Use the last part of the repo path, with ".git" stripped off if present."""
basename = os.path.abspath(self.get_repo_path())
m = self.REPO_NAME_RE.match(basename)
if m:
return m.group('name')
else:
return basename
git_multimail.Environment = LinksEnvironment
# Override the Reviesion class to inject gitweb/cgit links and any referenced
# bug URLs
class LinksRevision(git_multimail.Revision):
def generate_email_body(self, push):
"""Show this revision."""
output = git_multimail.read_git_lines(
['log'] + self.environment.commitlogopts + ['-1', self.rev.sha1],
keepends=True,
)
bugs = {}
commit = None
idx = 0
for line in output:
idx+=1
if line == "---\n":
if commit and COMMIT_REPLACE:
output.insert(idx, "\n")
output.insert(idx, " %s\n" % (COMMIT_REPLACE % (self.environment.get_repo_shortname(), commit)))
output.insert(idx, " Commit Link:\n")
idx+=3
if bugs:
output.insert(idx, " Bug links:\n")
idx+=1
for tracker,bugnos in bugs.items():
output.insert(idx, " %s\n" % tracker)
idx+=1
for bugno in bugnos:
output.insert(idx, " %s\n" % (BUG_REFS[tracker]['replace'] % bugno))
idx+=1
output.insert(idx, "\n")
idx+=1
break
m = COMMIT_RE.search(line)
if m:
commit = m.group(1);
for tracker in BUG_REFS.keys():
m = BUG_REFS[tracker]['re'].search(line)
if m:
bug = m.group(1)
if not tracker in bugs:
bugs[tracker] = [bug]
elif not bug in bugs[tracker]:
bugs[tracker].append(bug)
return output
git_multimail.Revision = LinksRevision
if __name__ == '__main__':
git_multimail.main(sys.argv[1:])
|