Add --with_tags to enable git tag fetching.

Needed for chromeos ebuild.

BUG=chromium:376027
R=mmoss@chromium.org,hinoka@chromium.org

Review URL: https://codereview.chromium.org/490743002

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@290683 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/gclient.py b/gclient.py
index eb8b3c3..3e35ebd 100755
--- a/gclient.py
+++ b/gclient.py
@@ -1778,6 +1778,8 @@
                     help='Clone git "branch_heads" refspecs in addition to '
                          'the default refspecs. This adds about 1/2GB to a '
                          'full checkout. (git only)')
+  parser.add_option('--with_tags', action='store_true',
+                    help='Clone git tags in addition to the default refspecs.')
   parser.add_option('-t', '--transitive', action='store_true',
                     help='When a revision is specified (in the DEPS file or '
                           'with the command-line flag), transitively update '
diff --git a/gclient_scm.py b/gclient_scm.py
index d457a5c..acebb09 100644
--- a/gclient_scm.py
+++ b/gclient_scm.py
@@ -785,6 +785,8 @@
     #  mirror_kwargs['refs'].extend(['refs/tags/lkgr', 'refs/tags/lkcr'])
     if hasattr(options, 'with_branch_heads') and options.with_branch_heads:
       mirror_kwargs['refs'].append('refs/branch-heads/*')
+    if hasattr(options, 'with_tags') and options.with_tags:
+      mirror_kwargs['refs'].append('refs/tags/*')
     return git_cache.Mirror(url, **mirror_kwargs)
 
   @staticmethod
@@ -1075,14 +1077,23 @@
     return self._Capture(['rev-parse', '--verify', 'FETCH_HEAD'])
 
   def _UpdateBranchHeads(self, options, fetch=False):
-    """Adds, and optionally fetches, "branch-heads" refspecs if requested."""
+    """Adds, and optionally fetches, "branch-heads" and "tags" refspecs
+    if requested."""
+    need_fetch = fetch
     if hasattr(options, 'with_branch_heads') and options.with_branch_heads:
       config_cmd = ['config', 'remote.%s.fetch' % self.remote,
                     '+refs/branch-heads/*:refs/remotes/branch-heads/*',
                     '^\\+refs/branch-heads/\\*:.*$']
       self._Run(config_cmd, options)
-      if fetch:
-        self._Fetch(options)
+      need_fetch = True
+    if hasattr(options, 'with_tags') and options.with_tags:
+      config_cmd = ['config', 'remote.%s.fetch' % self.remote,
+                    '+refs/tags/*:refs/tags/*',
+                    '^\\+refs/tags/\\*:.*$']
+      self._Run(config_cmd, options)
+      need_fetch = True
+    if fetch and need_fetch:
+      self._Fetch(options)
 
   def _Run(self, args, options, show_header=True, **kwargs):
     # Disable 'unused options' warning | pylint: disable=W0613