From 1bcda59f1ee72f8762a634c11808f226975c8c97 Mon Sep 17 00:00:00 2001 From: Robert Yang Date: Fri, 6 Jul 2018 12:31:06 +0800 Subject: utils.py: fix checkout_repo when no HEAD Fixed: $ git clone 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 [...] -- [...]' 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 --- layerindex/utils.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/layerindex/utils.py b/layerindex/utils.py index c30038da26..3dc54a18fd 100644 --- a/layerindex/utils.py +++ b/layerindex/utils.py @@ -217,17 +217,25 @@ def checkout_repo(repodir, commit, logger, force=False): if force: currentref = '' else: - currentref = runcmd("git rev-parse HEAD", repodir, logger=logger).strip() + try: + # The "git rev-parse HEAD" returns "fatal: ambiguous argument 'HEAD'" + # when a repo is unable to check out after git clone: + # git clone + # 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 -- cgit 1.2.3-korg