rrs_upgrade_history: improve checkout logic

* Consolidate the code for checking out a repository, using the newly
  added utils.checkout_repo() function
* Check out a layer's dependencies, not just the layer itself
* Only check out if the desired revision isn't already checked out
  (mostly useful for bitbake which we would otherwise be checking out
  much more frequently than necessary since it may not have changed
  even if we've moved to a new commit in the layer).

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
This commit is contained in:
Paul Eggleton 2018-04-06 17:19:22 +12:00
parent 7343484695
commit 3a3c9f3d02

View File

@ -153,6 +153,32 @@ def _get_recipes_filenames(ct, repodir, layerdir, logger):
return ct_files
def checkout_layer_deps(layerbranch, commit, fetchdir, logger):
""" Check out the repositories for a layer and its dependencies """
# Some layers will be in the same repository, so we only want to check those out once
done_repos = []
def checkout_layer(lb, lcommit=None, lcommitdate=None, force=False):
urldir = str(lb.layer.get_fetch_dir())
repodir = os.path.join(fetchdir, urldir)
if not repodir in done_repos:
if not lcommit:
lcommit = utils.runcmd('git rev-list -1 --before="%s" origin/master' % lcommitdate, repodir, logger=logger).strip()
utils.checkout_repo(repodir, lcommit, logger, force)
done_repos.append(repodir)
# We "force" here because it's almost certain we'll be checking out a
# different revision for the layer itself
checkout_layer(layerbranch, commit, force=True)
layer_urldir = str(layerbranch.layer.get_fetch_dir())
layer_repodir = os.path.join(fetchdir, layer_urldir)
commitdate = utils.runcmd("git show -s --format=%ci", layer_repodir, logger=logger)
for dep in layerbranch.get_recursive_dependencies():
checkout_layer(dep, lcommitdate=commitdate)
return commitdate
def generate_history(options, layerbranch_id, commit, logger):
from layerindex.models import LayerBranch
from rrs.models import Release
@ -168,9 +194,7 @@ def generate_history(options, layerbranch_id, commit, logger):
repodir = os.path.join(fetchdir, urldir)
layerdir = os.path.join(repodir, str(layerbranch.vcs_subdir))
utils.runcmd("git checkout %s" % commit,
repodir, logger=logger)
utils.runcmd("git clean -dfx", repodir, logger=logger)
commitdate = checkout_layer_deps(layerbranch, commit, fetchdir, logger)
if options.initial:
fns = None
@ -187,11 +211,8 @@ def generate_history(options, layerbranch_id, commit, logger):
# Branch name, need to check out detached
bitbake_rev = 'origin/%s' % bitbake_rev
else:
commitdate = utils.runcmd("git show -s --format=%ci", repodir, logger=logger)
bitbake_rev = '`git rev-list -1 --before="%s" origin/master`' % commitdate
utils.runcmd('git checkout %s' % bitbake_rev,
bitbakepath, logger=logger)
utils.runcmd("git clean -dfx", bitbakepath, logger=logger)
bitbake_rev = utils.runcmd('git rev-list -1 --before="%s" origin/master' % commitdate, bitbakepath, logger=logger).strip()
utils.checkout_repo(bitbakepath, bitbake_rev, logger)
sys.path.insert(0, os.path.join(bitbakepath, 'lib'))
(tinfoil, d, recipes, tempdir) = load_recipes(layerbranch, bitbakepath,