From 3af756d836863487f9d6ca9857a3c6bb29a3b8be Mon Sep 17 00:00:00 2001 From: Bruno Sutic Date: Tue, 5 Aug 2014 19:02:42 +0200 Subject: [PATCH] update_plugin script --- scripts/install_plugins.sh | 8 ---- scripts/shared_functions.sh | 46 ++++++++++++++++---- scripts/update_plugin.sh | 74 +++++++++++++++++++++++++-------- scripts/update_plugin_prompt.sh | 5 ++- 4 files changed, 99 insertions(+), 34 deletions(-) diff --git a/scripts/install_plugins.sh b/scripts/install_plugins.sh index 3222841..82870a5 100755 --- a/scripts/install_plugins.sh +++ b/scripts/install_plugins.sh @@ -26,14 +26,6 @@ clone_plugin() { clone "https://github.com/$plugin" } -pull_changes() { - local plugin=$1 - local plugin_path=$(shared_plugin_path "$plugin") - cd $plugin_path && - git pull && - git submodule update --init --recursive -} - # pull new changes or clone plugin install_plugin() { local plugin=$1 diff --git a/scripts/shared_functions.sh b/scripts/shared_functions.sh index 811cc5e..a834ffb 100644 --- a/scripts/shared_functions.sh +++ b/scripts/shared_functions.sh @@ -16,12 +16,12 @@ shared_get_tpm_plugins_list() { # 1. "git://github.com/user/plugin_name.git" # 2. "user/plugin_name" shared_plugin_name() { - local plugin=$1 + local plugin="$1" # get only the part after the last slash, e.g. "plugin_name.git" - local plugin_basename=$(basename "$plugin") + local plugin_basename="$(basename "$plugin")" # remove ".git" extension (if it exists) to get only "plugin_name" - local plugin_name=${plugin_basename%.git} - echo $plugin_name + local plugin_name="${plugin_basename%.git}" + echo "$plugin_name" } shared_plugin_path() { @@ -42,8 +42,40 @@ reload_tmux_environment() { } plugin_already_installed() { - local plugin=$1 - local plugin_path=$(shared_plugin_path "$plugin") - cd $plugin_path && + local plugin="$1" + local plugin_path="$(shared_plugin_path "$plugin")" + cd "$plugin_path" && git remote >/dev/null 2>&1 } + +end_message() { + echo_message "" + echo_message "TMUX environment reloaded." + echo_message "" + echo_message "Done, press ENTER to continue." +} + +# Ensures a message is displayed for 5 seconds in tmux prompt. +# Does not override the 'display-time' tmux option. +display_message() { + local message="$1" + + # display_duration defaults to 5 seconds, if not passed as an argument + if [ "$#" -eq 2 ]; then + local display_duration="$2" + else + local display_duration="5000" + fi + + # saves user-set 'display-time' option + local saved_display_time=$(get_tmux_option "display-time" "750") + + # sets message display time to 5 seconds + tmux set-option -gq display-time "$display_duration" + + # displays message + tmux display-message "$message" + + # restores original 'display-time' value + tmux set-option -gq display-time "$saved_display_time" +} diff --git a/scripts/update_plugin.sh b/scripts/update_plugin.sh index 6570596..b57f429 100755 --- a/scripts/update_plugin.sh +++ b/scripts/update_plugin.sh @@ -1,34 +1,74 @@ #!/usr/bin/env bash -# when invoked with `prefix + U` this script: -# - shows a list of installed plugins -# - starts a prompt to enter the name of the plugin that will be updated - CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" source "$CURRENT_DIR/shared_functions.sh" -display_plugin_update_list() { +empty() { + [ -z "$1" ] +} + +if_all() { + [ "$1" == "all" ] +} + +cancel() { + exit 0 +} + +pull_changes() { + local plugin="$1" + local plugin_path=$(shared_plugin_path "$plugin") + cd $plugin_path && + git pull && + git submodule update --init --recursive +} + +update() { + local plugin="$1" + echo_message "Updating \"$plugin\"" + $(pull_changes "$plugin" > /dev/null 2>&1) && + echo_message " \"$plugin\" update success" || + echo_message " \"$plugin\" update fail" +} + + +update_all() { local plugins="$(shared_get_tpm_plugins_list)" for plugin in $plugins; do - # displaying only installed plugins - if plugin_already_cloned "$plugin"; then - echo_message "$plugin" + local plugin_name="$(shared_plugin_name "$plugin")" + # updating only installed plugins + if plugin_already_installed "$plugin_name"; then + update "$plugin_name" fi done } -update_plugin_prompt() { - tmux command-prompt -p 'plugin update:' " \ - send-keys C-m; \ - run-shell '$CURRENT_DIR/update_plugin.sh %1'" -} +handle_plugin_update() { + local arg="$1" + if empty "$arg"; then + cancel + + elif if_all "$arg"; then + echo_message "Updating all plugins!" + echo_message "" + update_all + + elif plugin_already_installed "$arg"; then + update "$arg" + + else + display_message "It seems this plugin is not installed: $arg" + cancel + fi +} main() { - reload_tmux_environment + local arg="$1" shared_set_tpm_path_constant - display_plugin_update_list - update_plugin_prompt + handle_plugin_update "$arg" + reload_tmux_environment + end_message } -main +main "$1" diff --git a/scripts/update_plugin_prompt.sh b/scripts/update_plugin_prompt.sh index acff43e..d9ac5e0 100755 --- a/scripts/update_plugin_prompt.sh +++ b/scripts/update_plugin_prompt.sh @@ -16,13 +16,14 @@ display_plugin_update_list() { for plugin in $plugins; do # displaying only installed plugins if plugin_already_installed "$plugin"; then - echo_message " $plugin" + local plugin_name="$(shared_plugin_name "$plugin")" + echo_message " $plugin_name" fi done echo_message "" echo_message "Type (full) plugin name to update it." - echo_message "* - updates all." + echo_message "Type \"all\" to update all plugins." echo_message "" echo_message "ENTER - cancels" }