소스 검색

Fix errors when clone.bundle missing on server

Catch curl failures to download clone.bundle; don't let git try to parse
the 404 page as a bundle file (was causing much user confusion).

This should eliminate false error messages from init and sync such as:
  error: '.repo/manifests.git/clone.bundle' does not look like a v2 bundle file
  fatal: Could not read bundle '.repo/manifests.git/clone.bundle'.
  error: RPC failed; result=22, HTTP code = 400

Signed-off-by: Matt Gumbel <matthew.k.gumbel@intel.com>
Change-Id: I7994f7c0baecfb45bb5a5850c48bd2a0ffabe773
Matt Gumbel 13 년 전
부모
커밋
2dc810c2e4
1개의 변경된 파일13개의 추가작업 그리고 3개의 파일을 삭제
  1. 13 3
      project.py

+ 13 - 3
project.py

@@ -1529,7 +1529,7 @@ class Project(object):
     if os.path.exists(dstPath):
       os.remove(dstPath)
 
-    cmd = ['curl', '--output', tmpPath, '--netrc', '--location']
+    cmd = ['curl', '--fail', '--output', tmpPath, '--netrc', '--location']
     if quiet:
       cmd += ['--silent']
     if os.path.exists(tmpPath):
@@ -1549,9 +1549,19 @@ class Project(object):
     except OSError:
       return False
 
-    ok = proc.wait() == 0
+    curlret = proc.wait()
+
+    if curlret == 22:
+      # From curl man page:
+      # 22: HTTP page not retrieved. The requested url was not found or
+      # returned another error with the HTTP error code being 400 or above.
+      # This return code only appears if -f, --fail is used.
+      if not quiet:
+        print >> sys.stderr, "Server does not provide clone.bundle; ignoring."
+      return False
+
     if os.path.exists(tmpPath):
-      if ok and os.stat(tmpPath).st_size > 16:
+      if curlret == 0 and os.stat(tmpPath).st_size > 16:
         os.rename(tmpPath, dstPath)
         return True
       else: