2222
2323# Bash breaks words on : by default. Subproject tasks have ':'
2424# Avoid inaccurate completions for subproject tasks
25- COMP_WORDBREAKS=$( echo " $ COMP_WORDBREAKS" | sed -e ' s/://g ' )
25+ COMP_WORDBREAKS=" ${ COMP_WORDBREAKS//:/ } "
2626
2727function __gradle-set-project-root-dir() {
2828 project_root_dir=" $( _bash-it-find-in-ancestor " settings.gradle" " gradlew" ) "
@@ -31,31 +31,32 @@ function __gradle-set-project-root-dir() {
3131
3232__gradle-init-cache-dir () {
3333 cache_dir=" $HOME /.gradle/completion"
34- mkdir -p $cache_dir
34+ mkdir -p " $cache_dir "
3535}
3636
3737__gradle-set-build-file () {
3838 # Look for default build script in the settings file (settings.gradle by default)
3939 # Otherwise, default is the file 'build.gradle' in the current directory.
4040 gradle_build_file=" $project_root_dir /build.gradle"
4141 if [[ -f " $project_root_dir /settings.gradle" ]]; then
42- local build_file_name=$( grep " ^rootProject\.buildFileName" " $project_root_dir /settings.gradle" \
42+ local build_file_name
43+ build_file_name=$( grep " ^rootProject\.buildFileName" " $project_root_dir /settings.gradle" \
4344 | sed -n -e " s/rootProject\.buildFileName = [\'\" ]\(.*\)[\'\" ]/\1/p" )
4445 gradle_build_file=" $project_root_dir /${build_file_name:- build.gradle} "
4546 fi
4647}
4748
4849__gradle-set-cache-name () {
4950 # Cache name is constructed from the absolute path of the build file.
50- cache_name=$( echo $ gradle_build_file | sed -e ' s/\//_/g ' )
51+ cache_name=${ gradle_build_file// ' / ' / _}
5152}
5253
5354__gradle-set-files-checksum () {
5455 # Cache MD5 sum of all Gradle scripts and modified timestamps
5556 if _command_exists md5; then
56- gradle_files_checksum=$( md5 -q -s " $( cat " $cache_dir /$cache_name " | xargs ls -o 2> /dev/null) " )
57+ gradle_files_checksum=$( md5 -q -s " $( xargs ls -o < " $cache_dir /$cache_name " 2> /dev/null) " )
5758 elif _command_exists md5sum; then
58- gradle_files_checksum=$( cat " $cache_dir /$cache_name " | xargs ls -o 2> /dev/null | md5sum | awk ' {print $1}' )
59+ gradle_files_checksum=$( xargs ls -o < " $cache_dir /$cache_name " 2> /dev/null | md5sum | awk ' {print $1}' )
5960 else
6061 echo " Cannot generate completions as neither md5 nor md5sum exist on \$ PATH"
6162 fi
@@ -66,10 +67,15 @@ __gradle-generate-script-cache() {
6667 local cache_ttl_mins=${GRADLE_CACHE_TTL_MINUTES:- 30240}
6768 local script_exclude_pattern=${GRADLE_COMPLETION_EXCLUDE_PATTERN:- " /(build|integTest|out)/" }
6869
69- if [[ ! $( find $cache_dir /$cache_name -mmin -$cache_ttl_mins 2> /dev/null) ]]; then
70+ if [[ ! $( find " $cache_dir /$cache_name " -mmin " -$cache_ttl_mins " 2> /dev/null) ]]; then
7071 # 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
72+ local gradle_build_scripts
73+ gradle_build_scripts=$(
74+ find " $project_root_dir " -type f \
75+ \( -name " *.gradle" -o -name " *.gradle.kts" \) 2> /dev/null \
76+ | grep -E -v " $script_exclude_pattern "
77+ )
78+ printf " %s\n" " ${gradle_build_scripts[@]} " > " $cache_dir /$cache_name "
7379 fi
7480}
7581
@@ -115,7 +121,10 @@ __gradle-long-options() {
115121--system-prop - Set a system property
116122--version - Prints Gradle version info
117123--warn - Log warnings and errors only"
118- COMPREPLY=($( compgen -W " $args " -- " ${COMP_WORDS[COMP_CWORD]} " ) )
124+ COMPREPLY=()
125+ while IFS=' ' read -r line; do
126+ COMPREPLY+=(" $line " )
127+ done < <( compgen -W " $args " -- " ${COMP_WORDS[COMP_CWORD]} " )
119128}
120129
121130__gradle-properties () {
@@ -130,7 +139,10 @@ __gradle-properties() {
130139-Dorg.gradle.parallel= - Set true to enable parallel project builds (incubating)
131140-Dorg.gradle.parallel.intra= - Set true to enable intra-project parallel builds (incubating)
132141-Dorg.gradle.workers.max= - Set the number of workers Gradle is allowed to use"
133- COMPREPLY=($( compgen -W " $args " -- " ${COMP_WORDS[COMP_CWORD]} " ) )
142+ COMPREPLY=()
143+ while IFS=' ' read -r line; do
144+ COMPREPLY+=(" $line " )
145+ done < <( compgen -W " $args " -- " ${COMP_WORDS[COMP_CWORD]} " )
134146 return 0
135147}
136148
@@ -156,7 +168,8 @@ __gradle-short-options() {
156168-I - Specifies an initialization script
157169-P - Sets a project property of the root project
158170-S - Print out the full (very verbose) stacktrace"
159- COMPREPLY=($( compgen -W " $args " -- " ${COMP_WORDS[COMP_CWORD]} " ) )
171+ COMPREPLY=()
172+ while IFS=' ' read -r line; do COMPREPLY+=(" $line " ); done < <( compgen -W " $args " -- " ${COMP_WORDS[COMP_CWORD]} " )
160173}
161174
162175__gradle-notify-tasks-cache-build () {
@@ -179,10 +192,10 @@ __gradle-generate-tasks-cache() {
179192 # Run gradle to retrieve possible tasks and cache.
180193 # Reuse Gradle Daemon if IDLE but don't start a new one.
181194 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) "
195+ if " $ gradle_cmd" --status 2> /dev/null | grep -q IDLE ; then
196+ gradle_tasks_output=" $( " $gradle_cmd " -b " $gradle_build_file " --daemon -q tasks --all) "
184197 else
185- gradle_tasks_output=" $( $gradle_cmd -b $gradle_build_file --no-daemon -q tasks --all) "
198+ gradle_tasks_output=" $( " $gradle_cmd " -b " $gradle_build_file " --no-daemon -q tasks --all) "
186199 fi
187200 local output_line
188201 local task_description
@@ -206,15 +219,18 @@ __gradle-generate-tasks-cache() {
206219
207220 # subproject tasks can be referenced implicitly from root project
208221 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) ) )
211- for task in $( printf " %s\n" " ${implicit_tasks[@]} " ) ; do
212- gradle_all_tasks+=($task )
222+ local -a implicit_tasks
223+ while IFS=' ' read -r line; do
224+ implicit_tasks+=(" $line " )
225+ done < <( comm -23 <( printf " %s\n" " ${subproject_tasks[@]} " | sort) \
226+ <( printf " %s\n" " ${root_tasks[@]} " | sort) )
227+ for task in " ${implicit_tasks[@]} " ; do
228+ gradle_all_tasks+=(" $task " )
213229 done
214230 fi
215231
216- printf " %s\n" " ${gradle_all_tasks[@]} " > $cache_dir /$gradle_files_checksum
217- echo $gradle_files_checksum > $cache_dir /$cache_name .md5
232+ printf " %s\n" " ${gradle_all_tasks[@]} " > " $cache_dir /$gradle_files_checksum "
233+ echo " $gradle_files_checksum " > " $cache_dir /$cache_name .md5"
218234}
219235
220236__gradle-completion-init () {
@@ -262,22 +278,30 @@ _gradle() {
262278 __gradle-set-files-checksum
263279
264280 # 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) "
281+ if [[ -f " $cache_dir /$cache_name .md5" ]]; then
282+ local cached_checksum
283+ cached_checksum=" $( cat " $cache_dir /$cache_name .md5" ) "
267284 local -a cached_tasks
268285 if [[ -z $cur ]]; then
269- cached_tasks=($( cat $cache_dir /$cached_checksum ) )
286+ while IFS=' ' read -r line; do
287+ cached_tasks+=(" $line " )
288+ done < " $cache_dir /$cached_checksum "
270289 else
271- cached_tasks=($( grep " ^$cur " $cache_dir /$cached_checksum ) )
290+ while IFS=' ' read -r line; do
291+ cached_tasks+=(" $line " )
292+ done < <( grep " ^$cur " " $cache_dir /$cached_checksum " )
272293 fi
273- COMPREPLY=($( compgen -W " ${cached_tasks[*]} " -- " $cur " ) )
294+ while IFS=' ' read -r line; do
295+ COMPREPLY+=(" $line " )
296+ done < <( compgen -W " ${cached_tasks[*]} " -- " $cur " )
274297 else
275298 __gradle-notify-tasks-cache-build
276299 fi
277300
278301 # 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 & )
302+ if [[ $gradle_files_checksum != " $( cat " $cache_dir /$cache_name .md5" ) " ||
303+ ! -f " $cache_dir /$gradle_files_checksum " ]]; then
304+ (__gradle-generate-tasks-cache & > /dev/null & )
281305 fi
282306 else
283307 # Default tasks available outside Gradle projects
@@ -293,15 +317,18 @@ projects - Displays the sub-projects of root project.
293317properties - Displays the properties of root project.
294318tasks - Displays the tasks runnable from root project.
295319wrapper - Generates Gradle wrapper files."
296- COMPREPLY=($( compgen -W " $args " -- " ${COMP_WORDS[COMP_CWORD]} " ) )
320+ COMPREPLY=()
321+ while IFS=' ' read -r line; do
322+ COMPREPLY+=(" $line " )
323+ done < <( compgen -W " ${args} " -- " ${cur} " )
297324 fi
298325 fi
299326
300327 IFS=" $OLDIFS "
301328
302329 # Remove description ("[:space:]" and after) if only one possibility
303330 if [[ ${# COMPREPLY[*]} -eq 1 ]]; then
304- COMPREPLY=(${COMPREPLY[0]%% * } )
331+ COMPREPLY=(" ${COMPREPLY[0]%% * } " )
305332 fi
306333
307334 return 0
0 commit comments