diff options
-rw-r--r-- | layerindex/recipeparse.py | 6 | ||||
-rw-r--r-- | layerindex/utils.py | 28 |
2 files changed, 26 insertions, 8 deletions
diff --git a/layerindex/recipeparse.py b/layerindex/recipeparse.py index f211cfac4a..f1c1bd3246 100644 --- a/layerindex/recipeparse.py +++ b/layerindex/recipeparse.py @@ -31,8 +31,7 @@ def init_parser(settings, branch, bitbakepath, enable_tracking=False, nocheckout else: # Branch name bitbake_ref = 'origin/%s' % branch.bitbake_branch - out = utils.runcmd("git checkout %s" % bitbake_ref, bitbakepath, logger=logger) - out = utils.runcmd("git clean -f -x", bitbakepath, logger=logger) + utils.checkout_repo(bitbakepath, bitbake_ref, logger=logger) # Skip sanity checks os.environ['BB_ENV_EXTRAWHITE'] = 'DISABLE_SANITY_CHECKS' @@ -57,8 +56,7 @@ def init_parser(settings, branch, bitbakepath, enable_tracking=False, nocheckout core_repodir = os.path.join(fetchdir, core_urldir) core_layerdir = os.path.join(core_repodir, core_subdir) if not nocheckout: - out = utils.runcmd("git checkout origin/%s" % core_branchname, core_repodir, logger=logger) - out = utils.runcmd("git clean -f -x", core_repodir, logger=logger) + utils.checkout_repo(core_repodir, "origin/%s" % core_branchname, logger=logger) if not os.path.exists(os.path.join(core_layerdir, 'conf/bitbake.conf')): raise RecipeParseError("conf/bitbake.conf not found in core layer %s - is subdirectory set correctly?" % core_layer.name) # The directory above where this script exists should contain our conf/layer.conf, diff --git a/layerindex/utils.py b/layerindex/utils.py index 14dbeb6e62..f8c5fd4560 100644 --- a/layerindex/utils.py +++ b/layerindex/utils.py @@ -206,14 +206,34 @@ def explode_dep_versions2(bitbakepath, deps): import bb.utils return bb.utils.explode_dep_versions2(deps) -def checkout_layer_branch(layerbranch, repodir, logger=None): +def checkout_repo(repodir, commit, logger, force=False): + """ + Check out a revision in a repository, ensuring that untracked/uncommitted + files don't get in the way. + WARNING: this will throw away any untracked/uncommitted files in the repo, + so it is only suitable for use with repos where you don't care about such + things (which we don't for the layer repos that we use) + """ + if force: + currentref = '' + else: + currentref = runcmd("git rev-parse HEAD", repodir, logger=logger).strip() + if currentref != commit: + # Reset in case there are added but uncommitted changes + runcmd("git reset --hard HEAD", repodir, logger=logger) + # Drop any untracked files in case these cause problems (either because + # they will exist in the revision we're checking out, or will otherwise + # interfere with operation, e.g. stale pyc files) + runcmd("git clean -qdfx", repodir, logger=logger) + # Now check out the revision + runcmd("git checkout %s" % commit, + repodir, logger=logger) +def checkout_layer_branch(layerbranch, repodir, logger=None): branchname = layerbranch.branch.name if layerbranch.actual_branch: branchname = layerbranch.actual_branch - - out = runcmd("git checkout origin/%s" % branchname, repodir, logger=logger) - out = runcmd("git clean -f -x", repodir, logger=logger) + checkout_repo(repodir, 'origin/%s' % branchname, logger) def is_layer_valid(layerdir): conf_file = os.path.join(layerdir, "conf", "layer.conf") |