changeset 2865:6d9b3ade3051 beta

Allowing multiple issue servers to be autolinked in the changeset view; linking is now contingent on issue_server_link, issue_pat and issue_prefix being defined; multiple servers can be used by specifying a common suffix on all the above variables, ie .. issue_server_link_1 issue_pat_1 issue_prefix_1 .. and .. issue_server_link_other issue_pat_other issue_prefix_other .. would be treated as two distinct servers, but .. issue_pat_thing .. would be ignored (since the other two requisite vars aren't present). This patch is backwards compatible with existing variables (as a suffix isn't needed).
author Zachary Auclair <zach101@gmail.com>
date Thu, 20 Sep 2012 20:30:55 -0400
parents 5c1ad3b410e5
children 736678a8c881
files rhodecode/lib/helpers.py
diffstat 1 files changed, 23 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/lib/helpers.py	Sun Sep 23 13:04:53 2012 +0200
+++ b/rhodecode/lib/helpers.py	Thu Sep 20 20:30:55 2012 -0400
@@ -1000,16 +1000,28 @@
         return ''.join(links)
 
     # urlify changesets - extrac revisions and make link out of them
-    text_ = urlify_changesets(escaper(text_), repository)
+    newtext = urlify_changesets(escaper(text_), repository)
 
     try:
         conf = config['app_conf']
 
-        URL_PAT = re.compile(r'%s' % conf.get('issue_pat'))
+        # allow multiple issue servers to be used
+        valid_indices = [
+            x.group(1) 
+            for x in map(lambda x: re.match(r'issue_pat(.*)', x), conf.keys()) 
+            if x and conf.has_key('issue_server_link'+x.group(1)) and conf.has_key('issue_prefix'+x.group(1))
+            ]
+
+        #log.debug('found issue server suffixes ' + ','.join(valid_indices) + ' during valuation of: \n' + newtext)
 
-        if URL_PAT:
-            ISSUE_SERVER_LNK = conf.get('issue_server_link')
-            ISSUE_PREFIX = conf.get('issue_prefix')
+        for pattern_index in valid_indices:
+            ISSUE_PATTERN = conf.get('issue_pat'+pattern_index)
+            ISSUE_SERVER_LNK = conf.get('issue_server_link'+pattern_index)
+            ISSUE_PREFIX = conf.get('issue_prefix'+pattern_index)
+
+            #log.debug(ISSUE_PATTERN + ' ' + ISSUE_SERVER_LNK + ' ' + ISSUE_PREFIX)
+
+            URL_PAT = re.compile(r'%s' % ISSUE_PATTERN)
 
             def url_func(match_obj):
                 pref = ''
@@ -1027,6 +1039,7 @@
                     url = url.replace('{repo}', repository)
                     repo_name = repository.split(URL_SEP)[-1]
                     url = url.replace('{repo_name}', repo_name)
+
                 return tmpl % {
                      'pref': pref,
                      'cls': 'issue-tracker-link',
@@ -1036,8 +1049,11 @@
                      'serv': ISSUE_SERVER_LNK,
                 }
 
-            newtext = URL_PAT.sub(url_func, text_)
+            newtext = URL_PAT.sub(url_func, newtext)
+            #log.debug('after '+pattern_index+':\n'+newtext)
 
+        # if we actually did something above
+        if valid_indices:
             if link_:
                 # wrap not links into final link => link_
                 newtext = linkify_others(newtext, link_)
@@ -1047,7 +1063,7 @@
         log.error(traceback.format_exc())
         pass
 
-    return text_
+    return newtext
 
 
 def rst(source):