summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbin/reproducible_html_packages.py106
-rw-r--r--mustache-templates/reproducible/package_suitearch_details.mustache8
-rw-r--r--mustache-templates/reproducible/package_suitearch_section.mustache5
3 files changed, 94 insertions, 25 deletions
diff --git a/bin/reproducible_html_packages.py b/bin/reproducible_html_packages.py
index b058827f..2270ef9c 100755
--- a/bin/reproducible_html_packages.py
+++ b/bin/reproducible_html_packages.py
@@ -53,27 +53,64 @@ def get_buildlog_links_context(package, eversion, suite, arch):
return context
-def get_dbd_link_context(package, eversion, suite, arch, status):
-
- dbd = DBD_PATH + '/' + suite + '/' + arch + '/' + package + '_' + \
- eversion + '.diffoscope.html'
- dbdtxt = DBDTXT_PATH + '/' + suite + '/' + arch + '/' + package + '_' + \
- eversion + '.diffoscope.txt.gz'
- dbd_url = DBD_URI + '/' + suite + '/' + arch + '/' + package + '_' + \
+def get_dbd_links(package, eversion, suite, arch):
+ """Returns dictionary of links to diffoscope pages.
+
+ dictionary keys:
+ dbd_uri -- included only if file for formatted diffoscope results exists
+ dbdtxt_uri -- included only if file for unformatted diffoscope results
+ exists
+ dbd_page_uri -- included only if file for formatted diffoscope results
+ (dbd_uri) exists. This uri is a package page with diffoscope
+ results in main iframe by default.
+ dbd_page_file -- always returned, check existence of dbd_uri to know whether
+ it this file is valid
+ """
+ dbd_file = os.path.join(DBD_PATH, suite, arch, package + '_' + eversion
+ + '.diffoscope.html')
+ dbdtxt_file = os.path.join(DBDTXT_PATH, suite, arch, package + '_' + eversion
+ + '.diffoscope.txt.gz')
+ dbd_page_file = os.path.join(RB_PKG_PATH, suite, arch, package,
+ 'diffoscope.html')
+ dbd_uri = DBD_URI + '/' + suite + '/' + arch + '/' + package + '_' + \
eversion + '.diffoscope.html'
- dbdtxt_url = DBDTXT_URI + '/' + suite + '/' + arch + '/' + package + '_' + \
+ dbdtxt_uri = DBDTXT_URI + '/' + suite + '/' + arch + '/' + package + '_' + \
eversion + '.diffoscope.txt'
-
- context = {}
- if os.access(dbd, os.R_OK):
- context['dbd_url'] = dbd_url
- if os.access(dbdtxt, os.R_OK):
- context['dbdtxt_url'] = dbdtxt_url
+ dbd_page_uri = RB_PKG_URI + '/' + suite + '/' + arch + '/' + package + \
+ '/diffoscope.html'
+ links = {}
+ # only return dbd_uri and dbdtext_uri if they exist
+ if os.access(dbd_file, os.R_OK):
+ links['dbd_uri'] = dbd_uri
+ links['dbd_page_uri'] = dbd_page_uri
+ if os.access(dbdtxt_file, os.R_OK):
+ links['dbdtxt_uri'] = dbdtxt_uri
+
+ # always return dbd_page_file, because we might need to delete it
+ links['dbd_page_file'] = dbd_page_file
+ return links
+
+
+def get_and_clean_dbd_links(package, eversion, suite, arch, status):
+ links = get_dbd_links(package, eversion, suite, arch)
+
+ dbd_links = {}
+ if 'dbd_uri' in links:
+ dbd_links = {
+ 'dbd_page_file': links['dbd_page_file'],
+ 'dbd_page_uri': links['dbd_page_uri'],
+ 'dbd_uri': links['dbd_uri'],
+ }
else:
if status == 'unreproducible' and not args.ignore_missing_files:
log.critical(DEBIAN_URL + '/' + suite + '/' + arch + '/' + package +
' is unreproducible, but without diffoscope output.')
- return context, dbd_url
+ # if there are no diffoscope results, we want to remove the old package
+ # page used to display diffoscope results
+ if os.access(links['dbd_page_file'], os.R_OK):
+ os.remove(links['dbd_page_file'])
+
+ return dbd_links
def gen_suitearch_details(package, version, suite, arch, status, spokenstatus,
@@ -97,10 +134,14 @@ def gen_suitearch_details(package, version, suite, arch, status, spokenstatus,
context['build_date'] = build_date
# Get diffoscope differences context
- dbd = get_dbd_link_context(package, eversion, suite, arch, status)
- if dbd[0]:
- context['dbd'] = dbd[0]
- default_view = default_view if default_view else dbd[1]
+ dbd_links = get_dbd_links(package, eversion, suite, arch)
+ dbd_uri = dbd_links.get('dbd_uri', '')
+ if dbd_uri:
+ context['dbd'] = {
+ 'dbd_page_uri': dbd_links['dbd_page_uri'],
+ 'dbdtxt_uri': dbd_links.get('dbdtxt_uri', ''),
+ }
+ default_view = default_view if default_view else dbd_uri
# Get buildinfo context
if pkg_has_buildinfo(package, version, suite, arch):
@@ -200,6 +241,8 @@ def gen_suitearch_section(package, current_suite, current_arch):
suitearch_details_html, default_view = gen_suitearch_details(
package.name, version, s, a, status, spokenstatus, build_date)
+ dbd_links = get_dbd_links(package.name, strip_epoch(version), s, a)
+ dbd_page_uri = dbd_links.get('dbd_page_uri', '')
suites.append({
'status': status,
'version': version,
@@ -213,6 +256,7 @@ def gen_suitearch_section(package, current_suite, current_arch):
'current_suitearch': s == current_suite and a == current_arch,
'package_uri': package_uri,
'suitearch_details_html': suitearch_details_html,
+ 'dbd_page_uri': dbd_page_uri
})
if len(suites):
@@ -316,8 +360,7 @@ def gen_packages_html(packages, no_clean=False):
'default_view': default_view,
})
- destfile = RB_PKG_PATH + '/' + suite + '/' + arch + '/' + \
- pkg + '.html'
+ destfile = os.path.join(RB_PKG_PATH, suite, arch, pkg + '.html')
desturl = REPRODUCIBLE_URL + RB_PKG_URI + '/' + suite + \
'/' + arch + '/' + pkg + '.html'
title = pkg + ' - reproducible builds result'
@@ -325,6 +368,27 @@ def gen_packages_html(packages, no_clean=False):
no_header=True, noendpage=True,
left_nav_html=navigation_html)
log.debug("Package page generated at " + desturl)
+
+ # Optionally generate a page in which the main iframe shows the
+ # diffoscope results by default. Needed for navigation between
+ # diffoscope pages for different suites/archs
+ eversion = strip_epoch(version)
+ dbd_links = get_and_clean_dbd_links(pkg, eversion, suite, arch,
+ status)
+ # only generate the diffoscope page if diffoscope results exist
+ if 'dbd_uri' in dbd_links:
+ body_html = renderer.render(package_page_template, {
+ 'default_view': dbd_links['dbd_uri'],
+ })
+ destfile = dbd_links['dbd_page_file']
+ desturl = REPRODUCIBLE_URL + "/" + dbd_links['dbd_page_uri']
+ title = "{} ({}) diffoscope results in {}/{}".format(
+ pkg, version, suite, arch)
+ write_html_page(title=title, body=body_html, destfile=destfile,
+ no_header=True, noendpage=True,
+ left_nav_html=navigation_html)
+ log.debug("Package diffoscope page generated at " + desturl)
+
if not no_clean:
purge_old_pages() # housekeep is always good
diff --git a/mustache-templates/reproducible/package_suitearch_details.mustache b/mustache-templates/reproducible/package_suitearch_details.mustache
index ac74be56..90a760a7 100644
--- a/mustache-templates/reproducible/package_suitearch_details.mustache
+++ b/mustache-templates/reproducible/package_suitearch_details.mustache
@@ -8,13 +8,13 @@
{{#dbd}}
<li>
<div>
- <a href="{{dbd_url}}" title="Show: formatted diffoscope results" target="main">
+ <a href="{{dbd_page_uri}}" title="Show: formatted diffoscope results">
<img src="/static/diffoscope-logo.png" alt="diffoscope logo" />
differences
</a>
- {{#dbdtxt_url}}
- <a href="{{dbdtxt_url}}" target="main">(txt)</a>
- {{/dbdtxt_url}}
+ {{#dbdtxt_uri}}
+ <a href="{{dbdtxt_uri}}" target="main">(txt)</a>
+ {{/dbdtxt_uri}}
</div>
</li>
{{/dbd}}
diff --git a/mustache-templates/reproducible/package_suitearch_section.mustache b/mustache-templates/reproducible/package_suitearch_section.mustache
index d8ac5304..d98c5792 100644
--- a/mustache-templates/reproducible/package_suitearch_section.mustache
+++ b/mustache-templates/reproducible/package_suitearch_section.mustache
@@ -21,6 +21,11 @@
{{#current_suitearch}}
{{version}} in <a href="/debian/{{suite}}/{{arch}}/" title="Go to: summary of all tests for {{arch}}/{{suite}}" target="_parent">{{suite}}</a>
{{/current_suitearch}}
+ {{#dbd_page_uri}}{{^current_suitearch}}
+ <a href="{{dbd_page_uri}}" class="diff-link" title="Show: formatted diffoscope results">
+ <img src="/static/diffoscope-logo.png" alt="diffoscope logo" />
+ </a>
+ {{/current_suitearch}}{{/dbd_page_uri}}
{{{suitearch_details_html}}}
</li>
{{/suites}}