From e59fd3a225aa245913f2fb3957d5ab1f996a7830 Mon Sep 17 00:00:00 2001 From: Klaas van Schelven Date: Thu, 12 Sep 2024 09:49:22 +0200 Subject: [PATCH] Implement 'occurs_in_last_release' --- issues/models.py | 4 +++- issues/templates/issues/issue_list.html | 2 +- projects/models.py | 6 ++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/issues/models.py b/issues/models.py index 686d589..f809412 100644 --- a/issues/models.py +++ b/issues/models.py @@ -97,7 +97,9 @@ class Issue(models.Model): ] def occurs_in_last_release(self): - return False # TODO actually implement (and then: implement in a performant manner) + # we can depend on latest_release to exist, because we always create at least one release, even for 'no release' + latest_release = self.project.get_latest_release() + return latest_release.version in self.events_at def turningpoint_set_all(self): # like turningpoint_set.all() but with user in select_related diff --git a/issues/templates/issues/issue_list.html b/issues/templates/issues/issue_list.html index fe1746a..c94d54e 100644 --- a/issues/templates/issues/issue_list.html +++ b/issues/templates/issues/issue_list.html @@ -75,7 +75,7 @@ diff --git a/projects/models.py b/projects/models.py index 81dbf4a..faba6f3 100644 --- a/projects/models.py +++ b/projects/models.py @@ -84,10 +84,12 @@ class Project(models.Model): models.Index(fields=["id", "sentry_key"]), ] """ + def get_latest_release(self): - # TODO perfomance considerations... this can be denormalized/cached at the project level from releases.models import ordered_releases - return list(ordered_releases(project=self))[-1] + if not hasattr(self, "_latest_release"): + self._latest_release = list(ordered_releases(project=self))[-1] + return self._latest_release def save(self, *args, **kwargs): if self.slug in [None, ""]: