@ -29,16 +29,9 @@ class GitApi(recipe_api.RecipeApi):
options = kwargs . pop ( ' git_config_options ' , { } )
for k , v in sorted ( options . items ( ) ) :
git_cmd . extend ( [ ' -c ' , ' %s = %s ' % ( k , v ) ] )
can_fail_build = kwargs . pop ( ' can_fail_build ' , True )
try :
with self . m . context ( cwd = ( self . m . context . cwd or self . m . path [ ' checkout ' ] ) ) :
return self . m . step ( name , git_cmd + list ( args ) , infra_step = infra_step ,
* * kwargs )
except self . m . step . StepFailure as f :
if can_fail_build :
raise
else :
return f . result
with self . m . context ( cwd = ( self . m . context . cwd or self . m . path [ ' checkout ' ] ) ) :
return self . m . step ( name , git_cmd + list ( args ) , infra_step = infra_step ,
* * kwargs )
def fetch_tags ( self , remote_name = None , * * kwargs ) :
""" Fetches all tags from the remote. """
@ -54,14 +47,14 @@ class GitApi(recipe_api.RecipeApi):
return self ( ' cat-file ' , ' blob ' , ' %s : %s ' % ( commit_hash , file_path ) ,
* * kwargs )
def count_objects ( self , previous_result = None , can_fail_build = False , * * kwargs ) :
def count_objects ( self , previous_result = None , raise_on_failure = False , * * kwargs ) :
""" Returns `git count-objects` result as a dict.
Args :
* previous_result ( dict ) : the result of previous count_objects call .
If passed , delta is reported in the log and step text .
* can_fail_build ( bool ) : if True , may fail the build and / or raise an
exception . Defaults to False .
* raise_on_failure ( bool ) : if True , an exception will be raised if the
operation fails . Defaults to False .
Returns :
A dict of count - object values , or None if count - object run failed .
@ -77,7 +70,7 @@ class GitApi(recipe_api.RecipeApi):
try :
step_result = self (
' count-objects ' , ' -v ' , stdout = self . m . raw_io . output ( ) ,
can_fail_build= can_fail_build , * * kwargs )
raise_on_failure= raise_on_failure , * * kwargs )
if not step_result . stdout :
return None
@ -116,14 +109,14 @@ class GitApi(recipe_api.RecipeApi):
if step_result :
step_result . presentation . logs [ ' exception ' ] = recipe_util . format_ex ( ex )
step_result . presentation . status = self . m . step . WARNING
if can_fail_build :
if raise_on_failure :
raise recipe_api . InfraFailure ( ' count-objects failed: %s ' % ex )
return None
def checkout ( self , url , ref = None , dir_path = None , recursive = False ,
submodules = True , submodule_update_force = False ,
keep_paths = None , step_suffix = None ,
curl_trace_file = None , can_fail_build = True ,
curl_trace_file = None , raise_on_failure = True ,
set_got_revision = False , remote_name = None ,
display_fetch_size = None , file_name = None ,
submodule_update_recursive = True ,
@ -143,7 +136,7 @@ class GitApi(recipe_api.RecipeApi):
* curl_trace_file ( Path ) : if not None , dump GIT_CURL_VERBOSE = 1 trace to that
file . Useful for debugging git issue reproducible only on bots . It has
a side effect of all stderr output of ' git fetch ' going to that file .
* can_fail_build ( bool ) : if False , ignore errors during fetch or checkout .
* raise_on_failure ( bool ) : if False , ignore errors during fetch or checkout .
* set_got_revision ( bool ) : if True , resolves HEAD and sets got_revision
property .
* remote_name ( str ) : name of the git remote to use
@ -208,17 +201,17 @@ class GitApi(recipe_api.RecipeApi):
self ( ' cache ' , ' populate ' , ' -c ' ,
self . m . path [ ' cache ' ] . join ( ' git ' ) , url ,
name = ' populate cache ' ,
can_fail_build= can_fail_build )
raise_on_failure= raise_on_failure )
dir_cmd = self (
' cache ' , ' exists ' , ' --quiet ' ,
' --cache-dir ' , self . m . path [ ' cache ' ] . join ( ' git ' ) , url ,
can_fail_build= can_fail_build ,
raise_on_failure= raise_on_failure ,
stdout = self . m . raw_io . output ( ) ,
step_test_data = lambda :
self . m . raw_io . test_api . stream_output ( ' mirror_dir ' ) )
mirror_dir = dir_cmd . stdout . strip ( ) . decode ( ' utf-8 ' )
self ( ' remote ' , ' set-url ' , ' origin ' , mirror_dir ,
can_fail_build= can_fail_build )
raise_on_failure= raise_on_failure )
# There are five kinds of refs we can be handed:
# 0) None. In this case, we default to api.buildbucket.gitiles_commit.ref.
@ -273,7 +266,7 @@ class GitApi(recipe_api.RecipeApi):
self ( ' fetch ' , * fetch_args ,
name = fetch_step_name ,
stderr = fetch_stderr ,
can_fail_build= can_fail_build )
raise_on_failure= raise_on_failure )
if display_fetch_size :
self . count_objects (
name = ' count-objects after %s ' % fetch_step_name ,
@ -284,17 +277,17 @@ class GitApi(recipe_api.RecipeApi):
if file_name :
self ( ' checkout ' , ' -f ' , checkout_ref , ' -- ' , file_name ,
name = ' git checkout %s ' % step_suffix ,
can_fail_build= can_fail_build )
raise_on_failure= raise_on_failure )
else :
self ( ' checkout ' , ' -f ' , checkout_ref ,
name = ' git checkout %s ' % step_suffix ,
can_fail_build= can_fail_build )
raise_on_failure= raise_on_failure )
rev_parse_step = self ( ' rev-parse ' , ' HEAD ' ,
name = ' read revision ' ,
stdout = self . m . raw_io . output_text ( ) ,
can_fail_build = False ,
raise_on_failure = False ,
step_test_data = lambda :
self . m . raw_io . test_api . stream_output_text ( ' deadbeef ' ) )
@ -310,12 +303,12 @@ class GitApi(recipe_api.RecipeApi):
self ( ' clean ' , ' -f ' , ' -d ' , ' -x ' , * clean_args ,
name = ' git clean %s ' % step_suffix ,
can_fail_build= can_fail_build )
raise_on_failure= raise_on_failure )
if submodules :
self ( ' submodule ' , ' sync ' ,
name = ' submodule sync %s ' % step_suffix ,
can_fail_build= can_fail_build )
raise_on_failure= raise_on_failure )
submodule_update = [ ' submodule ' , ' update ' , ' --init ' ]
if submodule_update_recursive :
submodule_update . append ( ' --recursive ' )
@ -323,7 +316,7 @@ class GitApi(recipe_api.RecipeApi):
submodule_update . append ( ' --force ' )
self ( * submodule_update ,
name = ' submodule update %s ' % step_suffix ,
can_fail_build= can_fail_build )
raise_on_failure= raise_on_failure )
return retVal