summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMattia Rizzolo <mattia@mapreri.org>2015-05-13 19:22:30 +0200
committerHolger Levsen <holger@layer-acht.org>2015-08-15 12:48:52 +0200
commit26b1d8a3cf6655232d03bf4c9688ea1b6009a717 (patch)
treeb023c4744b778acdf23211276490561100140501
parent0bf1f0e447ff18d154394b7e6ac8318aedf00e49 (diff)
downloadjenkins.debian.net-26b1d8a3cf6655232d03bf4c9688ea1b6009a717.tar.xz
reproducible: html_packages: refactor gen_packages_html() to use the new Package class
This include some refactoring that change the interface, mainly: * it does not care anymore about suites/architectures, it always builds for all suites/architectures (it's only 0.122 for one package with no_clean=True) + this allows to remove *a lot* of crappy code * it expects a list of Package instances, no more of strings (package names) * check_package_status() got removed (as incorporated into the class) This breaks quite everything, still need to update all the users of this function.
-rwxr-xr-xbin/reproducible_html_packages.py117
1 files changed, 38 insertions, 79 deletions
diff --git a/bin/reproducible_html_packages.py b/bin/reproducible_html_packages.py
index c55e8cb9..ffc6aece 100755
--- a/bin/reproducible_html_packages.py
+++ b/bin/reproducible_html_packages.py
@@ -62,41 +62,6 @@ def sizeof_fmt(num):
num /= 1024.0
return str(int(round(float("%f" % num), 0))) + "%s" % ('Yi')
-def check_package_status(package, suite, nocheck=False):
- """
- This returns a tuple containing status, version and build_date of the last
- version of the package built by jenkins CI
- """
- try:
- query = ('SELECT r.status, r.version, r.build_date, s.notify_maintainer ' +
- 'FROM results AS r JOIN sources AS s ON r.package_id=s.id ' +
- 'WHERE s.name="{pkg}" ' +
- 'AND s.suite="{suite}"').format(pkg=package, suite=suite)
- result = query_db(query)[0]
- except IndexError:
- query = 'SELECT version, notify_maintainer ' + \
- 'FROM sources WHERE name="{pkg}" AND suite="{suite}"'
- query = query.format(pkg=package, suite=suite)
- try:
- result = query_db(query)[0]
- if result:
- result = ('untested', str(result[0]), False, result[1])
- except IndexError:
- if nocheck:
- return False
- print_critical_message('This query produces no results: ' + query +
- '\nThis means there is no available package with the name '
- + package + '.')
- raise
- status = str(result[0])
- version = str(result[1])
- notify_maint = '⚑' if int(result[3]) == 1 else ''
- if result[2]:
- build_date = 'at ' + str(result[2]) + ' UTC'
- else:
- build_date = '<span style="color:red;font-weight:bold;">UNTESTED</span>'
- return (status, version, build_date, notify_maint)
-
def gen_status_link_icon(status, icon, suite, arch):
html = ''
@@ -221,57 +186,51 @@ def gen_suites_links(package, suite):
return tab*5 + (tab*7).join(html.splitlines(True))
-def gen_packages_html(packages, suite=None, arch=None, no_clean=False, nocheck=False):
+def gen_packages_html(packages, no_clean=False):
"""
- generate the /rb-pkg/package.html page
- packages should be a list
- If suite and/or arch is not passed, then build that packages for all suites
- nocheck is for internal use
+ generate the /rb-pkg/package.html pages.
+ packages should be a list of Package objects.
"""
total = len(packages)
log.debug('Generating the pages of ' + str(total) + ' package(s)')
- if not nocheck and (not suite or not arch):
- nocheck = True
- if nocheck and (not suite or not arch):
- for lsuite in SUITES:
- for larch in ARCHS:
- gen_packages_html(packages, lsuite, larch, True, True)
- if not no_clean:
- purge_old_pages()
- return
- for pkg in sorted(packages):
- pkg = str(pkg)
- try:
- pkgstatus = check_package_status(pkg, suite, nocheck)
- status, version, build_date, notify_maint = pkgstatus
- except TypeError: # the package is not in the checked suite
- continue
- log.debug('Generating the page of ' + pkg + '/' + suite + '@' + version +
- ' built at ' + build_date)
+ for package in sorted(packages, key=lambda x: x.name):
+ assert isinstance(package, Package)
+ pkg = package.name
+ for suite in SUITES:
+ for arch in ARCHS:
+ status = package.get_status(suite, arch)
+ version = package.get_tested_version(suite, arch)
+ build_date = package.get_build_date(suite, arch)
+ if status == False: # the package is not in the checked suite
+ continue
+ log.debug('Generating the page of ' + pkg + '/' + suite + '@' +
+ version + ' built at ' + build_date)
- links, default_view = gen_extra_links(pkg, version, suite, arch, status)
- suites_links = gen_suites_links(pkg, suite)
- status, icon = join_status_icon(status, pkg, version)
- status = gen_status_link_icon(status, icon, suite, arch)
+ links, default_view = gen_extra_links(pkg, version, suite, arch, status)
+ suites_links = gen_suites_links(pkg, suite)
+ status, icon = join_status_icon(status, pkg, version)
+ status = gen_status_link_icon(status, icon, suite, arch)
- html = html_package_page.substitute(package=pkg,
- suite=suite,
- status=status,
- version=version,
- build_time=build_date,
- links=links,
- notify_maintainer=notify_maint,
- suites_links=suites_links,
- default_view=default_view)
- destfile = RB_PKG_PATH + '/' + suite + '/' + arch + '/' + pkg + '.html'
- desturl = REPRODUCIBLE_URL + RB_PKG_URI + '/' + suite + '/' + \
- arch + '/' + pkg + '.html'
- title = pkg + ' - reproducible build results'
- write_html_page(title=title, body=html, destfile=destfile, suite=suite,
- noheader=True, noendpage=True)
- log.debug("Package page generated at " + desturl)
+ html = html_package_page.substitute(
+ package=pkg,
+ suite=suite,
+ status=status,
+ version=version,
+ build_time=build_date,
+ links=links,
+ notify_maintainer=package.notify_maint,
+ suites_links=suites_links,
+ default_view=default_view)
+ destfile = RB_PKG_PATH + '/' + suite + '/' + arch + '/' + pkg + '.html'
+ desturl = REPRODUCIBLE_URL + RB_PKG_URI + '/' + suite + '/' + \
+ arch + '/' + pkg + '.html'
+ title = pkg + ' - reproducible build results'
+ write_html_page(title=title, body=html, destfile=destfile,
+ noheader=True, noendpage=True)
+ log.debug("Package page generated at " + desturl)
if not no_clean:
- purge_old_pages() # housekeep is always good
+ purge_old_pages() # housekeep is always good
+
def gen_all_rb_pkg_pages(suite='unstable', arch='amd64', no_clean=False):
query = 'SELECT name FROM sources WHERE suite="%s" AND architecture="%s"' % (suite, arch)