| 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 contextlib | 5 import contextlib |
| 6 import hashlib | 6 import hashlib |
| 7 | 7 |
| 8 from recipe_engine import recipe_api | 8 from recipe_engine import recipe_api |
| 9 | 9 |
| 10 | 10 |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 self.m.rietveld.calculate_issue_root(), | 141 self.m.rietveld.calculate_issue_root(), |
| 142 authentication=authentication) | 142 authentication=authentication) |
| 143 elif storage == PATCH_STORAGE_SVN: | 143 elif storage == PATCH_STORAGE_SVN: |
| 144 return self.apply_from_svn(cwd) | 144 return self.apply_from_svn(cwd) |
| 145 elif storage == PATCH_STORAGE_GIT: | 145 elif storage == PATCH_STORAGE_GIT: |
| 146 return self.apply_from_git(cwd) | 146 return self.apply_from_git(cwd) |
| 147 else: | 147 else: |
| 148 # Since this method is "maybe", we don't raise an Exception. | 148 # Since this method is "maybe", we don't raise an Exception. |
| 149 pass | 149 pass |
| 150 | 150 |
| 151 def get_files_affected_by_patch(self): | 151 def get_files_affected_by_patch(self, patch_root=None): |
| 152 """Returns list of paths to files affected by the patch. |
| 153 |
| 154 Argument: |
| 155 patch_root: path relative to api.path['root'], usually obtained from |
| 156 api.gclient.calculate_patch_root(patch_project) |
| 157 |
| 158 Returned paths will be relative to to patch_root. |
| 159 |
| 160 TODO(tandrii): remove this doc. |
| 161 Unless you use patch_root=None, in which case old behavior is used |
| 162 which returns paths relative to checkout aka solution[0].name. |
| 163 """ |
| 164 # patch_root must be set! None is for backwards compataibility and will be |
| 165 # removed. |
| 166 if patch_root is None: |
| 167 return self._old_get_files_affected_by_patch() |
| 168 step_result = self.m.git('diff', '--cached', '--name-only', |
| 169 cwd=self.m.path['slave_build'].join(patch_root), |
| 170 name='git diff to analyze patch', |
| 171 stdout=self.m.raw_io.output(), |
| 172 step_test_data=lambda: |
| 173 self.m.raw_io.test_api.stream_output('foo.cc')) |
| 174 paths = [self.m.path.join(patch_root, p) for p in |
| 175 step_result.stdout.split()] |
| 176 if self.m.platform.is_win: |
| 177 # Looks like "analyze" wants POSIX slashes even on Windows (since git |
| 178 # uses that format even on Windows). |
| 179 paths = [path.replace('\\', '/') for path in paths] |
| 180 step_result.presentation.logs['files'] = paths |
| 181 return paths |
| 182 |
| 183 |
| 184 def _old_get_files_affected_by_patch(self): |
| 152 git_diff_kwargs = {} | 185 git_diff_kwargs = {} |
| 153 issue_root = self.m.rietveld.calculate_issue_root() | 186 issue_root = self.m.rietveld.calculate_issue_root() |
| 154 if issue_root: | 187 if issue_root: |
| 155 git_diff_kwargs['cwd'] = self.m.path['checkout'].join(issue_root) | 188 git_diff_kwargs['cwd'] = self.m.path['checkout'].join(issue_root) |
| 156 step_result = self.m.git('diff', '--cached', '--name-only', | 189 step_result = self.m.git('diff', '--cached', '--name-only', |
| 157 name='git diff to analyze patch', | 190 name='git diff to analyze patch', |
| 158 stdout=self.m.raw_io.output(), | 191 stdout=self.m.raw_io.output(), |
| 159 step_test_data=lambda: | 192 step_test_data=lambda: |
| 160 self.m.raw_io.test_api.stream_output('foo.cc'), | 193 self.m.raw_io.test_api.stream_output('foo.cc'), |
| 161 **git_diff_kwargs) | 194 **git_diff_kwargs) |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 238 self.add_failure_reason(e.reason) | 271 self.add_failure_reason(e.reason) |
| 239 | 272 |
| 240 failure_hash = hashlib.sha1() | 273 failure_hash = hashlib.sha1() |
| 241 failure_hash.update(self.m.json.dumps(self._failure_reasons)) | 274 failure_hash.update(self.m.json.dumps(self._failure_reasons)) |
| 242 | 275 |
| 243 step_result = self.m.step.active_result | 276 step_result = self.m.step.active_result |
| 244 step_result.presentation.properties['failure_hash'] = \ | 277 step_result.presentation.properties['failure_hash'] = \ |
| 245 failure_hash.hexdigest() | 278 failure_hash.hexdigest() |
| 246 | 279 |
| 247 raise | 280 raise |
| OLD | NEW |