diff --git a/swh/web/browse/views/release.py b/swh/web/browse/views/release.py index e2a86fbc..b17e45bd 100644 --- a/swh/web/browse/views/release.py +++ b/swh/web/browse/views/release.py @@ -1,165 +1,174 @@ # Copyright (C) 2017-2018 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU Affero General Public License version 3, or any later version # See top-level LICENSE file for more information from django.shortcuts import render from django.utils.safestring import mark_safe from swh.web.common import service from swh.web.common.utils import ( reverse, format_utc_iso_date, get_swh_persistent_id ) from swh.web.common.exc import handle_view_exception from swh.web.browse.browseurls import browse_route from swh.web.browse.utils import ( gen_person_link, gen_revision_link, get_snapshot_context, gen_link, gen_snapshot_link ) @browse_route(r'release/(?P[0-9a-f]+)/', view_name='browse-release') def release_browse(request, sha1_git): """ Django view that produces an HTML display of a SWH release identified by its id. The url that points to it is :http:get:`/browse/release/(sha1_git)/`. """ try: release = service.lookup_release(sha1_git) snapshot_context = None origin_info = None snapshot_id = request.GET.get('snapshot_id', None) origin_type = request.GET.get('origin_type', None) origin_url = request.GET.get('origin_url', None) if not origin_url: origin_url = request.GET.get('origin', None) timestamp = request.GET.get('timestamp', None) visit_id = request.GET.get('visit_id', None) if origin_url: snapshot_context = get_snapshot_context(snapshot_id, origin_type, origin_url, timestamp, visit_id) origin_info = snapshot_context['origin_info'] elif snapshot_id: snapshot_context = get_snapshot_context(snapshot_id) except Exception as exc: return handle_view_exception(request, exc) release_data = {} release_data['author'] = \ gen_person_link(release['author']['id'], release['author']['name'], snapshot_context) release_data['date'] = format_utc_iso_date(release['date']) release_data['id'] = sha1_git release_data['name'] = release['name'] release_data['synthetic'] = release['synthetic'] release_data['target type'] = release['target_type'] if release['target_type'] == 'revision': release_data['target'] = \ gen_revision_link(release['target'], snapshot_context=snapshot_context) elif release['target_type'] == 'content': content_url = \ reverse('browse-content', kwargs={'query_string': 'sha1_git:' + release['target']}) release_data['target'] = gen_link(content_url, release['target']) elif release['target_type'] == 'directory': directory_url = \ reverse('browse-directory', kwargs={'sha1_git': release['target']}) release_data['target'] = gen_link(directory_url, release['target']) elif release['target_type'] == 'release': release_url = \ reverse('browse-release', kwargs={'sha1_git': release['target']}) release_data['target'] = gen_link(release_url, release['target']) - release_note_lines = release['message'].split('\n') + release_note_lines = [] + if release['message']: + release_note_lines = release['message'].split('\n') vault_cooking = None release_target_link = 'Target: ' if release['target_type'] == 'revision': release_target_link += '' # noqa - revision = service.lookup_revision(release['target']) - vault_cooking = { - 'directory_context': True, - 'directory_id': revision['directory'], - 'revision_context': True, - 'revision_id': release['target'] - } + try: + revision = service.lookup_revision(release['target']) + vault_cooking = { + 'directory_context': True, + 'directory_id': revision['directory'], + 'revision_context': True, + 'revision_id': release['target'] + } + except Exception: + pass else: release_target_link += release['target_type'] release_target_link += ' ' + release_data['target'] if snapshot_context: release_data['snapshot id'] = snapshot_context['snapshot_id'] if origin_info: release_url = reverse('browse-release', kwargs={'sha1_git': release['id']}) release_data['context-independent release'] = \ gen_link(release_url, link_text='Browse', link_attrs={'class': 'btn btn-default btn-sm', 'role': 'button'}) release_data['origin id'] = origin_info['id'] release_data['origin type'] = origin_info['type'] release_data['origin url'] = gen_link(origin_info['url'], origin_info['url']) browse_snapshot_link = \ gen_snapshot_link(snapshot_context['snapshot_id'], link_text='Browse', link_attrs={'class': 'btn btn-default btn-sm', 'role': 'button'}) release_data['snapshot'] = browse_snapshot_link swh_rel_id = get_swh_persistent_id('release', sha1_git) show_ids_options = snapshot_context and \ snapshot_context['origin_info'] is not None swh_ids = [ { 'object_type': 'release', 'title': 'Release ' + sha1_git, 'swh_id': swh_rel_id, 'swh_id_url': reverse('browse-swh-id', kwargs={'swh_id': swh_rel_id}), 'show_options': show_ids_options } ] if snapshot_context: snapshot_id = snapshot_context['snapshot_id'] if snapshot_id: swh_snp_id = get_swh_persistent_id('snapshot', snapshot_id) swh_ids.append({ 'object_type': 'snapshot', 'title': 'Snapshot ' + snapshot_id, 'swh_id': swh_snp_id, 'swh_id_url': reverse('browse-swh-id', kwargs={'swh_id': swh_snp_id}), 'show_options': show_ids_options }) + release_note_header = 'None' + if len(release_note_lines) > 0: + release_note_header = release_note_lines[0] + return render(request, 'release.html', {'heading': 'Release', 'swh_object_name': 'Release', 'swh_object_metadata': release_data, 'release_name': release['name'], - 'release_note_header': release_note_lines[0], + 'release_note_header': release_note_header, 'release_note_body': '\n'.join(release_note_lines[1:]), 'release_target_link': mark_safe(release_target_link), 'snapshot_context': snapshot_context, 'show_actions_menu': True, 'breadcrumbs': None, 'vault_cooking': vault_cooking, 'top_right_link': None, 'top_right_link_text': None, 'swh_ids': swh_ids})