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
diff --git a/project.py b/project.py
index 60633b7..4621013 100644
--- a/project.py
+++ b/project.py
@@ -1529,7 +1529,7 @@
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 @@
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: