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
|
import contextlib
import datetime
import functools
import re
import logging
from django.conf import settings
from linaro_metrics.crowd import Crowd
from linaro_metrics.parsemail import get_linaro_person
from linaro_metrics.models import (
CommitTagCredit,
TeamTagCredit,
TeamMembership,
ProjectTagCredit,
)
log = logging.getLogger('update_commited_patches')
response_re = \
re.compile(r'^(Tested|Reviewed|Acked|Signed-off|Nacked|Reported)-by:'
r' .*<(.*@.*)>$', re.M | re.I)
def update_commit_callback(crowd, project, repo, commit, dryrun):
for match in response_re.finditer(commit.message):
tag, email = match.groups()
p = get_linaro_person(crowd, email)
if p:
log.debug('User %s found with tag %s', p, tag)
if not dryrun:
ts = datetime.datetime.fromtimestamp(
commit.commit_time + commit.commit_timezone)
non_author = email not in commit.author
for m in TeamMembership.objects.filter(user=p.user):
ctc, created = CommitTagCredit.objects.get_or_create(
tag=tag, person=p, commit=commit.id,
defaults={'date': ts, 'non_author': non_author},
)
ProjectTagCredit.objects.get_or_create(
commit_tag=ctc, project=project
)
TeamTagCredit.objects.get_or_create(
commit_tag=ctc, team=m.team
)
@contextlib.contextmanager
def update_commit_callback_constructor():
crwd = Crowd(settings.CROWD_USER, settings.CROWD_PASS, settings.CROWD_URL)
with crwd.cached(settings.CROWD_CACHE):
cb = functools.partial(update_commit_callback, crwd)
yield cb
|