gclient flatten: include info about DEPS files: repos and paths

This CL includes this as comments in flattened DEPS, as requested
on the bug. For automated processes using this, we should export
the data in machine-readable form outside of the DEPS file.

Bug: 756474, 570091
Change-Id: I78cd2105113f41d599e293e772e1f1ca42679f3c
Reviewed-on: https://chromium-review.googlesource.com/621726
Reviewed-by: Michael Moss <mmoss@chromium.org>
Reviewed-by: Dirk Pranke <dpranke@chromium.org>
Commit-Queue: Paweł Hajdan Jr. <phajdan.jr@chromium.org>
diff --git a/gclient.py b/gclient.py
index 84010b3..a8e8770 100755
--- a/gclient.py
+++ b/gclient.py
@@ -1764,12 +1764,21 @@
 
       for os_deps in self._deps_os.itervalues():
         for dep in os_deps.itervalues():
-          # OS-specific deps need to have their full URL resolved manually.
-          assert not dep.parsed_url, (dep, dep.parsed_url)
-          dep._parsed_url = dep.LateOverride(dep.url)
-
           self._pin_dep(dep)
 
+    deps_files = set()
+    def add_deps_file(dep):
+      deps_path = os.path.join(self._client.root_dir, dep.name, dep.deps_file)
+      if not os.path.exists(deps_path):
+        return
+      assert dep.parsed_url
+      deps_files.add((dep.parsed_url, dep.deps_file))
+    for dep in self._deps.itervalues():
+      add_deps_file(dep)
+    for os_deps in self._deps_os.itervalues():
+      for dep in os_deps.itervalues():
+        add_deps_file(dep)
+
     self._deps_string = '\n'.join(
         _GNSettingsToLines(
             self._client.dependencies[0]._gn_args_file,
@@ -1781,6 +1790,8 @@
         _HooksToLines('pre_deps_hooks', self._pre_deps_hooks) +
         _HooksOsToLines(self._hooks_os) +
         _VarsToLines(self._vars) +
+        ['# %s, %s' % (url, deps_file)
+         for url, deps_file in sorted(deps_files)] +
         [''])  # Ensure newline at end of file.
 
   def _add_dep(self, dep):
@@ -1806,6 +1817,10 @@
         self._deps_os.get(dep_os, {}).get(os_dep.name) == os_dep), (
             os_dep.name, self._deps_os.get(dep_os, {}).get(os_dep.name))
     if os_dep.url:
+      # OS-specific deps need to have their full URL resolved manually.
+      assert not os_dep.parsed_url, (os_dep, os_dep.parsed_url)
+      os_dep._parsed_url = os_dep.LateOverride(os_dep.url)
+
       self._deps_os.setdefault(dep_os, {})[os_dep.name] = os_dep
 
   def _flatten_dep(self, dep, dep_os=None):