euscanwww: Added feed for stabilization candidates. Still a prototype though

Signed-off-by: volpino <fox91@anche.no>
This commit is contained in:
volpino
2013-02-26 09:33:25 +01:00
parent 4b84dd54b5
commit c55d09a031
8 changed files with 323 additions and 17 deletions

View File

@ -2,7 +2,7 @@ import os.path
import re
from datetime import datetime, timedelta
from gentoolkit.package import Package
from dateutil.parser import parse
from dateutil.parser import parse
from djeuscan.processing import FakeLogger
from djeuscan.models import Version
@ -10,22 +10,28 @@ from djeuscan.models import Version
def get_version_date(version, date_limit):
"""
Returns the datetime when the version was added to Portage, if less than date_limit
Returns the datetime when the version was added to Portage,
if less than date_limit
"""
changelog_path = os.path.join(os.path.dirname(version.ebuild_path), "ChangeLog")
changelog_path = os.path.join(
os.path.dirname(version.ebuild_path),
"ChangeLog"
)
if not os.path.exists(changelog_path):
return
with open(changelog_path) as changelog:
for line in changelog:
match = re.match(r"^\*([^\(]+) \((\d\d \w\w\w \d\d\d\d)\)\s*$", line)
match = re.match(
r"^\*([^\(]+) \((\d\d \w\w\w \d\d\d\d)\)\s*$", line
)
if match:
version_date = parse(match.group(2)).date()
if version_date < date_limit:
return version_date
def stabilization_candidates(date_limit=None, logger=None):
def stabilization_candidates(days_to_candidate=30, logger=None):
"""
Collect stabilization candidates
"""
@ -33,25 +39,28 @@ def stabilization_candidates(date_limit=None, logger=None):
if logger is None:
logger = FakeLogger()
if date_limit is None:
date_limit = (datetime.utcnow() - timedelta(days=30)).date()
date_diff = (datetime.utcnow() - timedelta(days=days_to_candidate))
date_limit = date_diff.date()
logger.info("Starting collecting stabilization candidates - date_limit=%s", str(date_limit))
logger.info("Collecting stabilization candidates - date_limit=%s",
str(date_limit))
# Set all versions to not be stabilization_candidates
#Version.objects.update(stabilization_candidate=False)
# For every version check if it's unstable.
# If it is then check if can be a stabilization candidate
for version in Version.objects.filter(overlay='gentoo').exclude(version='9999').exclude(version='99999999'):
versions = Version.objects.filter(overlay='gentoo')\
.exclude(version='9999').exclude(version='99999999')
for version in versions:
pkg = Package(version.cpv())
keywords = pkg.environment("KEYWORDS").split()
if all([x.startswith("~") for x in keywords]):
version_date = get_version_date(version, date_limit)
if version_date:
logger.info('+ [s] %s @ %s', version, version_date)
# XXX: What should we save? A flag and version_date? Just the date?
#version.stabilization_candidate = True
#version.save()
# XXX: What should we save? A flag and the date?Just the date?
version.stabilization_candidate = version_date
version.save()
logger.info("Finished collecting stabilization candidates")