pull-requests: fixed multiple repetitions of referenced tickets in pull requests summary sidebar.
This commit is contained in:
parent
2637470cf8
commit
ce1015425e
3 changed files with 57 additions and 23 deletions
|
|
@ -25,6 +25,7 @@ Consists of functions to typically be used within templates, but also
|
|||
available to Controllers. This module is available to both as 'h'.
|
||||
"""
|
||||
import base64
|
||||
import collections
|
||||
|
||||
import os
|
||||
import random
|
||||
|
|
@ -1733,7 +1734,7 @@ def process_patterns(text_string, repo_name, link_format='html', active_entries=
|
|||
|
||||
|
||||
def urlify_commit_message(commit_text, repository=None, active_pattern_entries=None,
|
||||
issues_container=None, error_container=None):
|
||||
issues_container_callback=None, error_container=None):
|
||||
"""
|
||||
Parses given text message and makes proper links.
|
||||
issues are linked to given issue-server, and rest is a commit link
|
||||
|
|
@ -1756,8 +1757,9 @@ def urlify_commit_message(commit_text, repository=None, active_pattern_entries=N
|
|||
new_text, issues, errors = process_patterns(
|
||||
new_text, repository or '', active_entries=active_pattern_entries)
|
||||
|
||||
if issues_container is not None:
|
||||
issues_container.extend(issues)
|
||||
if issues_container_callback is not None:
|
||||
for issue in issues:
|
||||
issues_container_callback(issue)
|
||||
|
||||
if error_container is not None:
|
||||
error_container.extend(errors)
|
||||
|
|
@ -1802,7 +1804,7 @@ def renderer_from_filename(filename, exclude=None):
|
|||
|
||||
|
||||
def render(source, renderer='rst', mentions=False, relative_urls=None,
|
||||
repo_name=None, active_pattern_entries=None, issues_container=None):
|
||||
repo_name=None, active_pattern_entries=None, issues_container_callback=None):
|
||||
|
||||
def maybe_convert_relative_links(html_source):
|
||||
if relative_urls:
|
||||
|
|
@ -1819,8 +1821,9 @@ def render(source, renderer='rst', mentions=False, relative_urls=None,
|
|||
source, issues, errors = process_patterns(
|
||||
source, repo_name, link_format='rst',
|
||||
active_entries=active_pattern_entries)
|
||||
if issues_container is not None:
|
||||
issues_container.extend(issues)
|
||||
if issues_container_callback is not None:
|
||||
for issue in issues:
|
||||
issues_container_callback(issue)
|
||||
|
||||
return literal(
|
||||
'<div class="rst-block">%s</div>' %
|
||||
|
|
@ -1833,8 +1836,10 @@ def render(source, renderer='rst', mentions=False, relative_urls=None,
|
|||
source, issues, errors = process_patterns(
|
||||
source, repo_name, link_format='markdown',
|
||||
active_entries=active_pattern_entries)
|
||||
if issues_container is not None:
|
||||
issues_container.extend(issues)
|
||||
if issues_container_callback is not None:
|
||||
for issue in issues:
|
||||
issues_container_callback(issue)
|
||||
|
||||
|
||||
return literal(
|
||||
'<div class="markdown-block">%s</div>' %
|
||||
|
|
@ -2115,3 +2120,29 @@ def is_active(menu_entry, selected):
|
|||
|
||||
if selected in menu_entry:
|
||||
return "active"
|
||||
|
||||
|
||||
class IssuesRegistry(object):
|
||||
"""
|
||||
issue_registry = IssuesRegistry()
|
||||
some_func(issues_callback=issues_registry(...))
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
self.issues = []
|
||||
self.unique_issues = collections.defaultdict(lambda: [])
|
||||
|
||||
def __call__(self, commit_dict=None):
|
||||
def callback(issue):
|
||||
if commit_dict and issue:
|
||||
issue['commit'] = commit_dict
|
||||
self.issues.append(issue)
|
||||
self.unique_issues[issue['id']].append(issue)
|
||||
return callback
|
||||
|
||||
def get_issues(self):
|
||||
return self.issues
|
||||
|
||||
@property
|
||||
def issues_unique_count(self):
|
||||
return len(set(i['id'] for i in self.issues))
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@
|
|||
## to speed up lookups cache some functions before the loop
|
||||
<%
|
||||
active_patterns = h.get_active_pattern_entries(c.repo_name)
|
||||
urlify_commit_message = h.partial(h.urlify_commit_message, active_pattern_entries=active_patterns, issues_container=getattr(c, 'referenced_commit_issues', None))
|
||||
urlify_commit_message = h.partial(h.urlify_commit_message, active_pattern_entries=active_patterns)
|
||||
%>
|
||||
|
||||
%for commit in c.commit_ranges:
|
||||
|
|
@ -57,7 +57,7 @@
|
|||
</td>
|
||||
<td class="mid td-description">
|
||||
<div class="log-container truncate-wrap">
|
||||
<div class="message truncate" id="c-${commit.raw_id}" data-message-raw="${commit.message}">${urlify_commit_message(commit.message, c.repo_name)}</div>
|
||||
<div class="message truncate" id="c-${commit.raw_id}" data-message-raw="${commit.message}">${urlify_commit_message(commit.message, c.repo_name, issues_container_callback=getattr(c, 'referenced_commit_issues', lambda p:p)(commit.serialize()))}</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
|||
|
|
@ -27,8 +27,8 @@
|
|||
<%def name="main()">
|
||||
## Container to gather extracted Tickets
|
||||
<%
|
||||
c.referenced_commit_issues = []
|
||||
c.referenced_desc_issues = []
|
||||
c.referenced_commit_issues = h.IssuesRegistry()
|
||||
c.referenced_desc_issues = h.IssuesRegistry()
|
||||
%>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
|
@ -86,7 +86,7 @@
|
|||
</div>
|
||||
|
||||
<div id="pr-desc" class="input" title="${_('Rendered using {} renderer').format(c.renderer)}">
|
||||
${h.render(c.pull_request.description, renderer=c.renderer, repo_name=c.repo_name, issues_container=c.referenced_desc_issues)}
|
||||
${h.render(c.pull_request.description, renderer=c.renderer, repo_name=c.repo_name, issues_container_callback=c.referenced_desc_issues())}
|
||||
</div>
|
||||
|
||||
<div id="pr-desc-edit" class="input textarea" style="display: none;">
|
||||
|
|
@ -435,7 +435,7 @@
|
|||
</td>
|
||||
<td class="mid td-description">
|
||||
<div class="log-container truncate-wrap">
|
||||
<div class="message truncate" id="c-${commit.raw_id}" data-message-raw="${commit.message}">${h.urlify_commit_message(commit.message, c.repo_name, issues_container=c.referenced_commit_issues)}</div>
|
||||
<div class="message truncate" id="c-${commit.raw_id}" data-message-raw="${commit.message}">${h.urlify_commit_message(commit.message, c.repo_name, issues_container_callback=c.referenced_commit_issues(commit.serialize()))}</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
@ -809,7 +809,7 @@
|
|||
<div class="sidebar-element clear-both">
|
||||
<div class="tooltip right-sidebar-collapsed-state" style="display: none" onclick="toggleSidebar(); return false" title="${_('Referenced Tickets')}">
|
||||
<i class="icon-info-circled"></i>
|
||||
${(len(c.referenced_desc_issues) + len(c.referenced_commit_issues))}
|
||||
${(c.referenced_desc_issues.issues_unique_count + c.referenced_commit_issues.issues_unique_count)}
|
||||
</div>
|
||||
|
||||
<div class="right-sidebar-expanded-state pr-details-title">
|
||||
|
|
@ -822,15 +822,17 @@
|
|||
<table>
|
||||
|
||||
<tr><td><code>${_('In pull request description')}:</code></td></tr>
|
||||
% if c.referenced_desc_issues:
|
||||
% for ticket_dict in sorted(c.referenced_desc_issues):
|
||||
% if c.referenced_desc_issues.issues:
|
||||
|
||||
% for ticket_id, ticket_dict in c.referenced_desc_issues.unique_issues.items():
|
||||
<tr>
|
||||
<td>
|
||||
<a href="${ticket_dict.get('url')}">
|
||||
${ticket_dict.get('id')}
|
||||
<a href="${ticket_dict[0].get('url')}">
|
||||
${ticket_id}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
% endfor
|
||||
% else:
|
||||
<tr>
|
||||
|
|
@ -841,13 +843,14 @@
|
|||
% endif
|
||||
|
||||
<tr><td style="padding-top: 10px"><code>${_('In commit messages')}:</code></td></tr>
|
||||
% if c.referenced_commit_issues:
|
||||
% for ticket_dict in sorted(c.referenced_commit_issues):
|
||||
% if c.referenced_commit_issues.issues:
|
||||
% for ticket_id, ticket_dict in c.referenced_commit_issues.unique_issues.items():
|
||||
<tr>
|
||||
<td>
|
||||
<a href="${ticket_dict.get('url')}">
|
||||
${ticket_dict.get('id')}
|
||||
<a href="${ticket_dict[0].get('url')}">
|
||||
${ticket_id}
|
||||
</a>
|
||||
- ${_ungettext('in %s commit', 'in %s commits', len(ticket_dict)) % (len(ticket_dict))}
|
||||
</td>
|
||||
</tr>
|
||||
% endfor
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue