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).
This commit is contained in:
parent
8dc064c4c7
commit
3e50206d62
1 changed files with 66 additions and 27 deletions
93
sti
93
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"
|
||||
|
|
Loading…
Reference in a new issue