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 import re | 5 import re |
6 | 6 |
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 _CHROMIUM_ROOT_DIR = 'src/' | 10 _CHROMIUM_ROOT_DIR = 'src/' |
11 _CHROMIUM_REPO_MASTER = 'https://chromium.googlesource.com/chromium/src.git' | 11 _CHROMIUM_REPO_MASTER = 'https://chromium.googlesource.com/chromium/src.git' |
12 | 12 |
13 _CHROME_VERSION_PATTERN = re.compile(r'^\d+\.\d+\.\d+\.\d+$') | 13 _CHROME_VERSION_PATTERN = re.compile(r'^\d+\.\d+\.\d+\.\d+$') |
14 | 14 |
15 _BUILDSPEC_REPO = ('https://chrome-internal.googlesource.com/chrome/tools/' | 15 _BUILDSPEC_REPO = ('https://chrome-internal.googlesource.com/chrome/tools/' |
16 'buildspec.git/') | 16 'buildspec.git/') |
17 | 17 |
18 | 18 |
19 def IsChromeVersion(revision): | 19 def IsChromeVersion(revision): |
20 """Determines if a revision is a chrome version.""" | 20 """Determines if a revision is a chrome version.""" |
21 if _CHROME_VERSION_PATTERN.match(revision): | 21 return bool(_CHROME_VERSION_PATTERN.match(revision)) |
22 return True | |
23 | |
24 return False | |
25 | 22 |
26 | 23 |
27 class DEPSDownloader(deps_parser.DEPSLoader): | 24 class DEPSDownloader(deps_parser.DEPSLoader): |
28 """Downloads DEPS from remote Git repo.""" | 25 """Downloads DEPS from remote Git repo.""" |
29 | 26 |
30 def __init__(self, repository): | 27 def __init__(self, get_repository): |
31 self.repository = repository | 28 assert callable(get_repository), ( |
| 29 'The ``get_repository`` argument must be callable.') |
| 30 self._get_repository = get_repository |
32 | 31 |
33 def Load(self, repo_url, revision, deps_file): | 32 def Load(self, repo_url, revision, deps_file): |
34 self.repository.repo_url = repo_url | 33 repository = self._get_repository(repo_url) |
35 content = None | 34 content = None |
36 if deps_file == 'DEPS' and repo_url == _CHROMIUM_REPO_MASTER: | 35 if deps_file == 'DEPS' and repo_url == _CHROMIUM_REPO_MASTER: |
37 # Try .DEPS.git instead of DEPS first, for commits during the Git chaos. | 36 # Try .DEPS.git instead of DEPS first, for commits during the Git chaos. |
38 content = self.repository.GetSource('.DEPS.git', revision) | 37 content = repository.GetSource('.DEPS.git', revision) |
39 | 38 |
40 if content is None: | 39 if content is None: |
41 content = self.repository.GetSource(deps_file, revision) | 40 content = repository.GetSource(deps_file, revision) |
42 | 41 |
43 if content is None and deps_file != 'DEPS': | 42 if content is None and deps_file != 'DEPS': |
44 # Like gclient, fall back to raw 'DEPS' when all else fails. | 43 # Like gclient, fall back to raw 'DEPS' when all else fails. |
45 content = self.repository.GetSource('DEPS', revision) | 44 content = repository.GetSource('DEPS', revision) |
46 | 45 |
47 if content is None: | 46 if content is None: |
48 raise Exception( | 47 raise Exception( |
49 'Failed to pull %s file from %s, at revision %s.' % ( | 48 'Failed to pull %s file from %s, at revision %s.' % ( |
50 deps_file, repo_url, revision)) | 49 deps_file, repo_url, revision)) |
51 | 50 |
52 return content | 51 return content |
53 | 52 |
54 | 53 |
55 class ChromeDependencyFetcher(object): | 54 class ChromeDependencyFetcher(object): |
56 | 55 |
57 def __init__(self, repository): | 56 def __init__(self, get_repository): |
58 self.repository = repository | 57 assert callable(get_repository), ( |
| 58 'The ``get_repository`` argument must be callable.') |
| 59 self._get_repository = get_repository |
59 | 60 |
60 def GetDependency(self, revision, platform): | 61 def GetDependency(self, revision, platform): |
61 """Returns all dependencies of Chrome as a dict for given revision and OS. | 62 """Returns all dependencies of Chrome as a dict for given revision and OS. |
62 | 63 |
63 Args: | 64 Args: |
64 revision (str): The revision of a Chrome build, it can be a githash or a | 65 revision (str): The revision of a Chrome build, it can be a githash or a |
65 chrome version for a official build. | 66 chrome version for a official build. |
66 platform (str): The target platform of the Chrome build, should be one of | 67 platform (str): The target platform of the Chrome build, should be one of |
67 'win', 'ios', 'mac', 'unix', 'android', or 'all'. | 68 'win', 'ios', 'mac', 'unix', 'android', or 'all'. |
68 | 69 |
69 Returns: | 70 Returns: |
70 A map from dependency path to the dependency info. | 71 A map from dependency path to the dependency info. |
71 """ | 72 """ |
72 deps_repo_info = {'deps_file': 'DEPS'} | 73 deps_repo_info = {'deps_file': 'DEPS'} |
73 | 74 |
74 if IsChromeVersion(revision): | 75 if IsChromeVersion(revision): |
75 # For chrome version, get the DEPS file from internal buildspec/ repo | 76 # For chrome version, get the DEPS file from internal buildspec/ repo |
76 # instead of chromium trunk. | 77 # instead of chromium trunk. |
77 deps_repo_info['deps_repo_url'] = _BUILDSPEC_REPO | 78 deps_repo_info['deps_repo_url'] = _BUILDSPEC_REPO |
78 deps_repo_info['deps_repo_revision'] = 'master' | 79 deps_repo_info['deps_repo_revision'] = 'master' |
79 deps_repo_info['deps_file'] = 'releases/%s/DEPS' % revision | 80 deps_repo_info['deps_file'] = 'releases/%s/DEPS' % revision |
80 | 81 |
81 root_dep = dependency.Dependency( | 82 root_dep = dependency.Dependency( |
82 _CHROMIUM_ROOT_DIR, _CHROMIUM_REPO_MASTER, revision, **deps_repo_info) | 83 _CHROMIUM_ROOT_DIR, _CHROMIUM_REPO_MASTER, revision, **deps_repo_info) |
83 | 84 |
84 deps_parser.UpdateDependencyTree( | 85 deps_parser.UpdateDependencyTree( |
85 root_dep, [platform], DEPSDownloader(self.repository)) | 86 root_dep, [platform], DEPSDownloader(self._get_repository)) |
86 | 87 |
87 dependencies = {} | 88 dependencies = {} |
88 | 89 |
89 # Flatten the dependency tree into a one-level dict. | 90 # Flatten the dependency tree into a one-level dict. |
90 def FlattenDepTree(dep): | 91 def FlattenDepTree(dep): |
91 dependencies[dep.path] = dep | 92 dependencies[dep.path] = dep |
92 for child in dep.children.values(): | 93 for child in dep.children.values(): |
93 FlattenDepTree(child) | 94 FlattenDepTree(child) |
94 | 95 |
95 FlattenDepTree(root_dep) | 96 FlattenDepTree(root_dep) |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 """ | 159 """ |
159 deps_rolls = self.GetDependencyRolls(old_cr_revision, new_cr_revision, | 160 deps_rolls = self.GetDependencyRolls(old_cr_revision, new_cr_revision, |
160 platform, skip_chromium_roll=False) | 161 platform, skip_chromium_roll=False) |
161 | 162 |
162 deps_rolls_dict = {} | 163 deps_rolls_dict = {} |
163 | 164 |
164 for dep_roll in deps_rolls: | 165 for dep_roll in deps_rolls: |
165 deps_rolls_dict[dep_roll.path] = dep_roll | 166 deps_rolls_dict[dep_roll.path] = dep_roll |
166 | 167 |
167 return deps_rolls_dict | 168 return deps_rolls_dict |
OLD | NEW |