From 2dc810c2e4028878b9c3484866a5973d5c33479d Mon Sep 17 00:00:00 2001 From: Matt Gumbel Date: Thu, 30 Aug 2012 09:39:36 -0700 Subject: [PATCH] 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 Change-Id: I7994f7c0baecfb45bb5a5850c48bd2a0ffabe773 --- project.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/project.py b/project.py index 60633b73..4621013c 100644 --- a/project.py +++ b/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: