Add --no-tags option to prevent fetching of tags

Add an option to pass `--no-tags' to `git fetch'.

Change-Id: I4158cc369773e08e55a167091c38ca304a197587
Signed-off-by: Mitchel Humpherys <mitchelh@codeaurora.org>
diff --git a/project.py b/project.py
index ba7898e..295fb10 100644
--- a/project.py
+++ b/project.py
@@ -963,7 +963,8 @@
       quiet=False,
       is_new=None,
       current_branch_only=False,
-      clone_bundle=True):
+      clone_bundle=True,
+      no_tags=False):
     """Perform only the network IO portion of the sync process.
        Local working directory/branch state is not affected.
     """
@@ -1001,7 +1002,8 @@
         current_branch_only = True
 
     if not self._RemoteFetch(initial=is_new, quiet=quiet, alt_dir=alt_dir,
-                             current_branch_only=current_branch_only):
+                             current_branch_only=current_branch_only,
+                             no_tags=no_tags):
       return False
 
     if self.worktree:
@@ -1551,7 +1553,8 @@
                    current_branch_only=False,
                    initial=False,
                    quiet=False,
-                   alt_dir=None):
+                   alt_dir=None,
+                   no_tags=False):
 
     is_sha1 = False
     tag_name = None
@@ -1644,7 +1647,10 @@
 
     if not current_branch_only:
       # Fetch whole repo
-      cmd.append('--tags')
+      if no_tags:
+        cmd.append('--no-tags')
+      else:
+        cmd.append('--tags')
       cmd.append((u'+refs/heads/*:') + remote.ToLocal('refs/heads/*'))
     elif tag_name is not None:
       cmd.append('tag')
diff --git a/subcmds/sync.py b/subcmds/sync.py
index 228a279..5c369a7 100644
--- a/subcmds/sync.py
+++ b/subcmds/sync.py
@@ -189,6 +189,9 @@
     p.add_option('--fetch-submodules',
                  dest='fetch_submodules', action='store_true',
                  help='fetch submodules from server')
+    p.add_option('--no-tags',
+                 dest='no_tags', action='store_true',
+                 help="don't fetch tags")
     if show_smart:
       p.add_option('-s', '--smart-sync',
                    dest='smart_sync', action='store_true',
@@ -235,7 +238,8 @@
         success = project.Sync_NetworkHalf(
           quiet=opt.quiet,
           current_branch_only=opt.current_branch_only,
-          clone_bundle=not opt.no_clone_bundle)
+          clone_bundle=not opt.no_clone_bundle,
+          no_tags=opt.no_tags)
         self._fetch_times.Set(project, time.time() - start)
 
         # Lock around all the rest of the code, since printing, updating a set
@@ -273,7 +277,8 @@
         if project.Sync_NetworkHalf(
             quiet=opt.quiet,
             current_branch_only=opt.current_branch_only,
-            clone_bundle=not opt.no_clone_bundle):
+            clone_bundle=not opt.no_clone_bundle,
+            no_tags=opt.no_tags):
           fetched.add(project.gitdir)
         else:
           print('error: Cannot fetch %s' % project.name, file=sys.stderr)
@@ -558,7 +563,8 @@
 
     if not opt.local_only:
       mp.Sync_NetworkHalf(quiet=opt.quiet,
-                          current_branch_only=opt.current_branch_only)
+                          current_branch_only=opt.current_branch_only,
+                          no_tags=opt.no_tags)
 
     if mp.HasChanges:
       syncbuf = SyncBuffer(mp.config)