From 2d72928ba193da38f2597fdcdffb2c02c8ded23a Mon Sep 17 00:00:00 2001 From: Lucas Kolstad Date: Fri, 28 Jul 2017 21:34:59 -0700 Subject: [PATCH] Properly handle paths with spaces in shell scripts. --- examples/todo/bootstrap.sh | 10 +++++----- scripts/mk-docs.sh | 12 ++++++------ scripts/publish.sh | 10 +++++----- scripts/test.sh | 38 ++++++++++++++++++-------------------- 4 files changed, 34 insertions(+), 36 deletions(-) diff --git a/examples/todo/bootstrap.sh b/examples/todo/bootstrap.sh index daa92d50..f2307073 100755 --- a/examples/todo/bootstrap.sh +++ b/examples/todo/bootstrap.sh @@ -1,11 +1,11 @@ #! /usr/bin/env bash SCRIPT_PATH=$(cd "$(dirname "$0")" ; pwd -P) -DATABASE_URL=${SCRIPT_PATH}/db/db.sql +DATABASE_URL="${SCRIPT_PATH}/db/db.sql" -pushd $SCRIPT_PATH > /dev/null +pushd "${SCRIPT_PATH}" > /dev/null # clear an existing database - rm -f $DATABASE_URL + rm -f "${DATABASE_URL}" # install the diesel CLI tools if they're not installed if ! command -v diesel >/dev/null 2>&1; then @@ -13,7 +13,7 @@ pushd $SCRIPT_PATH > /dev/null fi # create db/db.sql - diesel migration --database-url=$DATABASE_URL run > /dev/null + diesel migration --database-url="${DATABASE_URL}" run > /dev/null popd > /dev/null -echo "export DATABASE_URL=$DATABASE_URL" +echo "export DATABASE_URL=\"${DATABASE_URL}\"" diff --git a/scripts/mk-docs.sh b/scripts/mk-docs.sh index 1d02e48a..8f002228 100755 --- a/scripts/mk-docs.sh +++ b/scripts/mk-docs.sh @@ -7,12 +7,12 @@ set -e # Brings in: ROOT_DIR, EXAMPLES_DIR, LIB_DIR, CODEGEN_DIR, CONTRIB_DIR, DOC_DIR SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -source $SCRIPT_DIR/config.sh +source "${SCRIPT_DIR}/config.sh" function mk_doc() { local dir=$1 local flag=$2 - pushd $dir > /dev/null 2>&1 + pushd "${dir}" > /dev/null 2>&1 echo ":: Documenting '${dir}'..." cargo doc --no-deps --all-features popd > /dev/null 2>&1 @@ -22,9 +22,9 @@ function mk_doc() { cargo clean cargo update -mk_doc $LIB_DIR -mk_doc $CODEGEN_DIR -mk_doc $CONTRIB_DIR +mk_doc "${LIB_DIR}" +mk_doc "${CODEGEN_DIR}" +mk_doc "${CONTRIB_DIR}" # Blank index, for redirection. -touch ${DOC_DIR}/index.html +touch "${DOC_DIR}/index.html" diff --git a/scripts/publish.sh b/scripts/publish.sh index dc042698..87bff375 100755 --- a/scripts/publish.sh +++ b/scripts/publish.sh @@ -7,7 +7,7 @@ set -e # Brings in: ROOT_DIR, EXAMPLES_DIR, LIB_DIR, CODEGEN_DIR, CONTRIB_DIR, DOC_DIR SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -source $SCRIPT_DIR/config.sh +source "${SCRIPT_DIR}/config.sh" if ! [ -z "$(git status --porcelain)" ]; then echo "There are uncommited changes! Aborting." @@ -17,14 +17,14 @@ fi # Ensure everything passes before trying to publish. echo ":::: Running test suite..." cargo clean -${SCRIPT_DIR}/test.sh +bash "${SCRIPT_DIR}/test.sh" # Temporarily remove the dependency on codegen from core so crates.io verifies. -sed -i.bak 's/rocket_codegen.*//' ${LIB_DIR}/Cargo.toml +sed -i.bak 's/rocket_codegen.*//' "${LIB_DIR}/Cargo.toml" # Publish all the things. for dir in "${LIB_DIR}" "${CODEGEN_DIR}" "${CONTRIB_DIR}"; do - pushd ${dir} + pushd "${dir}" echo ":::: Publishing '${dir}..." # We already checked things ourselves. Don't spend time reverifying. cargo publish --no-verify --allow-dirty @@ -32,4 +32,4 @@ for dir in "${LIB_DIR}" "${CODEGEN_DIR}" "${CONTRIB_DIR}"; do done # Restore the original core Cargo.toml. -mv ${LIB_DIR}/Cargo.toml.bak ${LIB_DIR}/Cargo.toml +mv "${LIB_DIR}/Cargo.toml.bak" "${LIB_DIR}/Cargo.toml" diff --git a/scripts/test.sh b/scripts/test.sh index c446a115..e353d943 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -3,7 +3,7 @@ set -e # Brings in: ROOT_DIR, EXAMPLES_DIR, LIB_DIR, CODEGEN_DIR, CONTRIB_DIR, DOC_DIR SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -source $SCRIPT_DIR/config.sh +source "${SCRIPT_DIR}/config.sh" # Add Cargo to PATH. export PATH=${HOME}/.cargo/bin:${PATH} @@ -11,14 +11,14 @@ export PATH=${HOME}/.cargo/bin:${PATH} # Checks that the versions for Cargo projects $@ all match function check_versions_match() { local last_version="" - for dir in $@; do + for dir in "${@}"; do local cargo_toml="${dir}/Cargo.toml" if ! [ -f "${cargo_toml}" ]; then echo "Cargo configuration file '${cargo_toml}' does not exist." exit 1 fi - local version=$(grep version ${cargo_toml} | head -n 1 | cut -d' ' -f3) + local version=$(grep version "${cargo_toml}" | head -n 1 | cut -d' ' -f3) if [ -z "${last_version}" ]; then last_version="${version}" elif ! [ "${version}" = "${last_version}" ]; then @@ -31,7 +31,7 @@ function check_versions_match() { # Ensures there are no tabs in any file. function ensure_tab_free() { local tab=$(printf '\t') - local matches=$(grep -I -R "${tab}" $ROOT_DIR | egrep -v '/target|/.git|LICENSE') + local matches=$(grep -I -R "${tab}" "${ROOT_DIR}" | egrep -v '/target|/.git|LICENSE') if ! [ -z "${matches}" ]; then echo "Tab characters were found in the following:" echo "${matches}" @@ -41,7 +41,7 @@ function ensure_tab_free() { # Ensures there are no files with trailing whitespace. function ensure_trailing_whitespace_free() { - local matches=$(egrep -I -R " +$" $ROOT_DIR | egrep -v "/target|/.git") + local matches=$(egrep -I -R " +$" "${ROOT_DIR}" | egrep -v "/target|/.git") if ! [ -z "${matches}" ]; then echo "Trailing whitespace was found in the following:" echo "${matches}" @@ -50,23 +50,21 @@ function ensure_trailing_whitespace_free() { } function bootstrap_examples() { - for file in ${EXAMPLES_DIR}/*; do - if [ -d "${file}" ]; then - bootstrap_script="${file}/bootstrap.sh" - if [ -x "${bootstrap_script}" ]; then - echo " Bootstrapping ${file}..." + while read -r file; do + bootstrap_script="${file}/bootstrap.sh" + if [ -x "${bootstrap_script}" ]; then + echo " Bootstrapping ${file}..." - env_vars=$(${bootstrap_script}) - bootstrap_result=$? - if [ $bootstrap_result -ne 0 ]; then - echo " Running bootstrap script (${bootstrap_script}) failed!" - exit 1 - else - eval $env_vars - fi + env_vars=$(bash "${bootstrap_script}") + bootstrap_result=$? + if [ $bootstrap_result -ne 0 ]; then + echo " Running bootstrap script (${bootstrap_script}) failed!" + exit 1 + else + eval $env_vars fi fi - done + done < <(find "${EXAMPLES_DIR}" -maxdepth 1 -type d) } echo ":: Ensuring all crate versions match..." @@ -81,7 +79,7 @@ ensure_trailing_whitespace_free echo ":: Updating dependencies..." cargo update -echo ":: Boostrapping examples..." +echo ":: Bootstrapping examples..." bootstrap_examples echo ":: Building and testing libraries..."