aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Tom Willemse2014-03-12 18:04:34 +0100
committerGravatar Tom Willemse2014-03-12 23:16:51 +0100
commit3e50206d622da0acf85a0c7c90f7a95adc6d053a (patch)
tree3b4b11eef1dfad2dd93b97ff42cf5cff67c26337
parent8dc064c4c712f5e3ffc602e6b439faf04e1eeb46 (diff)
downloadsti-3e50206d622da0acf85a0c7c90f7a95adc6d053a.tar.gz
sti-3e50206d622da0acf85a0c7c90f7a95adc6d053a.zip
Add update command
Add command that updates an installed tool by removing its executables, using `git pull' to update the code and then reinstalling the executables (plus any new ones).
-rwxr-xr-xsti93
1 files changed, 66 insertions, 27 deletions
diff --git a/sti b/sti
index 2f36780..80521d5 100755
--- a/sti
+++ b/sti
@@ -25,6 +25,40 @@ function find-executables ()
find "$1" -type f -executable \! -wholename "${data_home}/*/.*"
}
+function init
+{
+ for exe in $(find-executables "$1"); do
+ local executable_name=$(basename "$exe")
+ local destination="${bin_home}/${executable_name}"
+
+ if [[ ! -e "$destination" ]]; then
+ ln -s "$exe" "$destination"
+ elif [[ "$(readlink $destination)" == "$exe" ]]; then
+ echo "Executable ${executable_name} already installed"
+ else
+ echo "Executable ${executable_name} already exists in \
+${bin_home}"
+ fi
+ done
+}
+
+function uninit
+{
+ for exe in $(find-executables "$1"); do
+ local real_path=$(realpath "$exe")
+ local base_name=$(basename "$exe")
+ local link_path="${bin_home}/${base_name}"
+ local linked_path=$(readlink "$link_path")
+
+ if [[ -e "$link_path" ]] \
+ && [[ "$linked_path" == "$real_path" ]]; then
+ rm "$link_path"
+ else
+ echo "Executable ${base_name} is not part of $1"
+ fi
+ done
+}
+
function help_help { cmd_help "$@"; }
function cmd_help
{
@@ -40,6 +74,7 @@ function cmd_help
echo " list List downloaded tools"
echo " reinit Retry installing the executables of a tool"
echo " remove Remove an installed tool"
+ echo " update Update an installed tool"
echo
echo "You can use \`${executable_name} help <command>' to get \
more information about a command." | fold
@@ -77,19 +112,7 @@ function cmd_reinit ()
local tool_home="${data_home}/tools/$1"
if [[ -d "$tool_home" ]]; then
- for exe in $(find-executables "$tool_home"); do
- local executable_name=$(basename "$exe")
- local destination="${bin_home}/${executable_name}"
-
- if [[ ! -e "$destination" ]]; then
- ln -s "$exe" "$destination"
- elif [[ "$(readlink $destination)" == "$exe" ]]; then
- echo "Executable ${executable_name} already installed"
- else
- echo "Executable ${executable_name} already exists in \
-${bin_home}"
- fi
- done
+ init "$tool_home"
fi
}
@@ -118,7 +141,7 @@ function cmd_install ()
if [[ ! -d "$tool_home" ]]; then
git clone $1 "$tool_home"
- cmd_reinit "$tool_name"
+ init "$tool_home"
else
echo "Tool ${tool_name} already installed"
exit 2
@@ -145,19 +168,7 @@ function cmd_remove ()
tool_home="${data_home}/tools/$1"
if [[ -d "$tool_home" ]]; then
- for exe in $(find-executables "$tool_home"); do
- local real_path=$(realpath "$exe")
- local base_name=$(basename "$exe")
- local link_path="${bin_home}/${base_name}"
- local linked_path=$(readlink "$link_path")
-
- if [[ -e "$link_path" ]] \
- && [[ "$linked_path" == "$real_path" ]]; then
- rm "$link_path"
- else
- echo "Executable ${base_name} is not part of $1"
- fi
- done
+ uninit "$tool_home"
rm -rf "$tool_home" && echo "Succesfully removed $1"
else
echo "Tool $1 is not installed"
@@ -165,6 +176,34 @@ function cmd_remove ()
fi
}
+function help_update
+{
+ echo "Usage: ${executable_name} update TOOL"
+ echo
+ echo "TOOL should be the name of a tool installed previously with \
+\`${executable_name} install'. This name is the base name of the URL \
+used to install the tool, with the \`.git' suffix removed." | fold
+ echo
+ echo "This command removes all the executables from \`${data_home}' \
+just as \`${executable_name} remove' would, calls \`git pull' in TOOL's \
+directory and then reinstalls the executables as \`${executable_name} \
+reinit' would."
+}
+
+function cmd_update
+{
+ tool_home="${data_home}/tools/$1"
+
+ if [[ -d "$tool_home" ]]; then
+ uninit "$tool_home"
+ cd $tool_home && git pull
+ init "$tool_home"
+ else
+ echo "Tool $1 is not installed"
+ exit 2
+ fi
+}
+
function dispatch
{
local name="${prefix-cmd}_$1"