blob: 8c020efcf98d1c7469dc753f094104697d68defb [file] [log] [blame]
# 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]