From 1d07e25cb106e572b38628f2e77e476c3a5c3a47 Mon Sep 17 00:00:00 2001 From: Shubham Jain Date: Thu, 24 May 2018 00:46:07 +0530 Subject: [PATCH] Refactoring of UpdateProjectHeadView.handle() moved and refactored the UpdateProjectHeadView.handle() into method of api.models.Project so that it can be re-used in rest conversion of update-project-head Message-Id: <20180523191607.34465-1-shubhamjain7495@gmail.com> --- api/models.py | 31 +++++++++++++++++++++++++++++++ api/views.py | 29 +++-------------------------- 2 files changed, 34 insertions(+), 26 deletions(-) diff --git a/api/models.py b/api/models.py index 8f7ca192..e3585e46 100644 --- a/api/models.py +++ b/api/models.py @@ -171,6 +171,37 @@ def recognizes(self, m): def get_subprojects(self): return Project.objects.filter(parent_project=self) + def get_project_head(self): + return self.get_property("git.head") + + def set_project_head(self, new_head): + self.set_property("git.head", new_head) + + project_head = property(get_project_head, set_project_head) + + def series_update(self, message_ids): + updated_series = [] + for msgid in message_ids: + if msgid.startswith("<") and msgid.endswith(">"): + msgid = msgid[1:-1] + mo = Message.objects.filter(project=self, message_id=msgid, + is_merged=False).first() + if not mo: + continue + mo.is_merged = True + mo.save() + s = mo.get_series_head() + if s: + updated_series.append(s) + for s in updated_series: + for p in series.get_patches(): + if not p.is_merged: + break + else: + series.is_merged = True + series.save() + return len(updated_series) + class ProjectProperty(models.Model): project = models.ForeignKey('Project', on_delete=models.CASCADE) name = models.CharField(max_length=1024, db_index=True) diff --git a/api/views.py b/api/views.py index c27cd5a8..7a374810 100644 --- a/api/views.py +++ b/api/views.py @@ -120,34 +120,11 @@ class UpdateProjectHeadView(APILoginRequiredView): def handle(self, request, project, old_head, new_head, message_ids): po = Project.objects.get(name=project) - old_head_0 = po.get_property("git.head") + old_head_0 = po.project_head if old_head_0 and old_head_0 != old_head: raise Exception("wrong old head") - ret = 0 - updated_series = [] - for msgid in message_ids: - if msgid.startswith("<") and msgid.endswith(">"): - msgid = msgid[1:-1] - mo = Message.objects.filter(project=po, message_id=msgid, - is_merged=False).first() - if not mo: - continue - ret += 1 - mo.is_merged = True - mo.save() - s = mo.get_series_head() - if s: - updated_series.append(s) - for s in updated_series: - merged = True - for p in s.get_patches(): - if not p.is_merged: - merged = False - break - if merged: - s.is_merged = True - s.save() - po.set_property("git.head", new_head) + ret = po.series_update(message_ids) + po.project_head = new_head return ret class SetPropertyView(APILoginRequiredView):