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