aboutsummaryrefslogtreecommitdiffhomepage
path: root/scripts/generate_bash_completion.sh
diff options
context:
space:
mode:
authorGravatar Julio Merino <jmmv@google.com>2017-02-01 19:08:32 +0000
committerGravatar Yun Peng <pcloudy@google.com>2017-02-02 10:13:36 +0000
commit37debf0e532ccba7e9b6e2758b247659d28e905c (patch)
treee87775c249503f3e88c3ad67046589a804f674b0 /scripts/generate_bash_completion.sh
parent73d835f38f5921ed829a1b907b5d0205f2bd498d (diff)
Make the bash completion generation easier to customize per product.
Refactor the code to generate the bash completions file by moving the logic to a separate script and keeping the genrule as a dumb invocation of this script. This allows us to more easily customize the rules for Blaze. -- PiperOrigin-RevId: 146265210 MOS_MIGRATED_REVID=146265210
Diffstat (limited to 'scripts/generate_bash_completion.sh')
-rwxr-xr-xscripts/generate_bash_completion.sh77
1 files changed, 77 insertions, 0 deletions
diff --git a/scripts/generate_bash_completion.sh b/scripts/generate_bash_completion.sh
new file mode 100755
index 0000000000..83851e39ff
--- /dev/null
+++ b/scripts/generate_bash_completion.sh
@@ -0,0 +1,77 @@
+#!/bin/sh
+#
+# Copyright 2017 The Bazel Authors. All rights reserved.
+#
+# 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.
+
+#
+# Generates the Bash completion script for Bazel.
+#
+# At a minimum, you must pass the --bazel and --output flags to specify the path
+# to the Bazel binary to use and the output file to generate.
+#
+# Callers can customize the completion script by passing additional files with
+# the --prepend and --append flags, which are stitched together to generate the
+# final completion script. Prepended files can override built-in variables and
+# appended files can override built-in functions.
+#
+
+set -e
+
+die() {
+ echo "${@}" 1>&2
+ exit 1
+}
+
+get_optarg() {
+ expr "${1}" : "[^=]*=\\(.*\\)"
+}
+
+append=
+bazel=
+javabase=
+output=
+prepend=
+while [ ${#} -gt 0 ]; do
+ case "${1}" in
+ --append=*) append="${append} $(get_optarg "${1}")" ;;
+ --bazel=*) bazel="$(get_optarg "${1}")" ;;
+ --javabase=*) javabase="$(get_optarg "${1}")" ;;
+ --output=*) output="$(get_optarg "${1}")" ;;
+ --prepend=*) prepend="${prepend} $(get_optarg "${1}")" ;;
+ --*) die "Unknown option ${1}" ;;
+ *) break ;;
+ esac
+ shift
+done
+[ ${#} -eq 0 ] || die "No arguments allowed"
+[ -n "${bazel}" ] || die "--bazel required but not provided"
+[ -n "${output}" ] || die "--output required but not provided"
+
+tempdir="$(mktemp -d "${TMPDIR:-/tmp}/generate_bash_completion.XXXXXXXX")"
+trap "rm -rf '${tempdir}'" EXIT
+
+touch "${tempdir}/WORKSPACE"
+mkdir "${tempdir}/root"
+
+[ -z "${prepend}" ] || cat ${prepend} >>"${tempdir}/output"
+
+host_javabase_flag=
+[ -z "${javabase}" ] || host_javabase_flag="--host_javabase=${javabase}"
+"${bazel}" --output_user_root="${tempdir}/root" ${host_javabase_flag} \
+ help completion >>"${tempdir}/output"
+
+[ -z "${append}" ] || cat ${append} >>"${tempdir}/output"
+
+rm -f "${output}"
+mv "${tempdir}/output" "${output}"