[PATCH] Add support for comment permalink

Stephen Finucane stephen at that.guru
Mon Sep 26 06:59:37 AEST 2016


Signed-off-by: Stephen Finucane <stephen at that.guru>
Closes-bug: #39
---
 patchwork/templates/patchwork/submission.html |  4 ++-
 patchwork/tests/test_detail.py                | 38 +++++++++++++++++++------
 patchwork/urls.py                             |  5 ++++
 patchwork/views/comment.py                    | 41 +++++++++++++++++++++++++++
 patchwork/views/cover.py                      |  2 --
 5 files changed, 79 insertions(+), 11 deletions(-)
 create mode 100644 patchwork/views/comment.py

diff --git a/patchwork/templates/patchwork/submission.html b/patchwork/templates/patchwork/submission.html
index 088cceb..bc0e529 100644
--- a/patchwork/templates/patchwork/submission.html
+++ b/patchwork/templates/patchwork/submission.html
@@ -212,10 +212,12 @@ function toggle_headers(link_id, headers_id)
 <h2>Comments</h2>
 {% endif %}
 
+<a name="{{ item.id }}"></a>
 <div class="comment">
 <div class="meta">
  <span>{{ item.submitter|personify:project }}</span>
- <span class="pull-right">{{ item.date }}</span>
+ <span class="pull-right">{{ item.date }} | <a href="{% url 'comment-redirect' comment_id=item.id %}"
+   >#{{ forloop.counter }}</a></span>
 </div>
 <pre class="content">
 {{ item|commentsyntax }}
diff --git a/patchwork/tests/test_detail.py b/patchwork/tests/test_detail.py
index 0890c7c..cf29691 100644
--- a/patchwork/tests/test_detail.py
+++ b/patchwork/tests/test_detail.py
@@ -22,31 +22,53 @@ from __future__ import absolute_import
 from django.core.urlresolvers import reverse
 from django.test import TestCase
 
-from patchwork.tests.utils import create_covers
-from patchwork.tests.utils import create_patches
+from patchwork.tests.utils import create_comment
+from patchwork.tests.utils import create_cover
+from patchwork.tests.utils import create_patch
 
 
 class CoverLetterViewTest(TestCase):
 
     def test_redirect(self):
-        patches = create_patches()
-        patch_id = patches[0].id
+        patch_id = create_patch().id
 
         requested_url = reverse('cover-detail', kwargs={'cover_id': patch_id})
         redirect_url = reverse('patch-detail', kwargs={'patch_id': patch_id})
 
-        response = self.client.post(requested_url)
+        response = self.client.get(requested_url)
         self.assertRedirects(response, redirect_url)
 
 
 class PatchViewTest(TestCase):
 
     def test_redirect(self):
-        covers = create_covers()
-        cover_id = covers[0].id
+        cover_id = create_cover().id
 
         requested_url = reverse('patch-detail', kwargs={'patch_id': cover_id})
         redirect_url = reverse('cover-detail', kwargs={'cover_id': cover_id})
 
-        response = self.client.post(requested_url)
+        response = self.client.get(requested_url)
         self.assertRedirects(response, redirect_url)
+
+
+class CommentRedirectTest(TestCase):
+
+    def _test_redirect(self, submission, submission_url, submission_id):
+        comment_id = create_comment(submission=submission).id
+
+        requested_url = reverse('comment-redirect',
+                                kwargs={'comment_id': comment_id})
+        redirect_url = '%s#%d' % (
+            reverse(submission_url, kwargs={submission_id: submission.id}),
+            comment_id)
+
+        response = self.client.get(requested_url)
+        self.assertRedirects(response, redirect_url)
+
+    def test_patch_redirect(self):
+        patch = create_patch()
+        self._test_redirect(patch, 'patch-detail', 'patch_id')
+
+    def test_cover_redirect(self):
+        cover = create_cover()
+        self._test_redirect(cover, 'cover-detail', 'cover_id')
diff --git a/patchwork/urls.py b/patchwork/urls.py
index 33e4781..87d4bc5 100644
--- a/patchwork/urls.py
+++ b/patchwork/urls.py
@@ -24,6 +24,7 @@ from django.contrib.auth import views as auth_views
 
 from patchwork.views import api as api_views
 from patchwork.views import bundle as bundle_views
+from patchwork.views import comment as comment_views
 from patchwork.views import cover as cover_views
 from patchwork.views import help as help_views
 from patchwork.views import mail as mail_views
@@ -60,6 +61,10 @@ urlpatterns = [
     url(r'^cover/(?P<cover_id>\d+)/$', cover_views.cover,
         name='cover-detail'),
 
+    # comment short urls
+    url(r'^comment/(?P<comment_id>\d+)/$', comment_views.comment,
+        name='comment-redirect'),
+
     # logged-in user stuff
     url(r'^user/$', user_views.profile, name='user-profile'),
     url(r'^user/todo/$', user_views.todo_lists,
diff --git a/patchwork/views/comment.py b/patchwork/views/comment.py
new file mode 100644
index 0000000..0ca0bc8
--- /dev/null
+++ b/patchwork/views/comment.py
@@ -0,0 +1,41 @@
+# Patchwork - automated patch tracking system
+# Copyright (C) 2016 Stephen Finucane <stephenfinucane at hotmail.com>
+#
+# This file is part of the Patchwork package.
+#
+# Patchwork is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# Patchwork is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Patchwork; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+from __future__ import absolute_import
+
+from django.core import urlresolvers
+from django import http
+from django import shortcuts
+
+from patchwork import models
+
+
+def comment(request, comment_id):
+    submission = shortcuts.get_object_or_404(models.Comment,
+                                             id=comment_id).submission
+    if hasattr(submission, 'patch'):
+        url = 'patch-detail'
+        key = 'patch_id'
+    else:
+        url = 'cover-detail'
+        key = 'cover_id'
+
+    return http.HttpResponseRedirect('%s#%s' % (
+        urlresolvers.reverse(url, kwargs={key: submission.id}),
+        comment_id))
diff --git a/patchwork/views/cover.py b/patchwork/views/cover.py
index 83f5551..a9cf0ad 100644
--- a/patchwork/views/cover.py
+++ b/patchwork/views/cover.py
@@ -28,8 +28,6 @@ from patchwork.models import CoverLetter, Submission
 
 
 def cover(request, cover_id):
-    context = {}
-
     # redirect to patches where necessary
     try:
         cover = get_object_or_404(CoverLetter, id=cover_id)
-- 
2.7.4



More information about the Patchwork mailing list