gclient flatten: fix a bug with deps_os getting omitted for recursed deps

Bug: 570091
Change-Id: I4fac33ca683ff2011fa7307d5175592f3d9e258e
Reviewed-on: https://chromium-review.googlesource.com/560171
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 e1b1be2..8f1a489 100755
--- a/gclient.py
+++ b/gclient.py
@@ -1825,9 +1825,7 @@
 
   _AddDep(dep, allowed_hosts, deps, unpinned_deps)
 
-  for dep_os, os_deps in dep.os_dependencies.iteritems():
-    for os_dep in os_deps:
-      deps_os.setdefault(dep_os, {})[os_dep.name] = os_dep
+  _FlattenDepsOs(dep, deps_os)
 
   deps_by_name = dict((d.name, d) for d in dep.dependencies)
   for recurse_dep_name in (dep.recursedeps or []):
@@ -1860,11 +1858,29 @@
   """
   logging.debug('_FlattenRecurse(%r)', dep)
 
+  _FlattenDepsOs(dep, deps_os)
+
   for sub_dep in dep.orig_dependencies:
     _FlattenDep(sub_dep, allowed_hosts, deps, deps_os, hooks, hooks_os,
                 pre_deps_hooks, unpinned_deps)
 
 
+def _FlattenDepsOs(dep, deps_os):
+  """Helper to add a dependency to flattened lists.
+
+  Arguments:
+    dep (Dependency): dependency to process
+
+  Out-parameters:
+    deps_os (dict): will be filled with flattened deps_os
+  """
+  logging.debug('_FlattenDepsOs(%r)', dep)
+
+  for dep_os, os_deps in dep.os_dependencies.iteritems():
+    for os_dep in os_deps:
+      deps_os.setdefault(dep_os, {})[os_dep.name] = os_dep
+
+
 def _AddDep(dep, allowed_hosts, deps, unpinned_deps):
   """Helper to add a dependency to flattened lists.