22
22
23
23
# Bash breaks words on : by default. Subproject tasks have ':'
24
24
# Avoid inaccurate completions for subproject tasks
25
- COMP_WORDBREAKS=$( echo " $COMP_WORDBREAKS " | sed -e ' s/://g' )
25
+ # shellcheck disable=SC2001
26
+ COMP_WORDBREAKS=" $( echo " $COMP_WORDBREAKS " | sed -e ' s/://g' ) "
26
27
27
28
function __gradle-set-project-root-dir() {
28
29
project_root_dir=" $( _bash-it-find-in-ancestor " settings.gradle" " gradlew" ) "
@@ -31,31 +32,32 @@ function __gradle-set-project-root-dir() {
31
32
32
33
__gradle-init-cache-dir () {
33
34
cache_dir=" $HOME /.gradle/completion"
34
- mkdir -p $cache_dir
35
+ mkdir -p " $cache_dir "
35
36
}
36
37
37
38
__gradle-set-build-file () {
38
39
# Look for default build script in the settings file (settings.gradle by default)
39
40
# Otherwise, default is the file 'build.gradle' in the current directory.
40
41
gradle_build_file=" $project_root_dir /build.gradle"
41
42
if [[ -f " $project_root_dir /settings.gradle" ]]; then
42
- local build_file_name=$( grep " ^rootProject\.buildFileName" " $project_root_dir /settings.gradle" \
43
+ local build_file_name
44
+ build_file_name=$( grep " ^rootProject\.buildFileName" " $project_root_dir /settings.gradle" \
43
45
| sed -n -e " s/rootProject\.buildFileName = [\'\" ]\(.*\)[\'\" ]/\1/p" )
44
46
gradle_build_file=" $project_root_dir /${build_file_name:- build.gradle} "
45
47
fi
46
48
}
47
49
48
50
__gradle-set-cache-name () {
49
51
# Cache name is constructed from the absolute path of the build file.
50
- cache_name=$( echo $gradle_build_file | sed -e ' s/\//_/g' )
52
+ cache_name=$( echo " $gradle_build_file " | sed -e ' s/\//_/g' )
51
53
}
52
54
53
55
__gradle-set-files-checksum () {
54
56
# Cache MD5 sum of all Gradle scripts and modified timestamps
55
57
if _command_exists md5; then
56
- gradle_files_checksum=$( md5 -q -s " $( cat " $cache_dir /$cache_name " | xargs ls -o 2> /dev/null) " )
58
+ gradle_files_checksum=$( md5 -q -s " $( xargs ls -o < " $cache_dir /$cache_name " 2> /dev/null) " )
57
59
elif _command_exists md5sum; then
58
- gradle_files_checksum=$( cat " $cache_dir /$cache_name " | xargs ls -o 2> /dev/null | md5sum | awk ' {print $1}' )
60
+ gradle_files_checksum=$( xargs ls -o < " $cache_dir /$cache_name " 2> /dev/null | md5sum | awk ' {print $1}' )
59
61
else
60
62
echo " Cannot generate completions as neither md5 nor md5sum exist on \$ PATH"
61
63
fi
@@ -66,10 +68,11 @@ __gradle-generate-script-cache() {
66
68
local cache_ttl_mins=${GRADLE_CACHE_TTL_MINUTES:- 30240}
67
69
local script_exclude_pattern=${GRADLE_COMPLETION_EXCLUDE_PATTERN:- " /(build|integTest|out)/" }
68
70
69
- if [[ ! $( find $cache_dir /$cache_name -mmin -$cache_ttl_mins 2> /dev/null) ]]; then
71
+ if [[ ! $( find " $cache_dir /$cache_name " -mmin " -$cache_ttl_mins " 2> /dev/null) ]]; then
70
72
# Cache all Gradle scripts
71
- local gradle_build_scripts=$( find $project_root_dir -type f -name " *.gradle" -o -name " *.gradle.kts" 2> /dev/null | grep -E -v " $script_exclude_pattern " )
72
- printf " %s\n" " ${gradle_build_scripts[@]} " > $cache_dir /$cache_name
73
+ local gradle_build_scripts
74
+ gradle_build_scripts=$( find " $project_root_dir " -type f -name " *.gradle" -o -name " *.gradle.kts" 2> /dev/null | grep -E -v " $script_exclude_pattern " )
75
+ printf " %s\n" " ${gradle_build_scripts[@]} " > " $cache_dir /$cache_name "
73
76
fi
74
77
}
75
78
@@ -115,7 +118,8 @@ __gradle-long-options() {
115
118
--system-prop - Set a system property
116
119
--version - Prints Gradle version info
117
120
--warn - Log warnings and errors only"
118
- COMPREPLY=($( compgen -W " $args " -- " ${COMP_WORDS[COMP_CWORD]} " ) )
121
+ COMPREPLY=()
122
+ while IFS=' ' read -r line; do COMPREPLY+=(" $line " ); done < <( compgen -W " $args " -- " ${COMP_WORDS[COMP_CWORD]} " )
119
123
}
120
124
121
125
__gradle-properties () {
@@ -130,7 +134,8 @@ __gradle-properties() {
130
134
-Dorg.gradle.parallel= - Set true to enable parallel project builds (incubating)
131
135
-Dorg.gradle.parallel.intra= - Set true to enable intra-project parallel builds (incubating)
132
136
-Dorg.gradle.workers.max= - Set the number of workers Gradle is allowed to use"
133
- COMPREPLY=($( compgen -W " $args " -- " ${COMP_WORDS[COMP_CWORD]} " ) )
137
+ COMPREPLY=()
138
+ while IFS=' ' read -r line; do COMPREPLY+=(" $line " ); done < <( compgen -W " $args " -- " ${COMP_WORDS[COMP_CWORD]} " )
134
139
return 0
135
140
}
136
141
@@ -156,7 +161,8 @@ __gradle-short-options() {
156
161
-I - Specifies an initialization script
157
162
-P - Sets a project property of the root project
158
163
-S - Print out the full (very verbose) stacktrace"
159
- COMPREPLY=($( compgen -W " $args " -- " ${COMP_WORDS[COMP_CWORD]} " ) )
164
+ COMPREPLY=()
165
+ while IFS=' ' read -r line; do COMPREPLY+=(" $line " ); done < <( compgen -W " $args " -- " ${COMP_WORDS[COMP_CWORD]} " )
160
166
}
161
167
162
168
__gradle-notify-tasks-cache-build () {
@@ -179,10 +185,10 @@ __gradle-generate-tasks-cache() {
179
185
# Run gradle to retrieve possible tasks and cache.
180
186
# Reuse Gradle Daemon if IDLE but don't start a new one.
181
187
local gradle_tasks_output
182
- if [[ ! -z " $( $ gradle_cmd --status 2> /dev/null | grep IDLE ) " ]] ; then
183
- gradle_tasks_output=" $( $gradle_cmd -b $gradle_build_file --daemon -q tasks --all) "
188
+ if $ gradle_cmd --status 2> /dev/null | grep -q IDLE ; then
189
+ gradle_tasks_output=" $( $gradle_cmd -b " $gradle_build_file " --daemon -q tasks --all) "
184
190
else
185
- gradle_tasks_output=" $( $gradle_cmd -b $gradle_build_file --no-daemon -q tasks --all) "
191
+ gradle_tasks_output=" $( $gradle_cmd -b " $gradle_build_file " --no-daemon -q tasks --all) "
186
192
fi
187
193
local output_line
188
194
local task_description
@@ -206,15 +212,17 @@ __gradle-generate-tasks-cache() {
206
212
207
213
# subproject tasks can be referenced implicitly from root project
208
214
if [[ $GRADLE_COMPLETION_UNQUALIFIED_TASKS == " true" ]]; then
209
- local -a implicit_tasks=()
210
- implicit_tasks=($( comm -23 <( printf " %s\n" " ${subproject_tasks[@]} " | sort) <( printf " %s\n" " ${root_tasks[@]} " | sort) ) )
215
+ local -a implicit_tasks
216
+ while IFS=' ' read -r line; do
217
+ implicit_tasks+=(" $line " )
218
+ done < <( comm -23 <( printf " %s\n" " ${subproject_tasks[@]} " | sort) <( printf " %s\n" " ${root_tasks[@]} " | sort) )
211
219
for task in $( printf " %s\n" " ${implicit_tasks[@]} " ) ; do
212
- gradle_all_tasks+=($task )
220
+ gradle_all_tasks+=(" $task " )
213
221
done
214
222
fi
215
223
216
- printf " %s\n" " ${gradle_all_tasks[@]} " > $cache_dir /$gradle_files_checksum
217
- echo $gradle_files_checksum > $cache_dir /$cache_name .md5
224
+ printf " %s\n" " ${gradle_all_tasks[@]} " > " $cache_dir /$gradle_files_checksum "
225
+ echo " $gradle_files_checksum " > " $cache_dir /$cache_name .md5"
218
226
}
219
227
220
228
__gradle-completion-init () {
@@ -262,22 +270,23 @@ _gradle() {
262
270
__gradle-set-files-checksum
263
271
264
272
# The cache key is md5 sum of all gradle scripts, so it's valid if it exists.
265
- if [[ -f $cache_dir /$cache_name .md5 ]]; then
266
- local cached_checksum=" $( cat $cache_dir /$cache_name .md5) "
273
+ if [[ -f " $cache_dir /$cache_name .md5" ]]; then
274
+ local cached_checksum
275
+ cached_checksum=" $( cat " $cache_dir /$cache_name .md5" ) "
267
276
local -a cached_tasks
268
277
if [[ -z $cur ]]; then
269
- cached_tasks=( $( cat $cache_dir /$cached_checksum ) )
278
+ while IFS= ' ' read -r line ; do cached_tasks+=( " $line " ) ; done < " $cache_dir /$cached_checksum "
270
279
else
271
- cached_tasks=( $ ( grep " ^$cur " $cache_dir /$cached_checksum ) )
280
+ while IFS= ' ' read -r line ; do cached_tasks+=( " $line " ) ; done < < ( grep " ^$cur " " $cache_dir /$cached_checksum " )
272
281
fi
273
- COMPREPLY=( $ ( compgen -W " ${cached_tasks[*]} " -- " $cur " ) )
282
+ while IFS= ' ' read -r line ; do COMPREPLY+=( " $line " ) ; done < < ( compgen -W " ${cached_tasks[*]} " -- " $cur " )
274
283
else
275
284
__gradle-notify-tasks-cache-build
276
285
fi
277
286
278
287
# Regenerate tasks cache in the background
279
- if [[ $gradle_files_checksum != " $( cat $cache_dir /$cache_name .md5) " || ! -f $cache_dir /$gradle_files_checksum ]]; then
280
- $( __gradle-generate-tasks-cache 1>&2 2> /dev/null & )
288
+ if [[ $gradle_files_checksum != " $( cat " $cache_dir /$cache_name .md5" ) " || ! -f " $cache_dir /$gradle_files_checksum " ]]; then
289
+ " $( __gradle-generate-tasks-cache 1>&2 2> /dev/null & ) "
281
290
fi
282
291
else
283
292
# Default tasks available outside Gradle projects
@@ -293,15 +302,16 @@ projects - Displays the sub-projects of root project.
293
302
properties - Displays the properties of root project.
294
303
tasks - Displays the tasks runnable from root project.
295
304
wrapper - Generates Gradle wrapper files."
296
- COMPREPLY=($( compgen -W " $args " -- " ${COMP_WORDS[COMP_CWORD]} " ) )
305
+ COMPREPLY=()
306
+ while IFS=' ' read -r line; do COMPREPLY+=(" $line " ); done < <( compgen -W " ${args} " -- " ${cur} " )
297
307
fi
298
308
fi
299
309
300
310
IFS=" $OLDIFS "
301
311
302
312
# Remove description ("[:space:]" and after) if only one possibility
303
313
if [[ ${# COMPREPLY[*]} -eq 1 ]]; then
304
- COMPREPLY=(${COMPREPLY[0]%% * } )
314
+ COMPREPLY=(" ${COMPREPLY[0]%% * } " )
305
315
fi
306
316
307
317
return 0
0 commit comments