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.""" |
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 |
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. |
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. |
| 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 |