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: