[Patchew-devel] [PATCH 8/9] extract find_series_from_tag
Philippe Mathieu-Daudé
philmd at redhat.com
Thu Jan 16 18:39:19 UTC 2020
On 1/16/20 4:09 PM, Paolo Bonzini wrote:
> The same algorithm used for Based-on will be used also for
> Supersedes; extract it to a utility method. While at it
> allow passing a Project instance to the various prebuild
> query methods exposed by MessageManager.
>
> Signed-off-by: Paolo Bonzini <pbonzini at redhat.com>
> ---
> api/models.py | 22 +++++++++++++++++-----
> mods/git.py | 9 +--------
> 2 files changed, 18 insertions(+), 13 deletions(-)
>
> diff --git a/api/models.py b/api/models.py
> index 6ae2bae..6fd04fa 100644
> --- a/api/models.py
> +++ b/api/models.py
> @@ -380,7 +380,9 @@ class MessageManager(models.Manager):
>
> def project_messages(self, project):
> po = None
> - if isinstance(project, str):
> + if isinstance(project, Project):
> + po = project
> + elif isinstance(project, str):
> po = Project.objects.filter(name=project).first()
> elif isinstance(project, int):
> po = Project.objects.filter(id=project).first()
> @@ -400,18 +402,28 @@ class MessageManager(models.Manager):
> q = self.get_queryset()
> return q.filter(topic__isnull=False).prefetch_related("project")
>
> - def find_series(self, message_id, project_name=None):
> - heads = self.series_heads(project_name)
> + def find_series(self, message_id, project=None):
> + heads = self.series_heads(project)
> if heads is None:
> return None
> return heads.filter(message_id=message_id).first()
>
> - def find_message(self, message_id, project_name):
> - messages = self.project_messages(project_name)
> + def find_message(self, message_id, project):
> + messages = self.project_messages(project)
> if messages is None:
> return None
> return messages.filter(message_id=message_id).first()
>
> + def find_series_from_tag(self, tag, project):
> + try:
> + colon = tag.index(":")
> + except ValueError:
> + return None
> + msgid = tag[colon + 1 :].strip()
> + if msgid.startswith("<") and msgid.endswith(">"):
> + msgid = msgid[1:-1]
> + return self.find_series(msgid, project)
> +
> def patches(self):
> return self.get_queryset().filter(is_patch=True)
>
> diff --git a/mods/git.py b/mods/git.py
> index c17186f..d10cbeb 100644
> --- a/mods/git.py
> +++ b/mods/git.py
> @@ -237,14 +237,7 @@ class GitModule(PatchewModule):
> for tag in series.tags:
> if not tag.startswith("Based-on:"):
> continue
> - base_id = tag[len("Based-on:") :].strip()
> - if base_id.startswith("<") and base_id.endswith(">"):
> - base_id = base_id[1:-1]
> - base = (
> - Message.objects.series_heads()
> - .filter(project=series.project, message_id=base_id)
> - .first()
> - )
> + base = Message.objects.find_series_from_tag(tag, series.project)
> if not base:
> return None
> r = base.git_result
>
Reviewed-by: Philippe Mathieu-Daudé <philmd at redhat.com>
More information about the Patchew-devel
mailing list