:p
atchew
Login
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 --- api/models.py | 42 ++++++++++++++++++++++++++++++++++++++++++ api/views.py | 25 +------------------------ 2 files changed, 43 insertions(+), 24 deletions(-) diff --git a/api/models.py b/api/models.py index XXXXXXX..XXXXXXX 100644 --- a/api/models.py +++ b/api/models.py @@ -XXX,XX +XXX,XX @@ def load_blob_json(name): logging.error('Failed to load blob %s: %s' %(name, e)) return None +def get_series_to_be_updated(project_name, message_ids): + updated_series = [] + for msgid in message_ids: + if msgid.startswith("<") and msgid.endswith(">"): + msgid = msgid[1:-1] + p = Project.objects.get(name=project_name) + mo = Message.objects.filter(project=p, 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) + return updated_series + +def change_merge_status(series): + merged = True + for p in series.get_patches(): + if not p.is_merged: + merged = False + break + if merged: + series.is_merged = True + series.save() + class Project(models.Model): name = models.CharField(max_length=1024, db_index=True, unique=True, help_text="""The name of the project""") @@ -XXX,XX +XXX,XX @@ class Project(models.Model): def get_subprojects(self): return Project.objects.filter(parent_project=self) + def get_project_head(self): + return self.get_property("git.head") + + project_head = property(get_project_head) + + def series_update(self, message_ids): + series_to_be_updated = get_series_to_be_updated(self.name, message_ids) + ret = len(series_to_be_updated) + for s in series_to_be_updated: + change_merge_status(s) + return ret + + def set_project_head(self, new_head): + self.set_property("git.head", new_head) + 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 XXXXXXX..XXXXXXX 100644 --- a/api/views.py +++ b/api/views.py @@ -XXX,XX +XXX,XX @@ class UpdateProjectHeadView(APILoginRequiredView): old_head_0 = po.get_property("git.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() + ret = po.series_update(message_ids) po.set_property("git.head", new_head) return ret -- 2.14.3 (Apple Git-98) _______________________________________________ Patchew-devel mailing list Patchew-devel@redhat.com https://www.redhat.com/mailman/listinfo/patchew-devel
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 --- 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 XXXXXXX..XXXXXXX 100644 --- a/api/models.py +++ b/api/models.py @@ -XXX,XX +XXX,XX @@ class Project(models.Model): 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 XXXXXXX..XXXXXXX 100644 --- a/api/views.py +++ b/api/views.py @@ -XXX,XX +XXX,XX @@ 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): -- 2.14.3 (Apple Git-98) _______________________________________________ Patchew-devel mailing list Patchew-devel@redhat.com https://www.redhat.com/mailman/listinfo/patchew-devel