utils.py: fix checkout_repo when no HEAD

Fixed:
$ git clone <url>
warning: remote HEAD refers to nonexistent ref, unable to checkout.
$ git rev-parse HEAD
HEAD
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

Catch the error and avoid that.

And use "git reset --hard" to replace of "git reset --hard HEAD", HEAD is
default for git reset, so they are the same, but the later one reports error
when remote HEAD doesn't exist:
$ git reset --hard HEAD
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
[snip]

$ git reset --hard
No errors.

Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
This commit is contained in:
Robert Yang 2018-07-06 12:31:06 +08:00 committed by Paul Eggleton
parent 635187b594
commit a661ebe6ac

View File

@ -217,17 +217,25 @@ def checkout_repo(repodir, commit, logger, force=False):
if force:
currentref = ''
else:
try:
# The "git rev-parse HEAD" returns "fatal: ambiguous argument 'HEAD'"
# when a repo is unable to check out after git clone:
# git clone <url>
# warning: remote HEAD refers to nonexistent ref, unable to checkout.
# So check and avoid that
currentref = runcmd("git rev-parse HEAD", repodir, logger=logger).strip()
except Exception as esc:
logger.warn(esc)
currentref = ''
if currentref != commit:
# Reset in case there are added but uncommitted changes
runcmd("git reset --hard HEAD", repodir, logger=logger)
runcmd("git reset --hard", 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)
runcmd("git checkout %s" % commit, repodir, logger=logger)
def checkout_layer_branch(layerbranch, repodir, logger=None):
branchname = layerbranch.branch.name