From 49cbc019d66d408db17986a5c09b2b7d7a976576 Mon Sep 17 00:00:00 2001 From: Joel Grunbaum <joelgrun@gmail.com> Date: Fri, 24 Dec 2021 03:39:05 +0000 Subject: [PATCH] Single dependency install, POSIX sourcing, overwrite checking, force install --- INSTALL.sh | 54 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 46 insertions(+), 8 deletions(-) diff --git a/INSTALL.sh b/INSTALL.sh index 90ee445..72f1af1 100755 --- a/INSTALL.sh +++ b/INSTALL.sh @@ -1,14 +1,36 @@ #!/bin/sh install_links() { - source ./DICT + . ./DICT if [ -n "$FILES" ]; then for i in `seq 1 $(echo "$FILES" | wc -w)`; do file=$(echo "$FILES" | cut -d' ' -f $i) loc=$(echo "$LOCATIONS" | cut -d' ' -f $i) - dir=$(echo "$loc" | rev | cut -d'/' -f2- | rev) - mkdir -p "$dir" - ln -sf "$(pwd)/$file" "$loc" + while [ 1 ]; do + CHOICE="overwrite" + if [ -a "$loc" ] && [ "$FORCE" = "0" ]; then + echo "WARNING: \"$loc\" exists, (overwrite, change, nothing): " + read CHOICE + fi + case "$CHOICE" in + o|overwrite) + dir=$(dirname "$loc") + mkdir -p "$dir" + ln -sf "$(pwd)/$file" "$loc"; break;; + c|change) + tmpfile=$(mktemp) + echo "$loc" >> $tmpfile + $EDITOR "$tmpfile" + loc=$(cat $tmpfile) + rm $tmpfile + unset tmpfile;; + n|nothing) + break;; + *) + echo "INVALID CHOICE \"$CHOICE\", (overwrite, change, nothing)" + read CHOICE + esac + done done fi if [ -n "$SUDO_FILES" ]; then @@ -26,7 +48,7 @@ } remove_links() { - source ./DICT + . ./DICT if [ -n "$FILES" ]; then for i in `seq 1 $(echo $FILES | wc -w)`; do loc=$(echo "$LOCATIONS" | cut -d' ' -f $i) @@ -60,8 +82,11 @@ unset DEPS eval $(grep "DEPS=" $1/DICT) for i in $DEPS; do - (handle_package $i $2) + if ! grep -q "$i" "$PACKAGE_CACHE"; then + (handle_package $i $2) + fi done + echo "$1" >> "$PACKAGE_CACHE" (cd "$1"; $2) else echo "No configuration found for $i" @@ -73,20 +98,31 @@ echo "Usage with -h|--help" echo "Install with -i|--install (default)" echo "Remove with -r|--remove" + echo "Force install with -f|--force" echo "Directories have the configurations for their programs/use cases" echo "List all configurations to be installed in the command line" + echo "If there is a file at the install location, you will be prompted to change it" echo "Example usage: $0 -i bash zsh" } INSTALL=1 -PACKAGES="" -FUNCTION="" +FORCE=0 +PACKAGE_CACHE=$(mktemp) +DOTFILES_PATH="$(dirname $0)" + +cd $DOTFILES_PATH + +if [ -z "$1" ]; then + usage + exit +fi while [ -n "$1" ]; do case "$1" in -h|--help|"") usage; exit;; -i|--install) INSTALL=1;; -r|--remove) INSTALL=0;; + -f|--force) FORCE=1;; --) shift; break;; -*) echo "Invalid argument"; usage; exit;; *) handle_package "$1" "$([ \"$INSTALL\" = \"1\" ] && echo install || echo remove)_links";; @@ -97,3 +133,5 @@ while [ -n "$1" ]; do handle_package "$1" "$([ \"$INSTALL\" = \"1\" ] && echo install || echo remove)_links" done + +rm $PACKAGE_CACHE -- Gitblit v1.9.3