From 084a37e4ddd51109dfb9977d585bb35872155bbf Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Tue, 22 Apr 2014 13:59:12 +0200 Subject: [PATCH] Add support for claiming and unclaiming as committer --- pgcommitfest/commitfest/models.py | 3 ++ pgcommitfest/commitfest/templates/patch.html | 4 ++- pgcommitfest/commitfest/views.py | 36 ++++++++++++++++++-- pgcommitfest/urls.py | 1 + 4 files changed, 41 insertions(+), 3 deletions(-) diff --git a/pgcommitfest/commitfest/models.py b/pgcommitfest/commitfest/models.py index 75078a0..f8ea862 100644 --- a/pgcommitfest/commitfest/models.py +++ b/pgcommitfest/commitfest/models.py @@ -15,6 +15,9 @@ class Committer(models.Model): def __unicode__(self): return unicode(self.user) + @property + def fullname(self): + return "%s %s (%s)" % (self.user.first_name, self.user.last_name, self.user.username) class CommitFest(models.Model): STATUS_FUTURE=1 diff --git a/pgcommitfest/commitfest/templates/patch.html b/pgcommitfest/commitfest/templates/patch.html index a0a3b32..23976ee 100644 --- a/pgcommitfest/commitfest/templates/patch.html +++ b/pgcommitfest/commitfest/templates/patch.html @@ -43,7 +43,9 @@ Committer - {%if patch.committer%}{{patch.committer.first_name}} {{patch.committer.last_name}} ({{patch.committer.username}}){%endif%} + {%if patch.committer%}{{patch.committer.fullname}}{%endif%} +{%if is_committer%}{{is_this_committer|yesno:"Unclaim as committer,Claim as committer"}}{%endif%} + Links diff --git a/pgcommitfest/commitfest/views.py b/pgcommitfest/commitfest/views.py index b66e37f..f502f38 100644 --- a/pgcommitfest/commitfest/views.py +++ b/pgcommitfest/commitfest/views.py @@ -1,5 +1,5 @@ from django.shortcuts import render_to_response, get_object_or_404 -from django.http import HttpResponseRedirect, Http404 +from django.http import HttpResponseRedirect, Http404, HttpResponseForbidden from django.template import RequestContext from django.db import transaction from django.db.models import Q @@ -111,11 +111,18 @@ def patch(request, cfid, patchid): #XXX: this creates a session, so find a smarter way. Probably handle #it in the callback and just ask the user then? if request.user.is_authenticated(): - is_committer = Committer.objects.filter(user=request.user).exists() + committer = list(Committer.objects.filter(user=request.user, active=True)) + if len(committer) > 0: + is_committer= True + is_this_committer = committer[0] == patch.committer + else: + is_committer = is_this_committer = False + is_reviewer = request.user in patch.reviewers.all() # is_reviewer = len([x for x in patch.reviewers.all() if x==request.user]) > 0 else: is_committer = False + is_this_committer = False is_reviewer = False return render_to_response('patch.html', { @@ -123,6 +130,7 @@ def patch(request, cfid, patchid): 'patch': patch, 'patch_commitfests': patch_commitfests, 'is_committer': is_committer, + 'is_this_committer': is_this_committer, 'is_reviewer': is_reviewer, 'title': 'View patch', 'breadcrumbs': [{'title': cf.name, 'href': '/%s/' % cf.pk},], @@ -368,3 +376,27 @@ def reviewer(request, cfid, patchid, status): patch.set_modified() PatchHistory(patch=patch, by=request.user, what='Removed self from reviewers').save() return HttpResponseRedirect('../../') + +@login_required +@transaction.commit_on_success +def committer(request, cfid, patchid, status): + get_object_or_404(CommitFest, pk=cfid) + patch = get_object_or_404(Patch, pk=patchid) + + committer = list(Committer.objects.filter(user=request.user, active=True)) + if len(committer) == 0: + return HttpResponseForbidden('Only committers can do that!') + committer = committer[0] + + is_committer = committer == patch.committer + + if status=='become' and not is_committer: + patch.committer = committer + patch.set_modified() + PatchHistory(patch=patch, by=request.user, what='Added self as committer').save() + elif status=='remove' and is_committer: + patch.committer = None + patch.set_modified() + PatchHistory(patch=patch, by=request.user, what='Removed self from committers').save() + patch.save() + return HttpResponseRedirect('../../') diff --git a/pgcommitfest/urls.py b/pgcommitfest/urls.py index 7eb3576..488041d 100644 --- a/pgcommitfest/urls.py +++ b/pgcommitfest/urls.py @@ -14,6 +14,7 @@ urlpatterns = patterns('', url(r'^(\d+)/(\d+)/status/(review|author|committer)/$', 'commitfest.views.status'), url(r'^(\d+)/(\d+)/close/(reject|feedback|committed)/$', 'commitfest.views.close'), url(r'^(\d+)/(\d+)/reviewer/(become|remove)/$', 'commitfest.views.reviewer'), + url(r'^(\d+)/(\d+)/committer/(become|remove)/$', 'commitfest.views.committer'), url(r'^(\d+)/(\d+)/(comment|review)/', 'commitfest.views.comment'), url(r'^ajax/(\w+)/$', 'commitfest.ajax.main'), -- 2.39.5