@ -376,8 +376,10 @@ class GerritAccessor(object):
To avoid excessive Gerrit calls , caches the results .
"""
def __init__ ( self , host ):
def __init__ ( self , host , project = None , branch = None ):
self . host = host
self . project = project
self . branch = branch
self . cache = { }
def _FetchChangeDetail ( self , issue ) :
@ -650,10 +652,19 @@ class InputApi(object):
# Temporary files we must manually remove at the end of a run.
self . _named_temporary_files = [ ]
# TODO(dpranke): figure out a list of all approved owners for a repo
# in order to be able to handle wildcard OWNERS files?
self . owners_client = owners_client . DepotToolsClient (
change . RepositoryRoot ( ) , change . UpstreamBranch ( ) , os_path = self . os_path )
host = ' '
project = ' '
branch = ' '
if gerrit_obj :
host = gerrit_obj . host or ' '
project = gerrit_obj . project or ' '
branch = gerrit_obj . branch or ' '
self . owners_client = owners_client . GetCodeOwnersClient (
root = change . RepositoryRoot ( ) ,
host = host ,
project = project ,
branch = branch )
self . owners_db = owners_db . Database (
change . RepositoryRoot ( ) , fopen = open , os_path = self . os_path )
self . owners_finder = owners_finder . OwnersFinder
@ -1507,7 +1518,7 @@ def DoPostUploadExecuter(change,
class PresubmitExecuter ( object ) :
def __init__ ( self , change , committing , verbose , gerrit_obj , dry_run = None ,
thread_pool = None , parallel = False , gerrit_project = None ):
thread_pool = None , parallel = False ):
"""
Args :
change : The Change object .
@ -1525,7 +1536,6 @@ class PresubmitExecuter(object):
self . more_cc = [ ]
self . thread_pool = thread_pool
self . parallel = parallel
self . gerrit_project = gerrit_project
def ExecPresubmitScript ( self , script_text , presubmit_path ) :
""" Executes a single presubmit script.
@ -1568,9 +1578,10 @@ class PresubmitExecuter(object):
# Get the URL of git remote origin and use it to identify host and project
host = ' '
if self . gerrit and self . gerrit . host :
host = self . gerrit . host
project = self . gerrit_project or ' '
project = ' '
if self . gerrit :
host = self . gerrit . host or ' '
project = self . gerrit . project or ' '
# Prefix for test names
prefix = ' presubmit: %s / %s : %s / ' % ( host , project , rel_path )
@ -1669,8 +1680,7 @@ def DoPresubmitChecks(change,
gerrit_obj ,
dry_run = None ,
parallel = False ,
json_output = None ,
gerrit_project = None ) :
json_output = None ) :
""" Runs all presubmit checks that apply to the files in the change.
This finds all PRESUBMIT . py files in directories enclosing the files in the
@ -1713,7 +1723,7 @@ def DoPresubmitChecks(change,
results = [ ]
thread_pool = ThreadPool ( )
executer = PresubmitExecuter ( change , committing , verbose , gerrit_obj ,
dry_run , thread_pool , parallel , gerrit_project )
dry_run , thread_pool , parallel )
if default_presubmit :
if verbose :
sys . stdout . write ( ' Running default presubmit script. \n ' )
@ -1870,11 +1880,15 @@ def _parse_gerrit_options(parser, options):
parser : The parser used to parse the arguments from command line .
options : The arguments parsed from command line .
Returns :
A GerritAccessor object if options . gerrit_url is set , or None otherwise .
A GerritAccessor object if options . gerrit_url or options . gerrit_project are
set , or None otherwise .
"""
gerrit_obj = None
if options . gerrit_url :
gerrit_obj = GerritAccessor ( urlparse . urlparse ( options . gerrit_url ) . netloc )
if options . gerrit_url or options . gerrit_project :
gerrit_obj = GerritAccessor (
urlparse . urlparse ( options . gerrit_url or ' ' ) . netloc ,
options . gerrit_project ,
options . target_ref )
if not options . gerrit_fetch :
return gerrit_obj
@ -1960,6 +1974,8 @@ def main(argv=None):
' executing presubmit or post-upload hooks. fnmatch '
' wildcards can also be used. ' )
parser . add_argument ( ' --gerrit_project ' , help = argparse . SUPPRESS )
parser . add_argument ( ' --target_ref ' ,
help = ' The remote branch ref to use for the change. ' )
options = parser . parse_args ( argv )
log_level = logging . ERROR
@ -1992,8 +2008,7 @@ def main(argv=None):
gerrit_obj ,
options . dry_run ,
options . parallel ,
options . json_output ,
options . gerrit_project )
options . json_output )
except PresubmitFailure as e :
print ( e , file = sys . stderr )
print ( ' Maybe your depot_tools is out of date? ' , file = sys . stderr )