[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