99 lines
3.5 KiB
Python
99 lines
3.5 KiB
Python
# Copyright (C) 2022 The Android Open Source Project
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
def get_arg_value(args_list, arg_name):
|
|
"""
|
|
Fetches the value of a named argument from the list of args provided by a
|
|
Bazel action. If there are multiple instances of the arg present, this
|
|
function will return the first. This function makes all the same assumptions
|
|
as get_arg_values() below.
|
|
|
|
Arguments:
|
|
args_list (string[]): The list of arguments provided by the Bazel action.
|
|
i.e., bazel_action.argv
|
|
arg_name (string): The name of the argument to fetch the value of
|
|
Return:
|
|
The value corresponding to the specified argument name
|
|
"""
|
|
|
|
values = get_arg_values(args_list, arg_name)
|
|
if len(values) == 0:
|
|
return None
|
|
|
|
if len(values) != 1:
|
|
fail("More than one args found `%s`" % values)
|
|
|
|
return values[0]
|
|
|
|
def get_arg_values(args_list, arg_name):
|
|
"""
|
|
Fetches all the values of a named argument from the list of args provided
|
|
by a Bazel action, the argument and its values can repeat multiple times
|
|
and all the values will be returned.
|
|
|
|
This function assumes that the only
|
|
one argument is added per call to args.add() or per string passed to
|
|
args.add_all(). It still works when two values are passed to
|
|
args.add() as separate strings, however.
|
|
|
|
The above assumption implies that this function does not handle cases where
|
|
an argument name is separated from its value by an =, or any character
|
|
other than a space, in the final command.
|
|
|
|
Arguments:
|
|
args_list (string[]): The list of arguments provided by the Bazel action.
|
|
i.e., bazel_action.argv
|
|
arg_name (string): The name of the argument to fetch the value of
|
|
Return:
|
|
All the values corresponding to the specified argument name
|
|
"""
|
|
|
|
values = []
|
|
for i in range(1, len(args_list) - 1):
|
|
if args_list[i] == arg_name:
|
|
values.append(args_list[i + 1])
|
|
|
|
return values
|
|
|
|
def get_all_args_with_prefix(input_args, arg_prefix):
|
|
"""returns all arguments that start with arg_prefix
|
|
|
|
Args:
|
|
input_args (list[str]): list of arguments
|
|
arg_prefix (str): prefix of argument to search for
|
|
Returns:
|
|
args (list[str]): value in args that start with arg_prefix
|
|
"""
|
|
args = []
|
|
for a in input_args:
|
|
if a.startswith(arg_prefix):
|
|
args.append(a[len(arg_prefix):])
|
|
return args
|
|
|
|
def get_single_arg_with_prefix(input_args, arg_prefix):
|
|
"""returns all arguments that start with arg_prefix
|
|
|
|
Fails if more than one argument exists.
|
|
|
|
Args:
|
|
input_args (list[str]): list of arguments
|
|
arg_prefix (str): prefix of argument to search for
|
|
Returns:
|
|
args (str): value in args that starts with arg_prefix
|
|
"""
|
|
args = get_all_args_with_prefix(input_args, arg_prefix)
|
|
if len(args) != 1:
|
|
fail("expected single argument with prefix `%s`, got %d; args = `%s`" % (arg_prefix, len(args), args))
|
|
return args[0]
|