[yocto] [layerindex-web][PATCH 2/4] utils.py: fix checkout_repo when no HEAD

Robert Yang liezhi.yang at windriver.com
Sun Jul 8 21:11:28 PDT 2018


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 at windriver.com>
---
 layerindex/utils.py | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/layerindex/utils.py b/layerindex/utils.py
index c30038d..3dc54a1 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 <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
-- 
2.7.4



More information about the yocto mailing list