From f0e93b4d5db3e5009003aedb646349bcd693b488 Mon Sep 17 00:00:00 2001 From: Klaas van Schelven Date: Wed, 21 Feb 2024 18:55:52 +0100 Subject: [PATCH] 'Resolved in' actually sends the relevant version 'under water' if you have an old screen open which says 'resolved in v1.0' that's what should happen when you click, even when v2.0 has been seen in the meanwhile --- issues/models.py | 17 +++++++++++++---- issues/templates/issues/issue_detail.html | 2 +- issues/views.py | 5 +++-- releases/models.py | 2 +- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/issues/models.py b/issues/models.py index 7b1045b..292fe2f 100644 --- a/issues/models.py +++ b/issues/models.py @@ -71,10 +71,11 @@ class Issue(models.Model): def get_events_at(self): return json.loads(self.events_at) - def add_fixed_at(self, release): + def add_fixed_at(self, release_version): + # release_version: str fixed_at = self.get_fixed_at() - if release.version not in fixed_at: - fixed_at.append(release.version) + if release_version not in fixed_at: + fixed_at.append(release_version) self.fixed_at = json.dumps(fixed_at) def occurs_in_last_release(self): @@ -105,8 +106,16 @@ class IssueStateManager(object): @staticmethod def resolve_by_latest(issue): + # NOTE: currently unused; we may soon reintroduce it though so I left it in. issue.is_resolved = True - issue.add_fixed_at(issue.project.get_latest_release()) + issue.add_fixed_at(issue.project.get_latest_release().version) + IssueStateManager.unmute(issue, implicitly_called=True) # as in IssueStateManager.resolve() + + @staticmethod + def resolve_by_release(issue, release_version): + # release_version: str + issue.is_resolved = True + issue.add_fixed_at(release_version) IssueStateManager.unmute(issue, implicitly_called=True) # as in IssueStateManager.resolve() @staticmethod diff --git a/issues/templates/issues/issue_detail.html b/issues/templates/issues/issue_detail.html index 4198c11..92db840 100644 --- a/issues/templates/issues/issue_detail.html +++ b/issues/templates/issues/issue_detail.html @@ -20,7 +20,7 @@ {% if not issue.occurs_in_last_release %} {# As an alternative to 'resolved in get_latest' I briefly considered 'resolved in first-after-last-seen'. I settled on "who cares, it's in the margin anyway" #} {# and if you, as a user, really insist on getting this 100% right you can always be explicit by setting up your CLI integrations #} - + {% endif %} {# 'by next' is even if 'by current' is also shown: just because you haven't seen 'by current' doesn't mean it's actually already solved #} diff --git a/issues/views.py b/issues/views.py index 788b527..fb9d609 100644 --- a/issues/views.py +++ b/issues/views.py @@ -32,8 +32,9 @@ def issue_event_detail(request, issue_pk, event_pk): if request.method == "POST": if request.POST["action"] == "resolved": IssueStateManager.resolve(issue) - elif request.POST["action"] == "resolved_latest": - IssueStateManager.resolve_by_latest(issue) + elif request.POST["action"].startswith("resolved_release:"): + release_version = request.POST["action"].split(":", 1)[1] + IssueStateManager.resolve_by_release(issue, release_version) elif request.POST["action"] == "resolved_next": IssueStateManager.resolve_by_next(issue) elif request.POST["action"] == "reopen": diff --git a/releases/models.py b/releases/models.py index 4d978c8..d0b5ab0 100644 --- a/releases/models.py +++ b/releases/models.py @@ -95,7 +95,7 @@ def create_release_if_needed(project, version): if release == project.get_latest_release(): for bnr_issue in Issue.objects.filter(project=project, is_resolved_by_next_release=True): - bnr_issue.add_fixed_at(release) + bnr_issue.add_fixed_at(release.version) bnr_issue.is_resolved_by_next_release = False bnr_issue.save()