sync: --no-clone-bundle disables the clone bundle support

Change-Id: Ia9ed7da8451b273c1be620c3dd0dcad777b29096
diff --git a/project.py b/project.py
index 9b23b11..350a5e3 100644
--- a/project.py
+++ b/project.py
@@ -902,7 +902,11 @@
 
 ## Sync ##
 
-  def Sync_NetworkHalf(self, quiet=False, is_new=None, current_branch_only=False):
+  def Sync_NetworkHalf(self,
+      quiet=False,
+      is_new=None,
+      current_branch_only=False,
+      clone_bundle=True):
     """Perform only the network IO portion of the sync process.
        Local working directory/branch state is not affected.
     """
@@ -925,7 +929,9 @@
     else:
       alt_dir = None
 
-    if alt_dir is None and self._ApplyCloneBundle(initial=is_new, quiet=quiet):
+    if clone_bundle \
+    and alt_dir is None \
+    and self._ApplyCloneBundle(initial=is_new, quiet=quiet):
       is_new = False
 
     if not self._RemoteFetch(initial=is_new, quiet=quiet, alt_dir=alt_dir,
diff --git a/subcmds/sync.py b/subcmds/sync.py
index 6dcce82..74b3f18 100644
--- a/subcmds/sync.py
+++ b/subcmds/sync.py
@@ -86,6 +86,12 @@
 The -f/--force-broken option can be used to proceed with syncing
 other projects if a project sync fails.
 
+The --no-clone-bundle option disables any attempt to use
+$URL/clone.bundle to bootstrap a new Git repository from a
+resumeable bundle file on a content delivery network. This
+may be necessary if there are problems with the local Python
+HTTP client or proxy configuration, but the Git binary works.
+
 SSH Connections
 ---------------
 
@@ -143,6 +149,9 @@
     p.add_option('-m', '--manifest-name',
                  dest='manifest_name',
                  help='temporary manifest to use for this sync', metavar='NAME.xml')
+    p.add_option('--no-clone-bundle',
+                 dest='no_clone_bundle', action='store_true',
+                 help='disable use of /clone.bundle on HTTP/HTTPS')
     if show_smart:
       p.add_option('-s', '--smart-sync',
                    dest='smart_sync', action='store_true',
@@ -185,8 +194,10 @@
       # - We always make sure we unlock the lock if we locked it.
       try:
         try:
-          success = project.Sync_NetworkHalf(quiet=opt.quiet,
-                                             current_branch_only=opt.current_branch_only)
+          success = project.Sync_NetworkHalf(
+            quiet=opt.quiet,
+            current_branch_only=opt.current_branch_only,
+            clone_bundle=not opt.no_clone_bundle)
 
           # Lock around all the rest of the code, since printing, updating a set
           # and Progress.update() are not thread safe.