OLD | NEW |
---|---|
1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 from common import git_repository | 5 from common import git_repository |
6 from common import http_client_appengine | 6 from common import http_client_appengine |
7 from common import dependency | 7 from common import dependency |
8 from common import deps_parser | 8 from common import deps_parser |
9 | 9 |
10 | 10 |
11 class DEPSDownloader(deps_parser.DEPSLoader): | 11 class DEPSDownloader(deps_parser.DEPSLoader): |
12 """Download DEPS from remote GIT repo.""" | 12 """Downloads DEPS from remote GIT repo.""" |
qyearsley
2015/05/29 23:14:33
GIT -> git or Git
stgao
2015/05/30 00:21:05
Done.
| |
13 | 13 |
14 def Load(self, repo_url, revision, deps_file): | 14 def Load(self, repo_url, revision, deps_file): |
15 http_client = http_client_appengine.HttpClientAppengine() | 15 http_client = http_client_appengine.HttpClientAppengine() |
16 repo = git_repository.GitRepository(repo_url, http_client) | 16 repo = git_repository.GitRepository(repo_url, http_client) |
17 | 17 |
18 content = None | 18 content = None |
19 | 19 |
20 # Try .DEPS.git first if the given deps_file is "DEPS", because before | 20 # Try .DEPS.git first if the given deps_file is "DEPS", because before |
21 # migration from SVN to GIT, .DEPS.git contains dependencies from GIT while | 21 # migration from SVN to GIT, .DEPS.git contains dependencies from GIT while |
qyearsley
2015/05/29 23:14:32
GIT -> git or Git
stgao
2015/05/30 00:21:05
Done.
| |
22 # DEPS contains those from SVN. | 22 # DEPS contains those from SVN. |
23 if deps_file == 'DEPS': | 23 if deps_file == 'DEPS': |
24 content = repo.GetSource('.DEPS.git', revision) | 24 content = repo.GetSource('.DEPS.git', revision) |
25 | 25 |
26 # If .DEPS.git is not found, use DEPS. Assume it is a commit after migration | 26 # If .DEPS.git is not found, use DEPS. Assume it is a commit after migration |
27 # from SVN to GIT. | 27 # from SVN to GIT. |
28 if content is None: | 28 if content is None: |
29 content = repo.GetSource(deps_file, revision) | 29 content = repo.GetSource(deps_file, revision) |
30 | 30 |
31 if content is None: | 31 if content is None: |
32 raise Exception('Failed to pull %s file.' % deps_file) | 32 raise Exception('Failed to pull %s file.' % deps_file) |
33 | 33 |
34 return content | 34 return content |
35 | 35 |
36 | 36 |
37 def GetChromeDependency(revision, os_platform): | 37 def GetChromeDependency(revision, os_platform): |
38 """Return all dependencies of Chrome as a dict for the given revision and os. | 38 """Returns all dependencies of Chrome as a dict for the given revision and os. |
qyearsley
2015/05/29 23:14:33
Nit: os -> OS
stgao
2015/05/30 00:21:05
Done.
| |
39 | 39 |
40 Args: | 40 Args: |
41 revision (str): The revision of a Chrome build. | 41 revision (str): The revision of a Chrome build. |
42 os_platform (str): The target platform of the Chrome build, should be one of | 42 os_platform (str): The target platform of the Chrome build, should be one of |
43 'win', 'ios', 'mac', 'unix', 'android', or 'all'. | 43 'win', 'ios', 'mac', 'unix', 'android', or 'all'. |
44 | 44 |
45 Returns: | 45 Returns: |
46 A map from dependency path to the dependency info. | 46 A map from dependency path to the dependency info. |
47 """ | 47 """ |
48 root_dep = dependency.Dependency( | 48 root_dep = dependency.Dependency( |
49 'src/', 'https://chromium.googlesource.com/chromium/src.git', revision, | 49 'src/', 'https://chromium.googlesource.com/chromium/src.git', revision, |
50 'DEPS') | 50 'DEPS') |
51 | 51 |
52 deps_parser.UpdateDependencyTree(root_dep, [os_platform], DEPSDownloader()) | 52 deps_parser.UpdateDependencyTree(root_dep, [os_platform], DEPSDownloader()) |
53 | 53 |
54 dependencies = {} | 54 dependencies = {} |
55 | 55 |
56 # Flatten the dependency tree into a one-level dict. | 56 # Flatten the dependency tree into a one-level dict. |
57 def _FlattenDepTree(dep): | 57 def FlattenDepTree(dep): |
58 dependencies[dep.path] = dep | 58 dependencies[dep.path] = dep |
59 for child in dep.children.values(): | 59 for child in dep.children.values(): |
60 _FlattenDepTree(child) | 60 FlattenDepTree(child) |
61 | 61 |
62 _FlattenDepTree(root_dep) | 62 FlattenDepTree(root_dep) |
63 | 63 |
64 return dependencies | 64 return dependencies |
65 | |
66 | |
67 def GetChromiumDEPSRolls(old_cr_revision, new_cr_revision, os_platform): | |
68 """Returns a list of dependency rolls between the given Chromium revisions. | |
69 | |
70 Args: | |
71 old_cr_revision (str): The old Chromium revision. | |
72 new_cr_revision (str): The new Chromium revision. | |
qyearsley
2015/05/29 23:14:33
Are these git commit hashes or commit positions or
stgao
2015/05/30 00:21:05
Done.
Git commit hashes.
| |
73 os_platform (str): The target OS platform of the Chrome or test binary. | |
74 """ | |
75 old_deps = GetChromeDependency(old_cr_revision, os_platform) | |
76 new_deps = GetChromeDependency(new_cr_revision, os_platform) | |
77 | |
78 rolls = [] | |
79 | |
80 for path, new_dep in new_deps.iteritems(): | |
81 if path == 'src/': | |
82 continue | |
83 | |
84 old_revision = None | |
85 if path in old_deps: | |
86 old_revision = old_deps[path].revision | |
87 | |
88 if old_revision != new_dep.revision: | |
89 rolls.append( | |
90 dependency.DependencyRoll( | |
91 path, new_dep.repo_url, old_revision, new_dep.revision)) | |
92 | |
93 # Note: dependencies could be deleted too. However, regressions caused by that | |
94 # seems rare. Thus, ignore them for now. | |
95 | |
96 return rolls | |
OLD | NEW |