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()