extract_utils: target_file() and target_args() cleanup

* Strip target_args from target_file at callee instead of at caller
* WARNING! Changes (improperly documented) behavior of prefix_match()
  function, which is expected to not strip target_args(), and the root
  cause why stripping target_args was currently done at caller. Will be
  addressed in next patch.

Change-Id: I820d2350aa64ff41374809fcb22f812257132652
Signed-off-by: Vladimir Oltean <olteanv@gmail.com>
This commit is contained in:
Vladimir Oltean 2018-06-24 20:09:55 +03:00 committed by Michael Bestas
parent 59074e6832
commit 6a7946baeb

View file

@ -101,41 +101,47 @@ function setup_vendor() {
}
#
# target_file:
#
# $1: colon delimited list
#
# Returns destination filename without args
# input: spec in the form of "src[:dst][;args]"
# output: "dst" if present, "src" otherwise.
#
function target_file() {
local LINE="$1"
local SPLIT=(${LINE//:/ })
local COUNT=${#SPLIT[@]}
if [ "$COUNT" -gt "1" ]; then
if [[ "${SPLIT[1]}" =~ .*/.* ]]; then
printf '%s\n' "${SPLIT[1]}"
return 0
fi
fi
printf '%s\n' "${SPLIT[0]}"
local SPEC="$1"
local SPLIT=(${SPEC//:/ })
local ARGS="$(target_args ${SPEC})"
local DST=
case ${#SPLIT[@]} in
1)
# The spec doesn't have a : delimiter
DST="${SPLIT[0]}"
;;
*)
# The spec actually has a src:dst format
DST="${SPLIT[1]}"
;;
esac
# Remove target_args suffix, if present
echo "${DST%;${ARGS}}"
}
#
# target_args:
#
# $1: semicolon delimited list
#
# Returns optional arguments (last value) for given target
# input: spec in the form of "src[:dst][;args]"
# output: "args" if present, "" otherwise.
#
function target_args() {
local LINE="$1"
local SPLIT=(${LINE//;/ })
local COUNT=${#SPLIT[@]}
if [ "$COUNT" -gt "1" ]; then
if [[ ! "${SPLIT[$COUNT-1]}" =~ .*/.* ]]; then
printf '%s\n' "${SPLIT[$COUNT-1]}"
fi
fi
local SPEC="$1"
local SPLIT=(${SPEC//;/ })
local ARGS=
case ${#SPLIT[@]} in
1)
# No ";" delimiter in the spec.
;;
*)
# The "args" are whatever comes after the ";" character.
# Basically the spec stripped of whatever is to the left of ";".
ARGS="${SPEC#${SPLIT[0]};}"
;;
esac
echo "${ARGS}"
}
#
@ -219,7 +225,7 @@ function write_product_copy_files() {
LINEEND=""
fi
TARGET=$(echo $(target_file "$FILE") | sed 's/\;.*//')
TARGET=$(target_file "$FILE")
if [ "$TREBLE_COMPAT" == "true" ] || [ "$TREBLE_COMPAT" == "1" ]; then
if prefix_match_file "vendor/" $TARGET ; then
local OUTTARGET=$(truncate_file $TARGET)
@ -267,7 +273,7 @@ function write_packages() {
local SRC=
for P in "${FILELIST[@]}"; do
FILE=$(echo $(target_file "$P") | sed 's/\;.*//')
FILE=$(target_file "$P")
ARGS=$(target_args "$P")
BASENAME=$(basename "$FILE")
@ -949,7 +955,7 @@ function extract() {
for (( i=1; i<COUNT+1; i++ )); do
local FROM=$(echo $(target_file "${FILELIST[$i-1]}") | sed 's/\;.*//')
local FROM=$(target_file "${FILELIST[$i-1]}")
local ARGS=$(target_args "${FILELIST[$i-1]}")
local SPLIT=(${FILELIST[$i-1]//:/ })
local FILE=$(echo "${SPLIT[0]#-}" | sed 's/\;.*//')