pull-requests: fixed multiple repetitions of referenced tickets in pull requests summary sidebar.

This commit is contained in:
Milka Kuzminski 2021-03-11 22:20:02 +01:00
parent 2637470cf8
commit ce1015425e
3 changed files with 57 additions and 23 deletions

View file

@ -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))

View file

@ -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>

View file

@ -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