Changeset View
Changeset View
Standalone View
Standalone View
swh/web/browse/utils.py
Show First 20 Lines • Show All 752 Lines • ▼ Show 20 Lines | if not sha1_git: | ||||
return None | return None | ||||
content_url = reverse('browse-content', | content_url = reverse('browse-content', | ||||
kwargs={'query_string': 'sha1_git:' + sha1_git}) | kwargs={'query_string': 'sha1_git:' + sha1_git}) | ||||
if not link_text: | if not link_text: | ||||
link_text = content_url | link_text = content_url | ||||
return gen_link(content_url, link_text, link_attrs) | return gen_link(content_url, link_text, link_attrs) | ||||
def get_revision_log_url(revision_id, snapshot_context=None): | def get_revision_log_url(revision_id, snapshot_context=None, path=None): | ||||
""" | """ | ||||
Utility function for getting the URL for a SWH revision log HTML view | Utility function for getting the URL for a SWH revision log HTML view | ||||
(possibly in the context of an origin). | (possibly in the context of an origin). | ||||
Args: | Args: | ||||
revision_id (str): revision identifier the history heads to | revision_id (str): revision identifier the history heads to | ||||
snapshot_context (dict): if provided, generate snapshot-dependent | snapshot_context (dict): if provided, generate snapshot-dependent | ||||
browsing link | browsing link | ||||
Show All 16 Lines | if snapshot_context and snapshot_context['origin_info']: | ||||
query_params=query_params) | query_params=query_params) | ||||
elif snapshot_context: | elif snapshot_context: | ||||
url_args = {'snapshot_id': snapshot_context['snapshot_id']} | url_args = {'snapshot_id': snapshot_context['snapshot_id']} | ||||
revision_log_url = reverse('browse-snapshot-log', | revision_log_url = reverse('browse-snapshot-log', | ||||
kwargs=url_args, | kwargs=url_args, | ||||
query_params=query_params) | query_params=query_params) | ||||
else: | else: | ||||
revision_log_url = reverse('browse-revision-log', | revision_log_url = reverse('browse-revision-log', | ||||
kwargs={'sha1_git': revision_id}) | kwargs={'sha1_git': revision_id}, | ||||
query_params={'path': path}) | |||||
return revision_log_url | return revision_log_url | ||||
def gen_revision_log_link(revision_id, snapshot_context=None, link_text=None, | def gen_revision_log_link(revision_id, snapshot_context=None, link_text=None, | ||||
link_attrs={}): | link_attrs={}): | ||||
""" | """ | ||||
Utility function for generating a link to a SWH revision log HTML view | Utility function for generating a link to a SWH revision log HTML view | ||||
(possibly in the context of an origin) to insert in Django templates. | (possibly in the context of an origin) to insert in Django templates. | ||||
Show All 15 Lines | def gen_revision_log_link(revision_id, snapshot_context=None, link_text=None, | ||||
revision_log_url = get_revision_log_url(revision_id, snapshot_context) | revision_log_url = get_revision_log_url(revision_id, snapshot_context) | ||||
if not link_text: | if not link_text: | ||||
link_text = revision_log_url | link_text = revision_log_url | ||||
return gen_link(revision_log_url, link_text, link_attrs) | return gen_link(revision_log_url, link_text, link_attrs) | ||||
def _format_log_entries(revision_log, per_page, snapshot_context=None): | def format_log_entries(revision_log, per_page, snapshot_context=None): | ||||
revision_log_data = [] | |||||
for i, log in enumerate(revision_log): | |||||
if i == per_page: | |||||
break | |||||
author_name = 'None' | |||||
author_link = 'None' | |||||
if log['author']: | |||||
author_name = log['author']['name'] or log['author']['fullname'] | |||||
author_link = gen_person_link(log['author']['id'], author_name, | |||||
snapshot_context) | |||||
revision_log_data.append( | |||||
{'author': author_link, | |||||
'revision': gen_revision_link(log['id'], True, snapshot_context), | |||||
'message': log['message'], | |||||
'date': format_utc_iso_date(log['date']), | |||||
'directory': log['directory']}) | |||||
return revision_log_data | |||||
def prepare_revision_log_for_display(revision_log, per_page, revs_breadcrumb, | |||||
snapshot_context=None): | |||||
""" | """ | ||||
Utility functions that process raw revision log data for HTML display. | Utility functions that process raw revision log data for HTML display. | ||||
Its purpose is to: | Its purpose is to: | ||||
* add links to relevant SWH browse views | * add links to relevant SWH browse views | ||||
* format date in human readable format | * format date in human readable format | ||||
* truncate the message log | * truncate the message log | ||||
It also computes the data needed to generate the links for navigating back | |||||
and forth in the history log. | |||||
Args: | Args: | ||||
revision_log (list): raw revision log as returned by the SWH web api | revision_log (list): raw revision log as returned by the SWH web api | ||||
per_page (int): number of log entries per page | per_page (int): number of log entries per page | ||||
revs_breadcrumb (str): breadcrumbs of revisions navigated so far, | |||||
in the form 'rev1[/rev2/../revN]'. Each revision corresponds to | |||||
the first one displayed in the HTML view for history log. | |||||
snapshot_context (dict): if provided, generate snapshot-dependent | snapshot_context (dict): if provided, generate snapshot-dependent | ||||
browsing link | browsing link | ||||
""" | """ | ||||
current_rev = revision_log[0]['id'] | revision_log_data = [] | ||||
next_rev = None | for i, log in enumerate(revision_log): | ||||
prev_rev = None | if i == per_page: | ||||
next_revs_breadcrumb = None | break | ||||
prev_revs_breadcrumb = None | author_name = 'None' | ||||
if len(revision_log) == per_page + 1: | author_link = 'None' | ||||
prev_rev = revision_log[-1]['id'] | if log['author']: | ||||
author_name = log['author']['name'] or log['author']['fullname'] | |||||
prev_rev_bc = current_rev | author_link = gen_person_link(log['author']['id'], author_name, | ||||
if snapshot_context: | snapshot_context) | ||||
prev_rev_bc = prev_rev | revision_log_data.append({ | ||||
'author': author_link, | |||||
if revs_breadcrumb: | 'revision': gen_revision_link(log['id'], True, snapshot_context), | ||||
revs = revs_breadcrumb.split('/') | 'message': log['message'], | ||||
next_rev = revs[-1] | 'date': format_utc_iso_date(log['date']), | ||||
if len(revs) > 1: | 'commit_date': format_utc_iso_date(log['committer_date']) | ||||
next_revs_breadcrumb = '/'.join(revs[:-1]) | }) | ||||
if len(revision_log) == per_page + 1: | return revision_log_data | ||||
prev_revs_breadcrumb = revs_breadcrumb + '/' + prev_rev_bc | |||||
else: | |||||
prev_revs_breadcrumb = prev_rev_bc | |||||
return {'revision_log_data': _format_log_entries(revision_log, per_page, | |||||
snapshot_context), | |||||
'prev_rev': prev_rev, | |||||
'prev_revs_breadcrumb': prev_revs_breadcrumb, | |||||
'next_rev': next_rev, | |||||
'next_revs_breadcrumb': next_revs_breadcrumb} | |||||
# list of origin types that can be found in the swh archive | # list of origin types that can be found in the swh archive | ||||
# TODO: retrieve it dynamically in an efficient way instead | # TODO: retrieve it dynamically in an efficient way instead | ||||
# of hardcoding it | # of hardcoding it | ||||
_swh_origin_types = ['git', 'svn', 'deb', 'hg', 'ftp', 'deposit', 'pypi'] | _swh_origin_types = ['git', 'svn', 'deb', 'hg', 'ftp', 'deposit', 'pypi'] | ||||
▲ Show 20 Lines • Show All 281 Lines • Show Last 20 Lines |