Chromium Code Reviews| Index: gclient.py |
| diff --git a/gclient.py b/gclient.py |
| index 407b9ad4e99f1efd3f31270f3695e18f458b1fcb..e8b4e7d12057ee9dd6d6b409aa8cc254cde98753 100755 |
| --- a/gclient.py |
| +++ b/gclient.py |
| @@ -488,22 +488,42 @@ class Dependency(gclient_utils.WorkItem, DependencySettings): |
| self.local_target_os = local_scope['target_os'] |
| # load os specific dependencies if defined. these dependencies may |
| # override or extend the values defined by the 'deps' member. |
| - target_os_deps = {} |
| - if 'deps_os' in local_scope: |
| - for deps_os_key in self.target_os: |
| - os_deps = local_scope['deps_os'].get(deps_os_key, {}) |
| - if len(self.target_os) > 1: |
| - # Ignore any conflict when including deps for more than one |
| - # platform, so we collect the broadest set of dependencies |
| - # available. We may end up with the wrong revision of something for |
| - # our platform, but this is the best we can do. |
| - target_os_deps.update( |
| - [x for x in os_deps.items() if not x[0] in target_os_deps]) |
| - else: |
| - target_os_deps.update(os_deps) |
| + if 'deps_os' in local_scope and self.target_os: |
|
Isaac (away)
2013/12/09 10:33:13
self.target_os is a recursive function, let's save
Daniel Bratell
2013/12/11 18:09:49
To make the code faster?
Isaac (away)
2013/12/11 18:58:27
yes, also because in theory the order could change
|
| + target_os_deps = {} |
| + the_first_os = self.target_os[0] |
|
Isaac (away)
2013/12/09 10:33:13
It seems like we're going to have two decision pat
|
| + # |set_by_os| tracks what deps are overridden and by whom. |
| + set_by_os = dict.fromkeys(deps.keys(), the_first_os) |
| + |
| + os_deps = local_scope['deps_os'].get(the_first_os, {}) |
| + for os_dep_key, os_dep_value in os_deps.iteritems(): |
| + target_os_deps[os_dep_key] = os_dep_value |
| + set_by_os[os_dep_key] = the_first_os |
| + |
| + for the_target_os in self.target_os[1:]: |
| + # Ignore (but warn) for any conflict when including deps for |
| + # more than one platform, so we collect the broadest set of |
| + # dependencies available. We may end up with the wrong |
| + # revision of something for our platform, but this is the |
| + # best we can do. |
| + os_deps = local_scope['deps_os'].get(the_target_os, {}) |
| + for os_dep_key, os_dep_value in os_deps.iteritems(): |
| + prev_value = target_os_deps.get(os_dep_key, deps.get(os_dep_key)) |
| + if os_dep_key in set_by_os and prev_value is not None: |
| + # Some platforms override with None just to create a |
| + # smaller checkout. No reason to warn about that. |
| + if os_dep_value is not None and os_dep_value != prev_value: |
| + print('Conflicting dependencies for %s. %s wants %s ' |
|
Isaac (away)
2013/12/09 10:33:13
Use logging calls instead of print
|
| + 'while %s wants %s. ' |
| + '%s will be used since %s was listed before %s.' % |
|
Isaac (away)
2013/12/09 10:33:13
Order is completely arbitrary in this list since t
Daniel Bratell
2013/12/11 18:09:49
The problem with that is that it won't be the pers
|
| + (os_dep_key, the_target_os, os_dep_value, |
| + set_by_os[os_dep_key], prev_value, |
| + prev_value, set_by_os[os_dep_key], the_target_os)) |
| + else: |
| + target_os_deps[os_dep_key] = os_dep_value |
| + set_by_os[os_dep_key] = the_target_os |
| - # deps_os overrides paths from deps |
| - deps.update(target_os_deps) |
| + # deps_os overrides paths from deps |
| + deps.update(target_os_deps) |
| # If a line is in custom_deps, but not in the solution, we want to append |
| # this line to the solution. |