74 lines
2.7 KiB
Python
74 lines
2.7 KiB
Python
import os
|
|
import re
|
|
import json
|
|
import datetime
|
|
import gzip
|
|
|
|
from django.shortcuts import render
|
|
from django.conf import settings
|
|
from django.http import HttpResponse
|
|
|
|
import changelog
|
|
|
|
# workaround for thread import lock problem, http://bugs.python.org/issue7980
|
|
import time
|
|
time.strptime('1984', '%Y') # we do this to force lib loading, instead of it happening lazily when changelog calls tzparse later
|
|
|
|
def trac_links(text):
|
|
# changeset links
|
|
text = re.sub(r'\[(\d+)\]', r'<a href="https://wiki.tools.ietf.org/tools/ietfdb/changeset/\1">[\1]</a>', text)
|
|
# issue links
|
|
text = re.sub(r'#(\d+)', r'<a href="https://wiki.tools.ietf.org/tools/ietfdb/ticket/\1">#\1</a>', text)
|
|
return text
|
|
|
|
|
|
def release(request, version=None):
|
|
entries = {}
|
|
if os.path.exists(settings.CHANGELOG_PATH):
|
|
log_entries = changelog.parse(settings.CHANGELOG_PATH)
|
|
else:
|
|
return HttpResponse("Error: changelog file %s not found" % settings.CHANGELOG_PATH)
|
|
next = None
|
|
for entry in log_entries:
|
|
if next:
|
|
next.prev = entry
|
|
entry.next = next
|
|
next = entry
|
|
entries = dict((entry.version, entry) for entry in log_entries)
|
|
if version == None or version not in entries:
|
|
version = log_entries[0].version
|
|
entries[version].logentry = trac_links(entries[version].logentry.strip('\n'))
|
|
|
|
code_coverage_url = None
|
|
code_coverage_time = None
|
|
if os.path.exists(settings.TEST_CODE_COVERAGE_REPORT_FILE) and version == log_entries[0].version:
|
|
code_coverage_url = settings.TEST_CODE_COVERAGE_REPORT_URL
|
|
code_coverage_time = datetime.datetime.fromtimestamp(os.path.getmtime(settings.TEST_CODE_COVERAGE_REPORT_FILE))
|
|
|
|
coverage = {}
|
|
if os.path.exists(settings.TEST_COVERAGE_MASTER_FILE):
|
|
if settings.TEST_COVERAGE_MASTER_FILE.endswith(".gz"):
|
|
with gzip.open(settings.TEST_COVERAGE_MASTER_FILE, "rb") as file:
|
|
coverage_data = json.load(file)
|
|
else:
|
|
with open(settings.TEST_COVERAGE_MASTER_FILE) as file:
|
|
coverage_data = json.load(file)
|
|
if version in coverage_data:
|
|
coverage = coverage_data[version]
|
|
for key in coverage:
|
|
if "coverage" in coverage[key]:
|
|
coverage[key]["percentage"] = coverage[key]["coverage"] * 100
|
|
|
|
return render(request, 'release/release.html',
|
|
{
|
|
'releases': log_entries,
|
|
'version': version,
|
|
'entry': entries[version],
|
|
'coverage': coverage,
|
|
'code_coverage_url': code_coverage_url,
|
|
'code_coverage_time': code_coverage_time,
|
|
} )
|
|
|
|
|
|
|