| Index: recipe_modules/bot_update/resources/bot_update.py
|
| diff --git a/recipe_modules/bot_update/resources/bot_update.py b/recipe_modules/bot_update/resources/bot_update.py
|
| index 08851020dd39a1246c9c509b953eae9a1cbfc555..044f0838f266018a443ba0e1fbad58a19f3998c6 100755
|
| --- a/recipe_modules/bot_update/resources/bot_update.py
|
| +++ b/recipe_modules/bot_update/resources/bot_update.py
|
| @@ -622,23 +622,6 @@ def apply_gerrit_ref(gerrit_repo, gerrit_ref, root, gerrit_reset,
|
| except SubprocessFailed as e:
|
| raise PatchFailed(e.message, e.code, e.output)
|
|
|
| -def check_flag(flag_file):
|
| - """Returns True if the flag file is present."""
|
| - return os.path.isfile(flag_file)
|
| -
|
| -
|
| -def delete_flag(flag_file):
|
| - """Remove bot update flag."""
|
| - if os.path.isfile(flag_file):
|
| - os.remove(flag_file)
|
| -
|
| -
|
| -def emit_flag(flag_file):
|
| - """Deposit a bot update flag on the system to tell gclient not to run."""
|
| - print 'Emitting flag file at %s' % flag_file
|
| - with open(flag_file, 'wb') as f:
|
| - f.write('Success!')
|
| -
|
|
|
| def get_commit_position(git_path, revision='HEAD'):
|
| """Dumps the 'git' log for a specific revision and parses out the commit
|
| @@ -850,14 +833,9 @@ def parse_args():
|
| parse.add_option('--gerrit_no_reset', action='store_true',
|
| help='Bypass calling reset after applying a gerrit ref.')
|
| parse.add_option('--specs', help='Gcilent spec.')
|
| - parse.add_option('-f', '--force', action='store_true',
|
| - help='Bypass check to see if we want to be run. '
|
| - 'Should ONLY be used locally or by smart recipes.')
|
| - parse.add_option('--revision_mapping',
|
| - help='{"path/to/repo/": "property_name"}')
|
| parse.add_option('--revision_mapping_file',
|
| - help=('Same as revision_mapping, except its a path to a json'
|
| - ' file containing that format.'))
|
| + help=('Path to a json file of the form '
|
| + '{"path/to/repo/": "property_name"}'))
|
| parse.add_option('--revision', action='append', default=[],
|
| help='Revision to check out. Can be any form of git ref. '
|
| 'Can prepend root@<rev> to specify which repository, '
|
| @@ -865,19 +843,9 @@ def parse_args():
|
| 'url. To specify Tip of Tree, set rev to HEAD. ')
|
| parse.add_option('--output_manifest', action='store_true',
|
| help=('Add manifest json to the json output.'))
|
| - parse.add_option('--slave_name', default=socket.getfqdn().split('.')[0],
|
| - help='Hostname of the current machine, '
|
| - 'used for determining whether or not to activate.')
|
| - parse.add_option('--build_dir', default=os.getcwd())
|
| - parse.add_option('--flag_file', default=path.join(os.getcwd(),
|
| - 'update.flag'))
|
| - parse.add_option('--shallow', action='store_true',
|
| - help='Use shallow clones for cache repositories.')
|
| parse.add_option('--clobber', action='store_true',
|
| help='Delete checkout first, always')
|
| - parse.add_option('--bot_update_clobber', action='store_true', dest='clobber',
|
| - help='(synonym for --clobber)')
|
| - parse.add_option('-o', '--output_json',
|
| + parse.add_option('--output_json',
|
| help='Output JSON information into a specified file')
|
| parse.add_option('--no_shallow', action='store_true',
|
| help='Bypass disk detection and never shallow clone. '
|
| @@ -904,14 +872,11 @@ def parse_args():
|
| del options.with_branch_heads
|
|
|
| try:
|
| - if options.revision_mapping_file:
|
| - if options.revision_mapping:
|
| - print ('WARNING: Ignoring --revision_mapping: --revision_mapping_file '
|
| - 'was set at the same time as --revision_mapping?')
|
| - with open(options.revision_mapping_file, 'r') as f:
|
| - options.revision_mapping = json.load(f)
|
| - elif options.revision_mapping:
|
| - options.revision_mapping = json.loads(options.revision_mapping)
|
| + if not options.revision_mapping_file:
|
| + parse.error('--revision_mapping_file is required')
|
| +
|
| + with open(options.revision_mapping_file, 'r') as f:
|
| + options.revision_mapping = json.load(f)
|
| except Exception as e:
|
| print (
|
| 'WARNING: Caught execption while parsing revision_mapping*: %s'
|
| @@ -930,14 +895,10 @@ def parse_args():
|
| def prepare(options, git_slns, active):
|
| """Prepares the target folder before we checkout."""
|
| dir_names = [sln.get('name') for sln in git_slns if 'name' in sln]
|
| - # If we're active now, but the flag file doesn't exist (we weren't active
|
| - # last run) or vice versa, blow away all checkouts.
|
| - if options.clobber or (bool(active) != bool(check_flag(options.flag_file))):
|
| + if options.clobber:
|
| ensure_no_checkout(dir_names)
|
| - if options.output_json:
|
| - # Make sure we tell recipes that we didn't run if the script exits here.
|
| - emit_json(options.output_json, did_run=active)
|
| - emit_flag(options.flag_file)
|
| + # Make sure we tell recipes that we didn't run if the script exits here.
|
| + emit_json(options.output_json, did_run=active)
|
|
|
| # Do a shallow checkout if the disk is less than 100GB.
|
| total_disk_space, free_disk_space = get_total_disk_space()
|
| @@ -950,9 +911,8 @@ def prepare(options, git_slns, active):
|
| percent_used)
|
| if not options.output_json:
|
| print '@@@STEP_TEXT@%s@@@' % step_text
|
| - if not options.shallow:
|
| - options.shallow = (total_disk_space < SHALLOW_CLONE_THRESHOLD
|
| - and not options.no_shallow)
|
| + shallow = (total_disk_space < SHALLOW_CLONE_THRESHOLD
|
| + and not options.no_shallow)
|
|
|
| # The first solution is where the primary DEPS file resides.
|
| first_sln = dir_names[0]
|
| @@ -961,10 +921,10 @@ def prepare(options, git_slns, active):
|
| print 'Revisions: %s' % options.revision
|
| revisions = parse_revisions(options.revision, first_sln)
|
| print 'Fetching Git checkout at %s@%s' % (first_sln, revisions[first_sln])
|
| - return revisions, step_text
|
| + return revisions, step_text, shallow
|
|
|
|
|
| -def checkout(options, git_slns, specs, revisions, step_text):
|
| +def checkout(options, git_slns, specs, revisions, step_text, shallow):
|
| first_sln = git_slns[0]['name']
|
| dir_names = [sln.get('name') for sln in git_slns if 'name' in sln]
|
| try:
|
| @@ -994,7 +954,7 @@ def checkout(options, git_slns, specs, revisions, step_text):
|
| apply_issue_key_file=options.apply_issue_key_file,
|
|
|
| # Finally, extra configurations such as shallowness of the clone.
|
| - shallow=options.shallow,
|
| + shallow=shallow,
|
| refs=options.refs,
|
| git_cache_dir=options.git_cache_dir,
|
| gerrit_reset=not options.gerrit_no_reset)
|
| @@ -1073,10 +1033,6 @@ def main():
|
| # Get inputs.
|
| options, _ = parse_args()
|
|
|
| - # Always run. This option will be removed in a later CL, but for now make sure
|
| - # that bot_update is ALWAYS set to run, no matter what.
|
| - options.force = True
|
| -
|
| # Check if this script should activate or not.
|
| active = True
|
|
|
| @@ -1093,11 +1049,10 @@ def main():
|
|
|
| try:
|
| # Dun dun dun, the main part of bot_update.
|
| - revisions, step_text = prepare(options, git_slns, active)
|
| - checkout(options, git_slns, specs, revisions, step_text)
|
| + revisions, step_text, shallow = prepare(options, git_slns, active)
|
| + checkout(options, git_slns, specs, revisions, step_text, shallow)
|
|
|
| except PatchFailed as e:
|
| - emit_flag(options.flag_file)
|
| # Return a specific non-zero exit code for patch failure (because it is
|
| # a failure), but make it different than other failures to distinguish
|
| # between infra failures (independent from patch author), and patch
|
| @@ -1108,12 +1063,6 @@ def main():
|
| return 87
|
| # Genuine patch problem.
|
| return 88
|
| - except Exception:
|
| - # Unexpected failure.
|
| - emit_flag(options.flag_file)
|
| - raise
|
| - else:
|
| - emit_flag(options.flag_file)
|
|
|
|
|
| if __name__ == '__main__':
|
|
|