| OLD | NEW |
| 1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 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 recipe_engine import recipe_api | 5 from recipe_engine import recipe_api |
| 6 | 6 |
| 7 | 7 |
| 8 class RevisionResolver(object): | 8 class RevisionResolver(object): |
| 9 """Resolves the revision based on build properties.""" | 9 """Resolves the revision based on build properties.""" |
| 10 | 10 |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 146 for name, revision in sorted(cfg.revisions.items()): | 146 for name, revision in sorted(cfg.revisions.items()): |
| 147 fixed_revision = self.resolve_revision(revision) | 147 fixed_revision = self.resolve_revision(revision) |
| 148 if fixed_revision: | 148 if fixed_revision: |
| 149 revisions.extend(['--revision', '%s@%s' % (name, fixed_revision)]) | 149 revisions.extend(['--revision', '%s@%s' % (name, fixed_revision)]) |
| 150 | 150 |
| 151 test_data_paths = set(cfg.got_revision_mapping.keys() + | 151 test_data_paths = set(cfg.got_revision_mapping.keys() + |
| 152 [s.name for s in cfg.solutions]) | 152 [s.name for s in cfg.solutions]) |
| 153 step_test_data = lambda: ( | 153 step_test_data = lambda: ( |
| 154 self.test_api.output_json(test_data_paths, cfg.GIT_MODE)) | 154 self.test_api.output_json(test_data_paths, cfg.GIT_MODE)) |
| 155 try: | 155 try: |
| 156 if not cfg.GIT_MODE: | 156 if not cfg.GIT_MODE: # pragma: no cover |
| 157 args = ['sync', '--nohooks', '--force', '--verbose'] | 157 args = ['sync', '--nohooks', '--force', '--verbose'] |
| 158 if cfg.delete_unversioned_trees: | 158 if cfg.delete_unversioned_trees: |
| 159 args.append('--delete_unversioned_trees') | 159 args.append('--delete_unversioned_trees') |
| 160 if with_branch_heads: | 160 if with_branch_heads: |
| 161 args.append('--with_branch_heads') | 161 args.append('--with_branch_heads') |
| 162 self('sync', args + revisions + ['--output-json', self.m.json.output()], | 162 self('sync', args + revisions + ['--output-json', self.m.json.output()], |
| 163 step_test_data=step_test_data, | 163 step_test_data=step_test_data, |
| 164 **kwargs) | 164 **kwargs) |
| 165 else: | 165 else: |
| 166 # clean() isn't used because the gclient sync flags passed in checkout() | 166 # clean() isn't used because the gclient sync flags passed in checkout() |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 232 if revert is self.RevertOnTryserver: | 232 if revert is self.RevertOnTryserver: |
| 233 revert = self.m.tryserver.is_tryserver | 233 revert = self.m.tryserver.is_tryserver |
| 234 | 234 |
| 235 if inject_parent_got_revision: | 235 if inject_parent_got_revision: |
| 236 self.inject_parent_got_revision(cfg, override=True) | 236 self.inject_parent_got_revision(cfg, override=True) |
| 237 | 237 |
| 238 self('setup', ['config', '--spec', self.config_to_pythonish(cfg)], **kwargs) | 238 self('setup', ['config', '--spec', self.config_to_pythonish(cfg)], **kwargs) |
| 239 | 239 |
| 240 sync_step = None | 240 sync_step = None |
| 241 try: | 241 try: |
| 242 if not cfg.GIT_MODE: | 242 if not cfg.GIT_MODE: # pragma: no cover |
| 243 try: | 243 try: |
| 244 if revert: | 244 if revert: |
| 245 self.revert(**kwargs) | 245 self.revert(**kwargs) |
| 246 finally: | 246 finally: |
| 247 sync_step = self.sync(cfg, with_branch_heads=with_branch_heads, | 247 sync_step = self.sync(cfg, with_branch_heads=with_branch_heads, |
| 248 **kwargs) | 248 **kwargs) |
| 249 else: | 249 else: |
| 250 sync_step = self.sync(cfg, with_branch_heads=with_branch_heads, | 250 sync_step = self.sync(cfg, with_branch_heads=with_branch_heads, |
| 251 **kwargs) | 251 **kwargs) |
| 252 | 252 |
| 253 cfg_cmds = [ | 253 cfg_cmds = [ |
| 254 ('user.name', 'local_bot'), | 254 ('user.name', 'local_bot'), |
| 255 ('user.email', 'local_bot@example.com'), | 255 ('user.email', 'local_bot@example.com'), |
| 256 ] | 256 ] |
| 257 for var, val in cfg_cmds: | 257 for var, val in cfg_cmds: |
| 258 name = 'recurse (git config %s)' % var | 258 name = 'recurse (git config %s)' % var |
| 259 self(name, ['recurse', 'git', 'config', var, val], **kwargs) | 259 self(name, ['recurse', 'git', 'config', var, val], **kwargs) |
| 260 | 260 |
| 261 finally: | 261 finally: |
| 262 cwd = kwargs.get('cwd', self.m.path['slave_build']) | 262 cwd = kwargs.get('cwd', self.m.path['slave_build']) |
| 263 if 'checkout' not in self.m.path: | 263 if 'checkout' not in self.m.path: |
| 264 self.m.path['checkout'] = cwd.join( | 264 self.m.path['checkout'] = cwd.join( |
| 265 *cfg.solutions[0].name.split(self.m.path.sep)) | 265 *cfg.solutions[0].name.split(self.m.path.sep)) |
| 266 | 266 |
| 267 return sync_step | 267 return sync_step |
| 268 | 268 |
| 269 def revert(self, **kwargs): | 269 def revert(self, **kwargs): # pragma: no cover |
| 270 """Return a gclient_safe_revert step.""" | 270 """Return a gclient_safe_revert step.""" |
| 271 # Not directly calling gclient, so don't use self(). | 271 # Not directly calling gclient, so don't use self(). |
| 272 alias = self.spec_alias | 272 alias = self.spec_alias |
| 273 prefix = '%sgclient ' % (('[spec: %s] ' % alias) if alias else '') | 273 prefix = '%sgclient ' % (('[spec: %s] ' % alias) if alias else '') |
| 274 | 274 |
| 275 return self.m.python(prefix + 'revert', | 275 return self.m.python(prefix + 'revert', |
| 276 self.m.path['build'].join('scripts', 'slave', 'gclient_safe_revert.py'), | 276 self.m.path['build'].join('scripts', 'slave', 'gclient_safe_revert.py'), |
| 277 ['.', self.m.path['depot_tools'].join('gclient', | 277 ['.', self.m.path['depot_tools'].join('gclient', |
| 278 platform_ext={'win': '.bat'})], | 278 platform_ext={'win': '.bat'})], |
| 279 infra_step=True, | 279 infra_step=True, |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 353 """Updates config revision corresponding to patch_project. | 353 """Updates config revision corresponding to patch_project. |
| 354 | 354 |
| 355 Useful for bot_update only, as this is the only consumer of gclient's config | 355 Useful for bot_update only, as this is the only consumer of gclient's config |
| 356 revision map. This doesn't overwrite the revision if it was already set. | 356 revision map. This doesn't overwrite the revision if it was already set. |
| 357 """ | 357 """ |
| 358 assert patch_project is None or isinstance(patch_project, basestring) | 358 assert patch_project is None or isinstance(patch_project, basestring) |
| 359 cfg = gclient_config or self.c | 359 cfg = gclient_config or self.c |
| 360 path, revision = cfg.patch_projects.get(patch_project, (None, None)) | 360 path, revision = cfg.patch_projects.get(patch_project, (None, None)) |
| 361 if path and revision and path not in cfg.revisions: | 361 if path and revision and path not in cfg.revisions: |
| 362 cfg.revisions[path] = revision | 362 cfg.revisions[path] = revision |
| OLD | NEW |