RRS: record previous version

Record the previous version in RecipeUpgrades, and use it to more
accurately record upgrades where there are multiple versions present at
a given time (common with e.g. kernel recipes).

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
This commit is contained in:
Paul Eggleton 2019-08-20 15:49:13 +12:00
parent d8011bc305
commit cea8a64517
3 changed files with 37 additions and 27 deletions

View File

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.22 on 2019-08-20 02:24
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rrs', '0026_recipeupgrade_grouping'),
]
operations = [
migrations.AddField(
model_name='recipeupgrade',
name='prev_version',
field=models.CharField(blank=True, max_length=100),
),
]

View File

@ -481,6 +481,7 @@ class RecipeUpgrade(models.Model):
filepath = models.CharField(max_length=512, blank=True)
orig_filepath = models.CharField(max_length=512, blank=True)
group = models.ForeignKey(RecipeUpgradeGroup, blank=True, null=True, on_delete=models.SET_NULL)
prev_version = models.CharField(max_length=100, blank=True)
@staticmethod
def get_by_recipe_and_date(recipe, end_date):

View File

@ -121,7 +121,7 @@ oecore_bad_revs = {
"""
Store upgrade into RecipeUpgrade model.
"""
def _save_upgrade(recipesymbol, layerbranch, pv, commit, title, info, filepath, logger, upgrade_type=None, orig_filepath=None):
def _save_upgrade(recipesymbol, layerbranch, pv, commit, title, info, filepath, logger, upgrade_type=None, orig_filepath=None, prev_version=None):
from rrs.models import Maintainer, RecipeUpgrade
maintainer_name = info.split(';')[0]
@ -144,13 +144,15 @@ def _save_upgrade(recipesymbol, layerbranch, pv, commit, title, info, filepath,
upgrade.upgrade_type = upgrade_type
if orig_filepath:
upgrade.orig_filepath = orig_filepath
if prev_version:
upgrade.prev_version = prev_version
upgrade.regroup()
upgrade.save()
"""
Create upgrade receives new recipe_data and cmp versions.
"""
def _create_upgrade(recipe_data, layerbranch, ct, title, info, filepath, logger, pn_recipes, initial=False, orig_filepath=None):
def _create_upgrade(recipe_data, layerbranch, ct, title, info, filepath, logger, initial=False, orig_filepath=None):
from rrs.models import RecipeUpgrade, RecipeSymbol, RecipeUpgradeGroupRule
from bb.utils import vercmp_string
@ -201,29 +203,22 @@ def _create_upgrade(recipe_data, layerbranch, ct, title, info, filepath, logger,
latest_upgrade.version = pv
latest_upgrade.save()
else:
if len(pn_recipes) > 1:
# Check if the "new" version is already in the database
if RecipeUpgrade.objects.filter(recipesymbol=recipesymbol, version=pv).exists():
for prd in pn_recipes:
if prd.getVar('FILE', True) != recipe_data.getVar('FILE', True):
lpv = prd.getVar('PV', True)
(lpvw, _, _) = get_recipe_pv_without_srcpv(lpv,
get_pv_type(lpv))
if lpvw == ppv:
same_pv_upgrade = all_rupgrades.filter(version=pv).order_by('-commit_date').last()
if same_pv_upgrade and \
not all_rupgrades.filter(prev_version=pv, commit_date__gt=same_pv_upgrade.commit_date).exists() \
and \
not all_rupgrades.filter(upgrade_type__in=['R', 'N'], commit_date__gt=same_pv_upgrade.commit_date).exists():
# The "previous" recipe is still present, we won't call this an upgrade
logger.debug('Multiple %s recipes, ignoring apparent version change' % pn)
logger.debug('%s: new version %s already exists' % (pn, pv))
return
upgrade_type = 'U'
if vercmp_result == 1:
if len(pn_recipes) > 1:
logger.debug('Multiple %s recipes, ignoring apparent downgrade' % pn)
return
else:
upgrade_type = 'D'
op = {'U': 'upgrade', 'D': 'downgrade'}[upgrade_type]
logger.debug("%s: detected %s (%s -> %s)" \
" in ct %s." % (pn, op, prev_pv, pv, ct))
_save_upgrade(recipesymbol, layerbranch, pv, ct, title, info, filepath, logger, upgrade_type=upgrade_type, orig_filepath=orig_filepath)
_save_upgrade(recipesymbol, layerbranch, pv, ct, title, info, filepath, logger, upgrade_type=upgrade_type, orig_filepath=orig_filepath, prev_version=prev_pv)
except KeyboardInterrupt:
raise
except Exception as e:
@ -385,15 +380,9 @@ def generate_history(options, layerbranch_id, commit, logger):
recordcommit = commit
fn_data = {}
pn_data = {}
for recipe_data in recipes:
fn = os.path.relpath(recipe_data.getVar('FILE', True), repodir)
fn_data[fn] = recipe_data
pn = recipe_data.getVar('PN', True)
if pn in pn_data:
pn_data[pn].append(recipe_data)
else:
pn_data[pn] = [recipe_data]
seen_pns = []
try:
@ -432,7 +421,7 @@ def generate_history(options, layerbranch_id, commit, logger):
orig_filepath = a
break
_create_upgrade(recipe_data, layerbranch, recordcommit, title,
info, filepath, logger, pn_data[pn], initial=options.initial, orig_filepath=orig_filepath)
info, filepath, logger, initial=options.initial, orig_filepath=orig_filepath)
seen_pns.append(pn)
# Handle recipes that have been moved without it being an upgrade/delete