Skip to content

Commit 35ca29e

Browse files
committed
Crutch to make work tfupdate as expected
1 parent 3233c37 commit 35ca29e

3 files changed

Lines changed: 165 additions & 6 deletions

File tree

hooks/_common.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ function common::per_dir_hook {
212212
dir_path="${dir_path//__REPLACED__SPACE__/ }"
213213
pushd "$dir_path" > /dev/null || continue
214214

215-
per_dir_hook_unique_part "${args[@]}" "$dir_path"
215+
per_dir_hook_unique_part "$dir_path" "${args[@]}"
216216

217217
local exit_code=$?
218218
if [ $exit_code -ne 0 ]; then

hooks/tfupdate.sh

Lines changed: 81 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,20 +21,96 @@ function main {
2121
# Unique part of `common::per_dir_hook`. The function is executed in loop
2222
# on each provided dir path. Run wrapped tool with specified arguments
2323
# Arguments:
24-
# args (string with array) arguments that configure wrapped tool behavior
2524
# dir_path (string) PATH to dir relative to git repo root.
2625
# Can be used in error logging
26+
# args (array) arguments that configure wrapped tool behavior
2727
# Outputs:
2828
# If failed - print out hook checks status
2929
#######################################################################
3030
function per_dir_hook_unique_part {
31-
local -r args="$1"
3231
# shellcheck disable=SC2034 # Unused var.
33-
local -r dir_path="$2"
32+
local -r dir_path="$1"
33+
shift 1
34+
declare -a -r args=("$@")
35+
36+
local expand_args=()
37+
for arg in "${args[@]}"; do
38+
if [[ "$arg" == *'"'* ]]; then
39+
elements=($arg)
40+
unset start
41+
unset end
42+
unset quoted_var
43+
44+
for i in "${!elements[@]}"; do
45+
46+
if [[ "${elements[i]}" =~ ^\" ]]; then
47+
start=$i
48+
fi
49+
50+
if [[ "${elements[i]}" =~ \"$ ]]; then
51+
end=$i
52+
fi
53+
done
54+
55+
for i in $(seq 0 $((start - 1))); do
56+
expand_args+=("${elements[i]}")
57+
done
58+
59+
for i in $(seq "$start" "$end"); do
60+
quoted_var+="${elements[i]} "
61+
done
62+
quoted_var2=${quoted_var#'"'}
63+
quoted_var2=${quoted_var2%'" '}
64+
expand_args+=("$quoted_var2")
65+
66+
for i in $(seq $((end + 1)) $((${#elements[@]} - 1))); do
67+
expand_args+=("${elements[i]}")
68+
done
69+
70+
elif
71+
[[ "$arg" == *"'"* ]]
72+
then
73+
# Mostly copy-paste
74+
75+
elements=($arg)
76+
unset start
77+
unset end
78+
unset quoted_var
79+
80+
for i in "${!elements[@]}"; do
81+
82+
if [[ "${elements[i]}" =~ ^\' ]]; then
83+
start=$i
84+
fi
85+
86+
if [[ "${elements[i]}" =~ \'$ ]]; then
87+
end=$i
88+
fi
89+
done
90+
91+
for i in $(seq 0 $((start - 1))); do
92+
expand_args+=("${elements[i]}")
93+
done
94+
95+
for i in $(seq "$start" "$end"); do
96+
quoted_var+="${elements[i]} "
97+
done
98+
quoted_var2=${quoted_var#"'"}
99+
quoted_var2=${quoted_var2%"' "}
100+
expand_args+=("$quoted_var2")
101+
102+
for i in $(seq $((end + 1)) $((${#elements[@]} - 1))); do
103+
expand_args+=("${elements[i]}")
104+
done
105+
106+
else
107+
#
108+
expand_args+=($arg)
109+
fi
110+
done
34111

35112
# pass the arguments to hook
36-
# shellcheck disable=SC2068 # hook fails when quoting is used ("$arg[@]")
37-
tfupdate ${args[@]} .
113+
tfupdate "${expand_args[@]}" .
38114

39115
# return exit code to common::per_dir_hook
40116
local exit_code=$?

t.sh

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
args=('provider google' "--ignore-path 'sdfs/s fdfs'" '--version ">= 4.18.0, < 5"')
2+
3+
function per_dir_hook_unique_part {
4+
5+
local expand_args=()
6+
for arg in "${args[@]}"; do
7+
if [[ "$arg" == *'"'* ]]; then
8+
elements=( $arg )
9+
unset start
10+
unset end
11+
unset quoted_var
12+
13+
for i in "${!elements[@]}"; do
14+
15+
if [[ "${elements[i]}" =~ ^\" ]]; then
16+
start=$i
17+
fi
18+
19+
if [[ "${elements[i]}" =~ \"$ ]]; then
20+
end=$i
21+
fi
22+
done
23+
24+
for i in $(seq 0 $((start-1))); do
25+
expand_args+=( "${elements[i]}" )
26+
done
27+
28+
for i in $(seq "$start" "$end"); do
29+
quoted_var+="${elements[i]} "
30+
done
31+
quoted_var2=${quoted_var#'"'}
32+
quoted_var2=${quoted_var2%'" '}
33+
expand_args+=( "$quoted_var2" )
34+
35+
for i in $(seq $((end+1)) $((${#elements[@]}-1))); do
36+
expand_args+=( "${elements[i]}" )
37+
done
38+
39+
40+
elif [[ "$arg" == *"'"* ]]; then
41+
# Mostly copy-paste
42+
43+
elements=( $arg )
44+
unset start
45+
unset end
46+
unset quoted_var
47+
48+
for i in "${!elements[@]}"; do
49+
50+
if [[ "${elements[i]}" =~ ^\' ]]; then
51+
start=$i
52+
fi
53+
54+
if [[ "${elements[i]}" =~ \'$ ]]; then
55+
end=$i
56+
fi
57+
done
58+
59+
for i in $(seq 0 $((start-1))); do
60+
expand_args+=( "${elements[i]}" )
61+
done
62+
63+
for i in $(seq "$start" "$end"); do
64+
quoted_var+="${elements[i]} "
65+
done
66+
quoted_var2=${quoted_var#"'"}
67+
quoted_var2=${quoted_var2%"' "}
68+
expand_args+=( "$quoted_var2" )
69+
70+
for i in $(seq $((end+1)) $((${#elements[@]}-1))); do
71+
expand_args+=( "${elements[i]}" )
72+
done
73+
74+
else
75+
#
76+
expand_args+=( $arg )
77+
fi
78+
done
79+
80+
printf ":%s:\n" "${expand_args[@]}"
81+
}
82+
83+
per_dir_hook_unique_part

0 commit comments

Comments
 (0)