rrs_distros: support maintenance plans and remove poky hardcoding

Remove hardcoded references to the poky repository, and process
layerbranches for all enabled maintenance plans.

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
This commit is contained in:
Paul Eggleton 2018-03-01 17:22:39 +13:00
parent 034d66ab5a
commit d4c400f7bf

View File

@ -14,7 +14,7 @@ import logging
from datetime import datetime from datetime import datetime
sys.path.insert(0, os.path.realpath(os.path.join(os.path.dirname(__file__)))) sys.path.insert(0, os.path.realpath(os.path.join(os.path.dirname(__file__))))
from common import common_setup, update_repo, load_recipes, \ from common import common_setup, load_recipes, \
get_pv_type, get_logger, DryRunRollbackException get_pv_type, get_logger, DryRunRollbackException
common_setup() common_setup()
from layerindex import utils from layerindex import utils
@ -29,20 +29,13 @@ if not fetchdir:
logger.error("Please set LAYER_FETCH_DIR in settings.py") logger.error("Please set LAYER_FETCH_DIR in settings.py")
sys.exit(1) sys.exit(1)
update_repo(settings.LAYER_FETCH_DIR, 'poky', settings.POKY_REPO_URL,
True, logger)
# setup bitbake path # setup bitbake path
bitbakepath = os.path.join(fetchdir, 'bitbake') bitbakepath = os.path.join(fetchdir, 'bitbake')
sys.path.insert(0, os.path.join(bitbakepath, 'lib')) sys.path.insert(0, os.path.join(bitbakepath, 'lib'))
# setup poky path
pokypath = os.path.join(fetchdir, 'poky')
sys.path.insert(0, os.path.join(pokypath, 'meta', 'lib'))
from layerindex.models import Recipe, LayerBranch from layerindex.models import Recipe, LayerBranch
from rrs.models import RecipeDistro from rrs.models import RecipeDistro, MaintenancePlan
""" """
Searches the recipe's package in major distributions. Searches the recipe's package in major distributions.
@ -101,46 +94,56 @@ if __name__=="__main__":
options, args = parser.parse_args(sys.argv) options, args = parser.parse_args(sys.argv)
logger.setLevel(options.loglevel) logger.setLevel(options.loglevel)
maintplans = MaintenancePlan.objects.filter(updates_enabled=True)
if not maintplans.exists():
logger.error('No enabled maintenance plans found')
sys.exit(1)
logger.debug("Starting recipe distros update ...") logger.debug("Starting recipe distros update ...")
try: try:
origsyspath = sys.path
with transaction.atomic(): with transaction.atomic():
for layerbranch in LayerBranch.objects.all(): for maintplan in maintplans:
(tinfoil, d, recipes) = load_recipes(layerbranch, bitbakepath, for item in maintplan.maintenanceplanlayerbranch_set.all():
fetchdir, settings, logger) layerbranch = item.layerbranch
sys.path = origsyspath
if not recipes: (tinfoil, d, recipes) = load_recipes(layerbranch, bitbakepath,
tinfoil.shutdown() fetchdir, settings, logger)
continue
from oe import distro_check
logger.debug("Downloading distro's package information ...")
distro_check.create_distro_packages_list(fetchdir, d)
pkglst_dir = os.path.join(fetchdir, "package_lists")
RecipeDistro.objects.filter(recipe__layerbranch = layerbranch).delete()
for recipe_data in recipes:
pn = recipe_data.getVar('PN', True)
try: try:
recipe = Recipe.objects.get(pn = pn, layerbranch = layerbranch) if not recipes:
except: continue
logger.warn('%s: layer branch %s, NOT found' % (pn,
str(layerbranch)))
continue
distro_info = search_package_in_distros(pkglst_dir, recipe, recipe_data) utils.setup_core_layer_sys_path(settings, layerbranch.branch.name)
for distro, alias in distro_info.items():
recipedistro = RecipeDistro()
recipedistro.recipe = recipe
recipedistro.distro = distro
recipedistro.alias = alias
recipedistro.save()
logger.debug('%s: layer branch %s, add distro %s alias %s' % (pn,
str(layerbranch), distro, alias))
tinfoil.shutdown() from oe import distro_check
logger.debug("Downloading distro's package information ...")
distro_check.create_distro_packages_list(fetchdir, d)
pkglst_dir = os.path.join(fetchdir, "package_lists")
RecipeDistro.objects.filter(recipe__layerbranch = layerbranch).delete()
for recipe_data in recipes:
pn = recipe_data.getVar('PN', True)
try:
recipe = Recipe.objects.get(pn = pn, layerbranch = layerbranch)
except:
logger.warn('%s: layer branch %s, NOT found' % (pn,
str(layerbranch)))
continue
distro_info = search_package_in_distros(pkglst_dir, recipe, recipe_data)
for distro, alias in distro_info.items():
recipedistro = RecipeDistro()
recipedistro.recipe = recipe
recipedistro.distro = distro
recipedistro.alias = alias
recipedistro.save()
logger.debug('%s: layer branch %s, add distro %s alias %s' % (pn,
str(layerbranch), distro, alias))
finally:
tinfoil.shutdown()
if options.dry_run: if options.dry_run:
raise DryRunRollbackException raise DryRunRollbackException
except DryRunRollbackException: except DryRunRollbackException: