Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(64)

Side by Side Diff: recipe_modules/git/api.py

Issue 1693993002: Make git.checkout return the commit hash. (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | recipe_modules/git/example.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 import itertools 5 import itertools
6 import re 6 import re
7 7
8 from recipe_engine import recipe_api 8 from recipe_engine import recipe_api
9 9
10 class GitApi(recipe_api.RecipeApi): 10 class GitApi(recipe_api.RecipeApi):
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 a side effect of all stderr output of 'git fetch' going to that file. 133 a side effect of all stderr output of 'git fetch' going to that file.
134 can_fail_build (bool): if False, ignore errors during fetch or checkout. 134 can_fail_build (bool): if False, ignore errors during fetch or checkout.
135 set_got_revision (bool): if True, resolves HEAD and sets got_revision 135 set_got_revision (bool): if True, resolves HEAD and sets got_revision
136 property. 136 property.
137 remote_name (str): name of the git remote to use 137 remote_name (str): name of the git remote to use
138 display_fetch_size (bool): if True, run `git count-objects` before and 138 display_fetch_size (bool): if True, run `git count-objects` before and
139 after fetch and display delta. Adds two more steps. Defaults to False. 139 after fetch and display delta. Adds two more steps. Defaults to False.
140 file_name (str): optional path to a single file to checkout. 140 file_name (str): optional path to a single file to checkout.
141 submodule_update_recursive (bool): if True, updates submodules 141 submodule_update_recursive (bool): if True, updates submodules
142 recursively. 142 recursively.
143
144 Returns: If set_got_revision is True and the checkout was successful, this
dnj 2016/02/12 21:54:45 Why not always return it, even if set_got_revision
145 returns the commit hash of the checked-out-repo. Otherwise this returns
146 None.
143 """ 147 """
148 retVal = None
149
144 # TODO(robertocn): Break this function and refactor calls to it. 150 # TODO(robertocn): Break this function and refactor calls to it.
145 # The problem is that there are way too many unrealated use cases for 151 # The problem is that there are way too many unrealated use cases for
146 # it, and the function's signature is getting unwieldy and its body 152 # it, and the function's signature is getting unwieldy and its body
147 # unreadable. 153 # unreadable.
148 display_fetch_size = display_fetch_size or False 154 display_fetch_size = display_fetch_size or False
149 if not dir_path: 155 if not dir_path:
150 dir_path = url.rsplit('/', 1)[-1] 156 dir_path = url.rsplit('/', 1)[-1]
151 if dir_path.endswith('.git'): # ex: https://host/foobar.git 157 if dir_path.endswith('.git'): # ex: https://host/foobar.git
152 dir_path = dir_path[:-len('.git')] 158 dir_path = dir_path[:-len('.git')]
153 159
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 255
250 if set_got_revision: 256 if set_got_revision:
251 rev_parse_step = self('rev-parse', 'HEAD', 257 rev_parse_step = self('rev-parse', 'HEAD',
252 cwd=dir_path, 258 cwd=dir_path,
253 name='set got_revision', 259 name='set got_revision',
254 stdout=self.m.raw_io.output(), 260 stdout=self.m.raw_io.output(),
255 can_fail_build=False) 261 can_fail_build=False)
256 262
257 if rev_parse_step.presentation.status == 'SUCCESS': 263 if rev_parse_step.presentation.status == 'SUCCESS':
258 sha = rev_parse_step.stdout.strip() 264 sha = rev_parse_step.stdout.strip()
265 retVal = sha
259 rev_parse_step.presentation.properties['got_revision'] = sha 266 rev_parse_step.presentation.properties['got_revision'] = sha
260 267
261 clean_args = list(itertools.chain( 268 clean_args = list(itertools.chain(
262 *[('-e', path) for path in keep_paths or []])) 269 *[('-e', path) for path in keep_paths or []]))
263 270
264 self('clean', '-f', '-d', '-x', *clean_args, 271 self('clean', '-f', '-d', '-x', *clean_args,
265 name='git clean%s' % step_suffix, 272 name='git clean%s' % step_suffix,
266 cwd=dir_path, 273 cwd=dir_path,
267 can_fail_build=can_fail_build) 274 can_fail_build=can_fail_build)
268 275
269 if submodules: 276 if submodules:
270 self('submodule', 'sync', 277 self('submodule', 'sync',
271 name='submodule sync%s' % step_suffix, 278 name='submodule sync%s' % step_suffix,
272 cwd=dir_path, 279 cwd=dir_path,
273 can_fail_build=can_fail_build) 280 can_fail_build=can_fail_build)
274 submodule_update = ['submodule', 'update', '--init'] 281 submodule_update = ['submodule', 'update', '--init']
275 if submodule_update_recursive: 282 if submodule_update_recursive:
276 submodule_update.append('--recursive') 283 submodule_update.append('--recursive')
277 if submodule_update_force: 284 if submodule_update_force:
278 submodule_update.append('--force') 285 submodule_update.append('--force')
279 self(*submodule_update, 286 self(*submodule_update,
280 name='submodule update%s' % step_suffix, 287 name='submodule update%s' % step_suffix,
281 cwd=dir_path, 288 cwd=dir_path,
282 can_fail_build=can_fail_build) 289 can_fail_build=can_fail_build)
283 290
291 return retVal
292
284 def get_timestamp(self, commit='HEAD', test_data=None, **kwargs): 293 def get_timestamp(self, commit='HEAD', test_data=None, **kwargs):
285 """Find and return the timestamp of the given commit.""" 294 """Find and return the timestamp of the given commit."""
286 step_test_data = None 295 step_test_data = None
287 if test_data is not None: 296 if test_data is not None:
288 step_test_data = lambda: self.m.raw_io.test_api.stream_output(test_data) 297 step_test_data = lambda: self.m.raw_io.test_api.stream_output(test_data)
289 return self('show', commit, '--format=%at', '-s', 298 return self('show', commit, '--format=%at', '-s',
290 stdout=self.m.raw_io.output(), 299 stdout=self.m.raw_io.output(),
291 step_test_data=step_test_data).stdout.rstrip() 300 step_test_data=step_test_data).stdout.rstrip()
292 301
293 def rebase(self, name_prefix, branch, dir_path, remote_name=None, 302 def rebase(self, name_prefix, branch, dir_path, remote_name=None,
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 349
341 Args: 350 Args:
342 bundle_path (Path): The path of the output bundle. 351 bundle_path (Path): The path of the output bundle.
343 refs (list): The list of refs to include in the bundle. If None, all 352 refs (list): The list of refs to include in the bundle. If None, all
344 refs in the Git checkout will be bundled. 353 refs in the Git checkout will be bundled.
345 kwargs: Forwarded to '__call__'. 354 kwargs: Forwarded to '__call__'.
346 """ 355 """
347 if not rev_list_args: 356 if not rev_list_args:
348 rev_list_args = ['--all'] 357 rev_list_args = ['--all']
349 self('bundle', 'create', bundle_path, *rev_list_args, **kwargs) 358 self('bundle', 'create', bundle_path, *rev_list_args, **kwargs)
OLDNEW
« no previous file with comments | « no previous file | recipe_modules/git/example.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698