diff --git a/pagure/pfmarkdown.py b/pagure/pfmarkdown.py
index fcb74e0..07a054b 100644
--- a/pagure/pfmarkdown.py
+++ b/pagure/pfmarkdown.py
@@ -175,9 +175,14 @@ class ImplicitIssuePattern(markdown.inlinepatterns.Pattern):
if not user and not repo:
if 'fork/' in url:
- user, repo = url.split('fork/')[1].split('/', 2)[:2]
+ user, ext = url.split('fork/')[1].split('/', 1)
else:
- repo = url.split(root)[1].split('/', 1)[0]
+ ext = url.split(root)[1]
+
+ if ext.count('/') >= 3:
+ namespace, repo = ext.split('/', 2)[:2]
+ else:
+ repo = ext.split('/', 1)[0]
issue = _issue_exists(user, namespace, repo, idx)
if issue:
diff --git a/tests/test_pagure_flask_ui_issues.py b/tests/test_pagure_flask_ui_issues.py
index 860b3a8..1a4562b 100644
--- a/tests/test_pagure_flask_ui_issues.py
+++ b/tests/test_pagure_flask_ui_issues.py
@@ -2912,6 +2912,154 @@ class PagureFlaskIssuestests(tests.Modeltests):
tags = pagure.lib.get_tags_of_project(self.session, repo)
self.assertEqual([tag.tag for tag in tags], ['blue', 'green', 'red'])
+ @patch('pagure.lib.git.update_git')
+ @patch('pagure.lib.notify.send_email')
+ def test_view_issue_namespace_comment(self, p_send_email, p_ugt):
+ """ Test comment on the view_issue endpoint on namespaced project.
+ """
+ # Create the project ns/test
+ item = pagure.lib.model.Project(
+ user_id=1, # pingou
+ name='test3',
+ namespace='ns',
+ description='test project #3',
+ hook_token='aaabbbcccdd',
+ )
+ self.session.add(item)
+ self.session.commit()
+ self.assertEqual(item.fullname, 'ns/test3')
+ pygit2.init_repository(
+ os.path.join(self.path, 'repos', 'ns', 'test3.git'),
+ bare=True)
+
+ # Create 2 issues
+ iss = pagure.lib.new_issue(
+ issue_id=1,
+ session=self.session,
+ repo=item,
+ title='test issue',
+ content='content test issue',
+ user='pingou',
+ ticketfolder=None,
+ )
+ self.session.commit()
+ self.assertEqual(iss.id, 1)
+ self.assertEqual(iss.title, 'test issue')
+ self.assertEqual(iss.project.fullname, 'ns/test3')
+
+ iss = pagure.lib.new_issue(
+ issue_id=2,
+ session=self.session,
+ repo=item,
+ title='test issue2',
+ content='content test issue2',
+ user='pingou',
+ ticketfolder=None,
+ )
+ self.session.commit()
+ self.assertEqual(iss.id, 2)
+ self.assertEqual(iss.title, 'test issue2')
+ self.assertEqual(iss.project.fullname, 'ns/test3')
+
+ # Add a comment on the second issue pointing to the first one
+ issue_comment = pagure.lib.model.IssueComment(
+ issue_uid=iss.uid,
+ comment='foo bar #1 see?',
+ user_id=1, # pingou
+ notification=False,
+ )
+ self.session.add(issue_comment)
+ self.session.commit()
+
+ output = self.app.get('/ns/test3/issue/2')
+ self.assertEqual(output.status_code, 200)
+ self.assertIn(
+ ''
+ 'foo bar #1 see?
', output.data)
+
+ @patch('pagure.lib.git.update_git')
+ @patch('pagure.lib.notify.send_email')
+ def test_view_issue_forked_namespace_comment(self, p_send_email, p_ugt):
+ """ Test comment on the view_issue endpoint on namespaced project.
+ """
+ # Create the project ns/test
+ item = pagure.lib.model.Project(
+ user_id=1, # pingou
+ name='test3',
+ namespace='ns',
+ description='test project #3',
+ hook_token='aaabbbcccdd',
+ )
+ self.session.add(item)
+ self.session.commit()
+ self.assertEqual(item.fullname, 'ns/test3')
+
+ # Fork the project ns/test
+ item = pagure.lib.model.Project(
+ user_id=1, # pingou
+ parent_id=1, # ns/test
+ is_fork=True,
+ name='test3',
+ namespace='ns',
+ description='test project #3',
+ hook_token='aaabbbcccddff',
+ )
+ self.session.add(item)
+ self.session.commit()
+ self.assertEqual(item.fullname, 'forks/pingou/ns/test3')
+
+ pygit2.init_repository(
+ os.path.join(
+ self.path, 'repos', 'forks', 'pingou', 'ns', 'test3.git'),
+ bare=True)
+
+ # Create 2 issues
+ iss = pagure.lib.new_issue(
+ issue_id=1,
+ session=self.session,
+ repo=item,
+ title='test issue',
+ content='content test issue',
+ user='pingou',
+ ticketfolder=None,
+ )
+ self.session.commit()
+ self.assertEqual(iss.id, 1)
+ self.assertEqual(iss.title, 'test issue')
+ self.assertEqual(iss.project.fullname, 'forks/pingou/ns/test3')
+
+ iss = pagure.lib.new_issue(
+ issue_id=2,
+ session=self.session,
+ repo=item,
+ title='test issue2',
+ content='content test issue2',
+ user='pingou',
+ ticketfolder=None,
+ )
+ self.session.commit()
+ self.assertEqual(iss.id, 2)
+ self.assertEqual(iss.title, 'test issue2')
+ self.assertEqual(iss.project.fullname, 'forks/pingou/ns/test3')
+
+ # Add a comment on the second issue pointing to the first one
+ issue_comment = pagure.lib.model.IssueComment(
+ issue_uid=iss.uid,
+ comment='foo bar #1 see?',
+ user_id=1, # pingou
+ notification=False,
+ )
+ self.session.add(issue_comment)
+ self.session.commit()
+
+ output = self.app.get('/fork/pingou/ns/test3/issue/2')
+ self.assertEqual(output.status_code, 200)
+ self.assertIn(
+ ''
+ 'foo bar #1 see?
', output.data)
+
if __name__ == '__main__':
unittest.main(verbosity=2)