From 7cceb8615a8dddc1ad2f25d92ba3579691430803 Mon Sep 17 00:00:00 2001 From: Dan Schaper Date: Sat, 31 Dec 2016 22:34:20 -0800 Subject: [PATCH] `make_repo` more defensive. Signed-off-by: Dan Schaper --- automated install/basic-install.sh | 41 ++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index dc21ac97..efc583ee 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -133,26 +133,37 @@ fi ####### FUNCTIONS ########## is_repo() { - # Use git to check if directory is currently under VCS, return the value + # Use git to check if directory is currently under VCS, return the value 128 + # if directory is not a repo. Return 1 if directory does not exist. local directory="${1}" - if [ -d $directory ]; then + local curdir + local rc + + curdir="${PWD}" + if [[ -d "${directory}" ]]; then # git -C is not used here to support git versions older than 1.8.4 - curdir=$PWD; cd $directory; git status --short &> /dev/null; rc=$?; cd $curdir - return $rc + cd "${directory}" + git status --short &> /dev/null || rc=$? else - # non-zero return code if directory does not exist OR is not a valid git repository - return 1 + # non-zero return code if directory does not exist + rc=1 fi + cd "${curdir}" + return "${rc:-0}" } make_repo() { local directory="${1}" local remoteRepo="${2}" - # Remove the non-repod interface and clone the interface - echo -n "::: Cloning $remoteRepo into $directory..." - rm -rf "${directory}" - git clone -q --depth 1 "${remoteRepo}" "${directory}" &> /dev/null + + echo -n "::: Cloning ${remoteRepo} into ${directory}..." + # Clean out the directory if it exists for git to clone into + if [[ -d "${directory}" ]]; then + rm -rf "${directory}" + fi + git clone -q --depth 1 "${remoteRepo}" "${directory}" &> /dev/null || return $? echo " done!" + return 0 } update_repo() { @@ -175,8 +186,12 @@ getGitFiles() { if is_repo "${directory}"; then update_repo "${directory}" else - make_repo "${directory}" "${remoteRepo}" + make_repo "${directory}" "${remoteRepo}" || \ + { echo "!!! Unable to clone ${remoteRepo} into ${directory}"; \ + return 1; \ + } fi + return 0 } find_IPv4_information() { @@ -1076,8 +1091,8 @@ main() { echo "::: --reconfigure passed to install script. Not downloading/updating local repos" else # Get Git files for Core and Admin - getGitFiles ${PI_HOLE_LOCAL_REPO} ${piholeGitUrl} - getGitFiles ${webInterfaceDir} ${webInterfaceGitUrl} + getGitFiles ${PI_HOLE_LOCAL_REPO} ${piholeGitUrl} || { echo "Unable to clone ${piholeGitUrl}"; exit 1; } + getGitFiles ${webInterfaceDir} ${webInterfaceGitUrl} || { echo "Unable to clone ${webInterfaceGitUrl}"; exit 1; } fi if [[ ${useUpdateVars} == false ]]; then