Add warning batching in gclient_utils

BUG=

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@258982 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/gclient.py b/gclient.py
index 8dcb93b..7a13a5d 100755
--- a/gclient.py
+++ b/gclient.py
@@ -1052,7 +1052,7 @@
         scm = gclient_scm.CreateSCM(dep.url, self.root_dir, dep.name)
         actual_url = scm.GetActualRemoteURL()
         if actual_url and not scm.DoesRemoteURLMatch():
-          print >> sys.stderr, ('''
+          gclient_utils.AddWarning('''
 ################################################################################
 ################################### WARNING! ###################################
 ################################################################################
@@ -1957,6 +1957,8 @@
   except (gclient_utils.Error, subprocess2.CalledProcessError), e:
     print >> sys.stderr, 'Error: %s' % str(e)
     return 1
+  finally:
+    gclient_utils.PrintWarnings()
 
 
 if '__main__' == __name__:
diff --git a/gclient_utils.py b/gclient_utils.py
index 7003fc8..44dba57 100644
--- a/gclient_utils.py
+++ b/gclient_utils.py
@@ -27,6 +27,9 @@
 RETRY_INITIAL_SLEEP = 0.5
 
 
+_WARNINGS = []
+
+
 class Error(Exception):
   """gclient exception class."""
   def __init__(self, msg, *args, **kwargs):
@@ -36,6 +39,19 @@
     super(Error, self).__init__(msg, *args, **kwargs)
 
 
+def PrintWarnings():
+  """Prints any accumulated warnings."""
+  if _WARNINGS:
+    print >> sys.stderr, '\n\nWarnings:'
+    for warning in _WARNINGS:
+      print >> sys.stderr, warning
+
+
+def AddWarning(msg):
+  """Adds the given warning message to the list of accumulated warnings."""
+  _WARNINGS.append(msg)
+
+
 def SplitUrlRevision(url):
   """Splits url and returns a two-tuple: url, rev"""
   if url.startswith('ssh:'):