| Index: recipes.py
 | 
| diff --git a/recipes.py b/recipes.py
 | 
| index 0dae267a3d85b49f77cd888e0ff1d3fafbfaaecc..0e34712c8e061fa463cac62149352ce29a9d3e36 100755
 | 
| --- a/recipes.py
 | 
| +++ b/recipes.py
 | 
| @@ -33,7 +33,7 @@ from recipe_engine import util as recipe_util
 | 
|  from google.protobuf import json_format as jsonpb
 | 
|  
 | 
|  
 | 
| -def test(config_file, package_deps, args, op_args):
 | 
| +def test(config_file, package_deps, args):
 | 
|    try:
 | 
|      from recipe_engine import test
 | 
|    except ImportError:
 | 
| @@ -55,7 +55,7 @@ def test(config_file, package_deps, args, op_args):
 | 
|  
 | 
|    return test.main(
 | 
|        universe_view, raw_args=args.args,
 | 
| -      engine_flags=op_args.engine_flags)
 | 
| +      engine_flags=args.operational_args.engine_flags)
 | 
|  
 | 
|  
 | 
|  def lint(config_file, package_deps, args):
 | 
| @@ -148,7 +148,7 @@ def new_handle_recipe_return(result, result_filename, stream_engine):
 | 
|    return 0
 | 
|  
 | 
|  
 | 
| -def run(config_file, package_deps, args, op_args):
 | 
| +def run(config_file, package_deps, args):
 | 
|    from recipe_engine import run as recipe_run
 | 
|    from recipe_engine import loader
 | 
|    from recipe_engine import step_runner
 | 
| @@ -164,6 +164,7 @@ def run(config_file, package_deps, args, op_args):
 | 
|        return None
 | 
|      return _op_properties_to_dict(op_args.properties.property)
 | 
|  
 | 
| +  op_args = args.operational_args
 | 
|    op_properties = get_properties_from_operational_args(op_args)
 | 
|    if args.properties and op_properties:
 | 
|      raise ValueError(
 | 
| @@ -383,9 +384,17 @@ def add_common_args(parser):
 | 
|    parser.add_argument(
 | 
|        '--disable-bootstrap', action='store_false', dest='use_bootstrap',
 | 
|        help='Disables bootstrap (see --use-bootstrap)')
 | 
| +
 | 
| +  def operational_args_type(value):
 | 
| +    with open(value) as fd:
 | 
| +      return jsonpb.ParseDict(json.load(fd), arguments_pb2.Arguments())
 | 
| +
 | 
| +  parser.set_defaults(operational_args=arguments_pb2.Arguments())
 | 
| +
 | 
|    parser.add_argument(
 | 
| -      '--operational-args-path', action='store',
 | 
| -      type=os.path.abspath,
 | 
| +      '--operational-args-path',
 | 
| +      dest='operational_args',
 | 
| +      type=operational_args_type,
 | 
|        help='The path to an operational Arguments file. If provided, this file '
 | 
|             'must contain a JSONPB-encoded Arguments protobuf message, and will '
 | 
|             'be integrated into the runtime parameters.')
 | 
| @@ -596,13 +605,6 @@ def main():
 | 
|    args = parser.parse_args()
 | 
|    post_process_common_args(parser, args)
 | 
|  
 | 
| -  # Load/parse operational arguments.
 | 
| -  op_args = arguments_pb2.Arguments()
 | 
| -  if args.operational_args_path is not None:
 | 
| -    with open(args.operational_args_path) as fd:
 | 
| -      data = fd.read()
 | 
| -    jsonpb.Parse(data, op_args)
 | 
| -
 | 
|    # TODO(iannucci): We should always do logging.basicConfig() (probably with
 | 
|    # logging.WARNING), even if no verbose is passed. However we need to be
 | 
|    # careful as this could cause issues with spurious/unexpected output. I think
 | 
| @@ -675,7 +677,7 @@ def main():
 | 
|            ] + sys.argv[1:])
 | 
|  
 | 
|      # Standard recipe engine operation.
 | 
| -    return _real_main(args, op_args)
 | 
| +    return _real_main(args)
 | 
|  
 | 
|    finally:
 | 
|      # If we're using a temporary deps directory, clean it up here.
 | 
| @@ -690,8 +692,8 @@ def main():
 | 
|        shutil.rmtree(temp_deps_dir, onerror=on_error)
 | 
|  
 | 
|  
 | 
| -def _real_main(args, op_args):
 | 
| -  from recipe_engine import package, package_io
 | 
| +def _real_main(args):
 | 
| +  from recipe_engine import package
 | 
|  
 | 
|    # Commands which do not require config_file, package_deps, and other objects
 | 
|    # initialized later.
 | 
| @@ -720,13 +722,13 @@ def _real_main(args, op_args):
 | 
|      assert not args.no_fetch, 'Fetch? No-fetch? Make up your mind!'
 | 
|      return 0
 | 
|    elif args.command == 'test':
 | 
| -    return test(config_file, package_deps, args, op_args)
 | 
| +    return test(config_file, package_deps, args)
 | 
|    elif args.command == 'bundle':
 | 
|      return bundle(config_file, package_deps, args)
 | 
|    elif args.command == 'lint':
 | 
|      return lint(config_file, package_deps, args)
 | 
|    elif args.command == 'run':
 | 
| -    return run(config_file, package_deps, args, op_args)
 | 
| +    return run(config_file, package_deps, args)
 | 
|    elif args.command == 'autoroll':
 | 
|      return autoroll(repo_root, config_file, args)
 | 
|    elif args.command == 'depgraph':
 | 
| 
 |