Author: jure
Date: Tue Mar 12 09:01:24 2013
New Revision: 1455452
URL: http://svn.apache.org/r1455452
Log:
#390, product extensions to ticket wiki syntax (short JIRA syntax), patch
t390_r1453952_product_ticket_jira.diff applied (from Olemis)
Added:
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/product-nomatch-link-tests.txt
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/product-ticket-jira-tests.txt
Modified:
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/api.py
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/wikisyntax.py
Modified:
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/api.py
URL:
http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/api.py?rev=1455452&r1=1455451&r2=1455452&view=diff
==============================================================================
---
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/api.py
(original)
+++
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/api.py
Tue Mar 12 09:01:24 2013
@@ -338,16 +338,27 @@ class MultiProductSystem(Component):
return bool(products)
# IWikiSyntaxProvider methods
- PRODUCT_SYNTAX_DELIMITER = u'-'
- def get_wiki_syntax(self):
- return []
+ short_syntax_delimiter = u'->'
+ def get_wiki_syntax(self):
+ if self.env[ProductTicketModule] is not None:
+ yield (r"(?<!\S)!?(?P<jtp>()(?!\d)\w+)-(?P<jtt>\d+)"
+ r"(?P<jtf>[?#]\S+)?",
+ lambda f, m, fm :
+ self._format_link(f, 'product',
+ '%s:ticket:%s' %
+ (fm.group('jtp'),
+ fm.group('jtt') +
+ (fm.group('jtf') or '')),
+ m, fm))
+
def get_link_resolvers(self):
yield ('global', self._format_link)
yield ('product', self._format_link)
# Internal methods
+
def _render_link(self, context, name, label, extra='', prefix=None):
"""Render link to product page.
"""
@@ -455,7 +466,8 @@ class MultiProductSystem(Component):
return subformatter.match(sublink + extra)
-PRODUCT_SYNTAX_DELIMITER = MultiProductSystem.PRODUCT_SYNTAX_DELIMITER
+PRODUCT_SYNTAX_DELIMITER = MultiProductSystem.short_syntax_delimiter
from multiproduct.env import ProductEnvironment, lookup_product_env, \
resolve_product_href
+from multiproduct.ticket.web_ui import ProductTicketModule
Added:
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/product-nomatch-link-tests.txt
URL:
http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/product-nomatch-link-tests.txt?rev=1455452&view=auto
==============================================================================
---
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/product-nomatch-link-tests.txt
(added)
+++
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/product-nomatch-link-tests.txt
Tue Mar 12 09:01:24 2013
@@ -0,0 +1,48 @@
+============================================================
+
+ JIRA compact syntax with leading digit
+
+============================== leading digit - JIRA syntax link resolver
+0abc-1
+0abc-12
+0abc-abc
+------------------------------
+<p>
+0abc-1
+0abc-12
+0abc-abc
+</p>
+------------------------------
+============================== leading digit - JIRA syntax link resolver +
arguments
+0abc-1?format=csv
+0abc-1#comment:3
+------------------------------
+<p>
+0abc-1?format=csv
+0abc-1#comment:3
+</p>
+------------------------------
+============================== leading digit - JIRA syntax link shorthand form
+0abc-1, 0abc-2
+0abc-12, 0abc-abc
+------------------------------
+<p>
+0abc-1, 0abc-2
+0abc-12, 0abc-abc
+</p>
+------------------------------
+============================== leading digit - JIRA syntax escaping the above
+!0abc-1
+------------------------------
+<p>
+!0abc-1
+</p>
+------------------------------
+!0abc-1
+============================== leading digit - JIRA syntax with unicode digits
+0abc-â´Â²
+------------------------------
+<p>
+0abc-â´Â²
+</p>
+------------------------------
Added:
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/product-ticket-jira-tests.txt
URL:
http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/product-ticket-jira-tests.txt?rev=1455452&view=auto
==============================================================================
---
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/product-ticket-jira-tests.txt
(added)
+++
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/product-ticket-jira-tests.txt
Tue Mar 12 09:01:24 2013
@@ -0,0 +1,63 @@
+============================================================
+
+ A subset of product ticket links rewritten using JIRA compact syntax
+
+============================== %(tc_title_prefix)s - JIRA syntax link resolver
+%(setup_product)s-1
+%(setup_product)s-12
+%(setup_product)s-abc
+------------------------------
+<p>
+<a class="new ticket" href="%(path_prefix)s/ticket/1"
title="%(link_title_prefix)sThis is the summary (new)">%(setup_product)s-1</a>
+<a class="missing ticket">%(setup_product)s-12</a>
+%(setup_product)s-abc
+</p>
+------------------------------
+============================== %(tc_title_prefix)s - JIRA syntax link resolver
+ arguments
+%(setup_product)s-1?format=csv
+%(setup_product)s-1#comment:3
+------------------------------
+<p>
+<a class="new ticket" href="%(path_prefix)s/ticket/1?format=csv"
title="%(link_title_prefix)sThis is the summary
(new)">%(setup_product)s-1?format=csv</a>
+<a class="new ticket" href="%(path_prefix)s/ticket/1#comment:3"
title="%(link_title_prefix)sThis is the summary
(new)">%(setup_product)s-1#comment:3</a>
+</p>
+------------------------------
+============================== %(tc_title_prefix)s - JIRA syntax link
shorthand form
+%(setup_product)s-1, %(setup_product)s-2
+%(setup_product)s-12, %(setup_product)s-abc
+------------------------------
+<p>
+<a class="new ticket" href="%(path_prefix)s/ticket/1"
title="%(link_title_prefix)sThis is the summary (new)">%(setup_product)s-1</a>,
<a class="missing ticket">%(setup_product)s-2</a>
+<a class="missing ticket">%(setup_product)s-12</a>, %(setup_product)s-abc
+</p>
+------------------------------
+============================== %(tc_title_prefix)s - JIRA syntax escaping the
above
+!%(setup_product)s-1
+------------------------------
+<p>
+%(setup_product)s-1
+</p>
+------------------------------
+%(setup_product)s-1
+============================== %(tc_title_prefix)s - JIRA syntax InterTrac for
tickets
+%(link_prefix)strac-2041
+[%(link_prefix)strac-2041 Trac #2041]
+%(link_prefix)sT-2041
+------------------------------
+<p>
+<a class="missing product">trac-2041</a>
+<a class="missing product">trac-2041</a>
+<a class="missing product">T-2041</a>
+</p>
+------------------------------
+============================== %(tc_title_prefix)s - JIRA syntax with unicode
digits
+%(setup_product)s-â´Â²
+%(link_prefix)sT-²â°â´Â¹
+%(link_prefix)strac-²â°â´Â¹
+------------------------------
+<p>
+<a class="missing ticket">%(setup_product)s-â´Â²</a>
+<a class="missing product">T-²â°â´Â¹</a>
+<a class="missing product">trac-²â°â´Â¹</a>
+</p>
+------------------------------
Modified:
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/wikisyntax.py
URL:
http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/wikisyntax.py?rev=1455452&r1=1455451&r2=1455452&view=diff
==============================================================================
---
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/wikisyntax.py
(original)
+++
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/wikisyntax.py
Tue Mar 12 09:01:24 2013
@@ -77,6 +77,8 @@ PRODUCT_SEARCH_LINKS = to_unicode(pkg_re
__name__, 'product-search-link-tests.txt'))
PRODUCT_TICKET_LINKS = to_unicode(pkg_resources.resource_string(
__name__, 'product-ticket-link-tests.txt'))
+PRODUCT_TICKET_JIRA = to_unicode(pkg_resources.resource_string(
+ __name__, 'product-ticket-jira-tests.txt'))
#PRODUCT_REPORT_LINKS = to_unicode(pkg_resources.resource_string(
# __name__, 'product-report-link-tests.txt'))
PRODUCT_MILESTONE_LINKS = to_unicode(pkg_resources.resource_string(
@@ -87,6 +89,8 @@ PRODUCT_QUERY2_LINKS = to_unicode(pkg_re
__name__, 'product-query2-link-tests.txt'))
PRODUCT_COMMENT_LINKS = to_unicode(pkg_resources.resource_string(
__name__, 'product-comment-link-tests.txt'))
+PRODUCT_NOMATCH_LINKS = to_unicode(pkg_resources.resource_string(
+ __name__, 'product-nomatch-link-tests.txt'))
PRODUCT_PREFIXES = MultiproductTestCase.PRODUCT_DATA.keys()
PRODUCT_PREFIXES.remove(MultiproductTestCase.default_product)
@@ -131,21 +135,22 @@ def link_mp_setup(_setup):
# load_products : optional product prefixes list to load at setup time
# *_product_name : target product name (e.g. setup_product_name )
TEST_PRODUCT_CONTEXTS = [
- {'tc_title_prefix' : 'product: links',
- 'link_prefix' : 'product:tp1:',
- 'link_prefix_quote' : 'product:"tp1:',
- 'path_prefix' : '/products/tp1',
- 'main_product' : 'tp2',
- 'link_title_prefix' : '[tp1] ',
- },
- {'tc_title_prefix' : 'product: links unicode prefix',
- 'link_prefix' : u'product:xü:',
- 'link_prefix_quote' : u'product:"xü:',
- 'path_prefix' : '/products/x%C3%BC',
- 'main_product' : 'tp2',
- 'setup_product' : u'xü',
- 'link_title_prefix' : u'[xü] ',
- },
+# {'tc_title_prefix' : 'product: links',
+# 'link_prefix' : 'product:tp1:',
+# 'link_prefix_quote' : 'product:"tp1:',
+# 'path_prefix' : '/products/tp1',
+# 'main_product' : 'tp2',
+# 'setup_product' : 'tp1',
+# 'link_title_prefix' : '[tp1] ',
+# },
+# {'tc_title_prefix' : 'product: links unicode prefix',
+# 'link_prefix' : u'product:xü:',
+# 'link_prefix_quote' : u'product:"xü:',
+# 'path_prefix' : '/products/x%C3%BC',
+# 'main_product' : 'tp2',
+# 'setup_product' : u'xü',
+# 'link_title_prefix' : u'[xü] ',
+# },
# Ignored as TracLinks resolver won't match expression
#{'tc_title_prefix' : 'product:: refs to global',
@@ -156,25 +161,25 @@ TEST_PRODUCT_CONTEXTS = [
# 'link_title_prefix' : '<global> '
# },
- {'tc_title_prefix' : 'global: links',
- 'link_prefix' : 'global:',
- 'link_prefix_quote' : 'global:"',
- 'path_prefix' : '',
- 'main_product' : 'tp2',
- 'setup_product' : '',
- 'link_title_prefix' : '<global> ',
- },
-# {'tc_title_prefix' : 'short product syntax',
-# 'link_prefix' : 'tp1' + PRODUCT_SYNTAX_DELIMITER,
-# 'path_prefix' : '/products/tp1',
+# {'tc_title_prefix' : 'global: links',
+# 'link_prefix' : 'global:',
+# 'link_prefix_quote' : 'global:"',
+# 'path_prefix' : '',
# 'main_product' : 'tp2',
+# 'setup_product' : '',
+# 'link_title_prefix' : '<global> ',
# },
-# {'tc_title_prefix' : 'short product syntax unicode
prefix',
-# 'link_prefix' : u'xü' + PRODUCT_SYNTAX_DELIMITER,
-# 'path_prefix' : '/products/x%C3%BC',
-# 'main_product' : 'tp2',
-# 'setup_product' : u'xü',
-# },
+ {'tc_title_prefix' : 'short product syntax',
+ 'link_prefix' : 'tp1' + PRODUCT_SYNTAX_DELIMITER,
+ 'path_prefix' : '/products/tp1',
+ 'main_product' : 'tp2',
+ },
+ {'tc_title_prefix' : 'short product syntax unicode
prefix',
+ 'link_prefix' : u'xü' + PRODUCT_SYNTAX_DELIMITER,
+ 'path_prefix' : '/products/x%C3%BC',
+ 'main_product' : 'tp2',
+ 'setup_product' : u'xü',
+ },
]
for _ctx in TEST_PRODUCT_CONTEXTS:
_product_names = {}
@@ -206,7 +211,7 @@ def test_suite():
file=wikisyntax.__file__,
context=wikisyntax.email_default_context(),
setup=wikisyntax.email_never_obfuscate_setup))
-
+
# Product wiki syntax
suite.addTest(formatter.test_suite(PRODUCT_LINKS,
setup=load_products_setup(PRODUCT_PREFIXES),
@@ -232,6 +237,14 @@ def test_suite():
# ticket_wikisyntax.ticket_teardown,
mpctx=ctx)
for ctx in TEST_PRODUCT_CONTEXTS)
+ suite.addTests(formatter.test_suite(PRODUCT_TICKET_JIRA % ctx,
+
link_mp_setup(ticket_wikisyntax.ticket_setup),
+ __file__,
+ # No need to invoke it anymore
+ # ticket_wikisyntax.ticket_teardown,
+ mpctx=ctx)
+ for ctx in TEST_PRODUCT_CONTEXTS
+ if ctx['path_prefix'])
# suite.addTests(formatter.test_suite(PRODUCT_REPORT_LINKS % ctx,
#
link_mp_setup(ticket_wikisyntax.report_setup),
# __file__,
@@ -260,6 +273,10 @@ def test_suite():
__file__,
mpctx=ctx)
for ctx in TEST_PRODUCT_CONTEXTS)
+
+ suite.addTest(formatter.test_suite(PRODUCT_NOMATCH_LINKS,
+ file=__file__))
+
return suite