<%inherit file="master.html"/> <%namespace name="json" module="json"/> <% from urllib.parse import quote, urljoin from bodhi.server import models from bodhi.server.config import config install_command = update.install_command %> <%block name="pagetitle"> ${update.alias} — ${update.type} update for ${update.get_title(amp=True,beautify=True) | h} — Fedora Updates System <% update.bugs.sort(key = lambda x: x.bug_id) %> <%block name="css"> ${parent.css()} <% actions = {} if can_edit and update.release.composed_by_bodhi: if not update.locked: if not update.pushed: if update.request is None: if update.status.value != 'testing' and update.signed: actions['push to testing'] = True else: actions['revoke'] = True elif update.pushed and (update.status.value != 'stable' or (update.status.value == 'stable' and 'releng' in [group.name for group in request.identity.groups])): if update.request: actions['revoke'] = True actions['unpush'] = True if update.meets_testing_requirements and not update.request: actions['push to stable'] = True elif can_edit and update.status.value == 'testing' and update.test_gating_status.value == 'failed': actions['unpush'] = True %>
% if can_edit and (not update.locked and update.status.value != 'stable'): Edit % elif update.locked and update.date_locked: Locked % endif ${self.fragments.status_text(update)} % if actions: % endif
% if update.type: ${self.util.type2icon(update.type) | n} % endif % if update.critpath_groups:
% elif update.critpath:
% endif

${update.get_title(amp=True,nvr=True,beautify=True) | h}

${update.alias} created by ${update['user']['name']} ${self.util.age(update['date_submitted'])} for ${update['release']['long_name']}
% if update.notes: ${self.util.markup(update.notes) | n} % endif % if not 'unspecified' in update.suggest:

% if 'logout' in update.suggest:

Logout Required
After installing this update it is required that you logout of your current user session and log back in to ensure the changes supplied by this update are applied properly. % elif 'reboot' in update.suggest:
Reboot Required
After installing this update it is required that you reboot your system to ensure the changes supplied by this update are applied properly. % endif

% endif % if install_command:

How to install

Updates may require up to 24 hours to propagate to mirrors. If the following command doesn't work, please retry later:

${install_command}
% endif
% for comment in update.comments:
${self.fragments.comment(comment, display_update=False)}
% endfor

% if request.identity:
<% help_content = "Comments support Fedora-Flavored Markdown" if request.registry.settings.get('privacy_link'): privacy_link = request.registry.settings.get('privacy_link') help_content = help_content + "

Comments are governed under this privacy policy.".format(privacy_link) %>
${self.fragments.karma(-1)}
${self.fragments.karma(0)}
${self.fragments.karma(1)}
Karma: Is the update generally functional?
% if update.bugs:
${self.fragments.karma(-1)}
${self.fragments.karma(0)}
${self.fragments.karma(1)}
Bugs
% for bug in update.bugs:
${self.util.bug_link(bug) | n}
% endfor % endif % if update.full_test_cases:
${self.fragments.karma(-1)}
${self.fragments.karma(0)}
${self.fragments.karma(1)}
Test Cases
% for test in update.full_test_cases:
${self.util.testcase_link(test) | n}
% endfor % endif
% else:

% if request.matched_route: Please login to add feedback. % else: Please login to add feedback. % endif

%endif
% if update.release.state == models.ReleaseState.frozen and (update.status == models.UpdateStatus.pending or update.status == models.UpdateStatus.testing):
Frozen release
This update will not be pushed to stable until freeze is lifted from ${update.release.long_name}.
% endif
Metadata
% if update.type:
Type
${self.util.type2icon(update.type) | n} ${update.type.value}
% endif % if update.severity and update.severity.value != 'unspecified':
Severity
${update.severity.value}
% endif
Karma
${self.fragments.karma(update.karma, show_digit=True, show_details=update._composite_karma)}
% if update.signed:
Signed
% endif % if update.content_type:
Content Type
${update.content_type.description | n}
% endif
% if request.registry.settings.get('test_gating.required'):
% if request.registry.settings.get('test_gating.url'): Test Gating % else: Test Gating % endif
% if ci_allowed and update.test_gating_status == models.TestGatingStatus.failed and update.status == models.UpdateStatus.testing and self.util.can_trigger_tests(update):
Re-Trigger Tests
% endif % if ci_allowed and self.util.can_waive_test_results(update): % endif
% endif
Builds
${len(update.builds)} % if request.identity and update.from_tag: ${update.from_tag} % endif
% for build in update.builds: <% koji_web_url = request.registry.settings.get('koji_web_url').strip('/') + '/' build_url = urljoin(koji_web_url, 'search?terms='+build.nvr+'&type=build&match=exact') %> % endfor
Settings
% if update.unstable_karma:
Unstable by Karma
${update.unstable_karma}
% endif
Stable by Karma
% if update.autokarma is True and update.stable_karma: ${update.stable_karma} % else: disabled % endif
Stable by Time
% if update.autotime is True and update.stable_days is not None: ${update.stable_days} days % else: disabled % endif
Dates
submitted
${self.util.age(update.date_submitted)}
% if update.date_testing:
in testing
${self.util.age(update.date_testing)}
% endif % if update.date_stable:
in stable
${self.util.age(update.date_stable)}
% endif % if update.days_to_stable and update.status.value == 'testing':
days to stable
${str(update.days_to_stable)}
% endif % if update.date_modified:
modified
${self.util.age(update.date_modified)}
% endif % if update.date_approved:
approved
${self.util.age(update.date_approved)}
% endif
% if update.bugs:
% for bug in update.bugs:
${self.util.bug_link(bug) | n}
${self.fragments.karma(update.get_bug_karma(bug)[0], show_digit=True, zero_thumbsup=False)}
${self.fragments.karma(update.get_bug_karma(bug)[1], show_digit=True, zero_thumbsup=True)}
% endfor
% endif
% for build in update.builds:
% if build.signed: % endif
<% koji_web_url = request.registry.settings.get('koji_web_url').strip('/') + '/' build_url = urljoin(koji_web_url, 'search?terms='+quote(build.nvr)+'&type=build&match=exact') %> ${build.nvr}
% if can_edit: % if build.override: % else: % endif % endif
% endfor

Automated Test Results

% if update.test_gating_status == models.TestGatingStatus.failed: % endif
% if update.test_cases:

Test Cases

% for test in update.full_test_cases: % endfor
${self.fragments.karma(update.get_testcase_karma(test)[0], show_digit=True, zero_thumbsup=False)} ${self.fragments.karma(update.get_testcase_karma(test)[1], show_digit=True, zero_thumbsup=True)} ${self.util.testcase_link(test) | n}
% endif
% if self.util.can_waive_test_results(update): % endif <%block name="javascript"> ${parent.javascript()}