| 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 | 5 |
| 6 """Recipe module to ensure a checkout is consistant on a bot.""" | 6 """Recipe module to ensure a checkout is consistant on a bot.""" |
| 7 | 7 |
| 8 from recipe_engine import recipe_api | 8 from recipe_engine import recipe_api |
| 9 | 9 |
| 10 | 10 |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 @property | 83 @property |
| 84 def last_returned_properties(self): | 84 def last_returned_properties(self): |
| 85 return self._last_returned_properties | 85 return self._last_returned_properties |
| 86 | 86 |
| 87 def ensure_checkout(self, gclient_config=None, suffix=None, | 87 def ensure_checkout(self, gclient_config=None, suffix=None, |
| 88 patch=True, update_presentation=True, | 88 patch=True, update_presentation=True, |
| 89 force=False, patch_root=None, no_shallow=False, | 89 force=False, patch_root=None, no_shallow=False, |
| 90 with_branch_heads=False, refs=None, | 90 with_branch_heads=False, refs=None, |
| 91 patch_project_roots=None, patch_oauth2=False, | 91 patch_project_roots=None, patch_oauth2=False, |
| 92 output_manifest=True, clobber=False, | 92 output_manifest=True, clobber=False, |
| 93 root_solution_revision=None, **kwargs): | 93 root_solution_revision=None, rietveld=None, issue=None, |
| 94 patchset=None, **kwargs): |
| 95 """ |
| 96 Args: |
| 97 gclient_config: The gclient configuration to use when running bot_update. |
| 98 If omitted, the current gclient configuration is used. |
| 99 rietveld: The rietveld server to use. If omitted, will infer from |
| 100 the 'rietveld' property. |
| 101 issue: The rietveld issue number to use. If omitted, will infer from |
| 102 the 'issue' property. |
| 103 patchset: The rietveld issue patchset to use. If omitted, will infer from |
| 104 the 'patchset' property. |
| 105 """ |
| 94 refs = refs or [] | 106 refs = refs or [] |
| 95 # We can re-use the gclient spec from the gclient module, since all the | 107 # We can re-use the gclient spec from the gclient module, since all the |
| 96 # data bot_update needs is already configured into the gclient spec. | 108 # data bot_update needs is already configured into the gclient spec. |
| 97 cfg = gclient_config or self.m.gclient.c | 109 cfg = gclient_config or self.m.gclient.c |
| 98 spec_string = jsonish_to_python(cfg.as_jsonish(), True) | 110 spec_string = jsonish_to_python(cfg.as_jsonish(), True) |
| 99 | 111 |
| 100 # Used by bot_update to determine if we want to run or not. | 112 # Used by bot_update to determine if we want to run or not. |
| 101 master = self._mastername | 113 master = self._mastername |
| 102 builder = self._buildername | 114 builder = self._buildername |
| 103 slave = self._slavename | 115 slave = self._slavename |
| 104 | 116 |
| 105 # Construct our bot_update command. This basically be inclusive of | 117 # Construct our bot_update command. This basically be inclusive of |
| 106 # everything required for bot_update to know: | 118 # everything required for bot_update to know: |
| 107 root = patch_root | 119 root = patch_root |
| 108 if root is None: | 120 if root is None: |
| 109 root = cfg.solutions[0].name | 121 root = cfg.solutions[0].name |
| 110 additional = self.m.rietveld.calculate_issue_root(patch_project_roots) | 122 additional = self.m.rietveld.calculate_issue_root(patch_project_roots) |
| 111 if additional: | 123 if additional: |
| 112 root = self.m.path.join(root, additional) | 124 root = self.m.path.join(root, additional) |
| 113 | 125 |
| 114 if patch: | 126 if patch: |
| 115 issue = self._issue | 127 issue = issue or self._issue |
| 116 patchset = self._patchset | 128 patchset = patchset or self._patchset |
| 117 patch_url = self._patch_url | 129 patch_url = self._patch_url |
| 118 gerrit_repo = self._repository | 130 gerrit_repo = self._repository |
| 119 gerrit_ref = self._gerrit_ref | 131 gerrit_ref = self._gerrit_ref |
| 120 else: | 132 else: |
| 121 # The trybot recipe sometimes wants to de-apply the patch. In which case | 133 # The trybot recipe sometimes wants to de-apply the patch. In which case |
| 122 # we pretend the issue/patchset/patch_url never existed. | 134 # we pretend the issue/patchset/patch_url never existed. |
| 123 issue = patchset = patch_url = email_file = key_file = None | 135 issue = patchset = patch_url = email_file = key_file = None |
| 124 gerrit_repo = gerrit_ref = None | 136 gerrit_repo = gerrit_ref = None |
| 125 | 137 |
| 126 # Issue and patchset must come together. | 138 # Issue and patchset must come together. |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 159 # 2. What do we want to check out (spec/root/rev/rev_map). | 171 # 2. What do we want to check out (spec/root/rev/rev_map). |
| 160 ['--spec', spec_string], | 172 ['--spec', spec_string], |
| 161 ['--root', root], | 173 ['--root', root], |
| 162 ['--revision_mapping_file', self.m.json.input(rev_map)], | 174 ['--revision_mapping_file', self.m.json.input(rev_map)], |
| 163 ['--git-cache-dir', cfg.cache_dir], | 175 ['--git-cache-dir', cfg.cache_dir], |
| 164 | 176 |
| 165 # 3. How to find the patch, if any (issue/patchset/patch_url). | 177 # 3. How to find the patch, if any (issue/patchset/patch_url). |
| 166 ['--issue', issue], | 178 ['--issue', issue], |
| 167 ['--patchset', patchset], | 179 ['--patchset', patchset], |
| 168 ['--patch_url', patch_url], | 180 ['--patch_url', patch_url], |
| 169 ['--rietveld_server', self._rietveld], | 181 ['--rietveld_server', rietveld or self._rietveld], |
| 170 ['--gerrit_repo', gerrit_repo], | 182 ['--gerrit_repo', gerrit_repo], |
| 171 ['--gerrit_ref', gerrit_ref], | 183 ['--gerrit_ref', gerrit_ref], |
| 172 ['--apply_issue_email_file', email_file], | 184 ['--apply_issue_email_file', email_file], |
| 173 ['--apply_issue_key_file', key_file], | 185 ['--apply_issue_key_file', key_file], |
| 174 | 186 |
| 175 # 4. Hookups to JSON output back into recipes. | 187 # 4. Hookups to JSON output back into recipes. |
| 176 ['--output_json', self.m.json.output()],] | 188 ['--output_json', self.m.json.output()],] |
| 177 | 189 |
| 178 | 190 |
| 179 # Collect all fixed revisions to simulate them in the json output. | 191 # Collect all fixed revisions to simulate them in the json output. |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 288 | 300 |
| 289 # bot_update actually just sets root to be the folder name of the | 301 # bot_update actually just sets root to be the folder name of the |
| 290 # first solution. | 302 # first solution. |
| 291 if step_result.json.output['did_run']: | 303 if step_result.json.output['did_run']: |
| 292 co_root = step_result.json.output['root'] | 304 co_root = step_result.json.output['root'] |
| 293 cwd = kwargs.get('cwd', self.m.path['slave_build']) | 305 cwd = kwargs.get('cwd', self.m.path['slave_build']) |
| 294 if 'checkout' not in self.m.path: | 306 if 'checkout' not in self.m.path: |
| 295 self.m.path['checkout'] = cwd.join(*co_root.split(self.m.path.sep)) | 307 self.m.path['checkout'] = cwd.join(*co_root.split(self.m.path.sep)) |
| 296 | 308 |
| 297 return step_result | 309 return step_result |
| OLD | NEW |