From 3c777ebf1b24826363bea6bc29afa9ba038b10e8 Mon Sep 17 00:00:00 2001 From: Marc Cornellà Date: Tue, 9 Jun 2020 19:38:08 +0200 Subject: update: refactor and fix logic in check_for_upgrade.sh (#8939) --- tools/check_for_upgrade.sh | 118 +++++++++++++++++++++++++++------------------ 1 file changed, 72 insertions(+), 46 deletions(-) (limited to 'tools') diff --git a/tools/check_for_upgrade.sh b/tools/check_for_upgrade.sh index c8dedcf77..872f5e820 100644 --- a/tools/check_for_upgrade.sh +++ b/tools/check_for_upgrade.sh @@ -1,62 +1,88 @@ -#!/usr/bin/env zsh +# Migrate .zsh-update file to $ZSH_CACHE_DIR +if [[ -f ~/.zsh-update && ! -f "${ZSH_CACHE_DIR}/.zsh-update" ]]; then + mv ~/.zsh-update "${ZSH_CACHE_DIR}/.zsh-update" +fi + +# Cancel update if: +# - the automatic update is disabled. +# - the current user doesn't have write permissions nor owns the $ZSH directory. +# - git is unavailable on the system. +if [[ "$DISABLE_AUTO_UPDATE" = true ]] \ + || [[ ! -w "$ZSH" || ! -O "$ZSH" ]] \ + || ! command -v git &>/dev/null; then + return +fi -zmodload zsh/datetime -function _current_epoch() { - echo $(( $EPOCHSECONDS / 60 / 60 / 24 )) +function current_epoch() { + zmodload zsh/datetime + echo $(( EPOCHSECONDS / 60 / 60 / 24 )) } -function _update_zsh_update() { - echo "LAST_EPOCH=$(_current_epoch)" >! ${ZSH_CACHE_DIR}/.zsh-update +function update_last-updated_file() { + echo "LAST_EPOCH=$(current_epoch)" >! "${ZSH_CACHE_DIR}/.zsh-update" } -function _upgrade_zsh() { - env ZSH=$ZSH sh $ZSH/tools/upgrade.sh - # update the zsh file - _update_zsh_update +function update_ohmyzsh() { + ZSH="$ZSH" sh "$ZSH/tools/upgrade.sh" + update_last-updated_file } -epoch_target=$UPDATE_ZSH_DAYS -if [[ -z "$epoch_target" ]]; then - # Default to old behavior - epoch_target=13 -fi +() { + emulate -L zsh + + local epoch_target mtime option LAST_EPOCH + + # Remove lock directory if older than a day + zmodload zsh/datetime + zmodload -F zsh/stat b:zstat + if mtime=$(zstat +mtime "$ZSH/log/update.lock" 2>/dev/null); then + if (( (mtime + 3600 * 24) < EPOCHSECONDS )); then + command rm -rf "$ZSH/log/update.lock" + fi + fi -# Cancel upgrade if the current user doesn't have write permissions for the -# oh-my-zsh directory. -[[ -w "$ZSH" ]] || return 0 + # Check for lock directory + if ! command mkdir "$ZSH/log/update.lock" 2>/dev/null; then + return + fi -# Cancel upgrade if git is unavailable on the system -whence git >/dev/null || return 0 + # Remove lock directory on exit. `return 1` is important for when trapping a SIGINT: + # The return status from the function is handled specially. If it is zero, the signal is + # assumed to have been handled, and execution continues normally. Otherwise, the shell + # will behave as interrupted except that the return status of the trap is retained. + trap "rm -rf '$ZSH/log/update.lock'; return 1" EXIT INT QUIT -if mkdir "$ZSH/log/update.lock" 2>/dev/null; then - if [ -f ${ZSH_CACHE_DIR}/.zsh-update ]; then - . ${ZSH_CACHE_DIR}/.zsh-update + # Create or update .zsh-update file if missing or malformed + if ! source "${ZSH_CACHE_DIR}/.zsh-update" 2>/dev/null || [[ -z "$LAST_EPOCH" ]]; then + update_last-updated_file + return + fi - if [[ -z "$LAST_EPOCH" ]]; then - _update_zsh_update - rmdir $ZSH/log/update.lock # TODO: fix later - return 0 + # Number of days before trying to update again + epoch_target=${UPDATE_ZSH_DAYS:-13} + # Test if enough time has passed until the next update + if (( ( $(current_epoch) - $LAST_EPOCH ) < $epoch_target )); then + return fi - epoch_diff=$(($(_current_epoch) - $LAST_EPOCH)) - if [ $epoch_diff -gt $epoch_target ]; then - if [ "$DISABLE_UPDATE_PROMPT" = "true" ]; then - _upgrade_zsh - else - echo "[Oh My Zsh] Would you like to update? [Y/n]: \c" - read line - if [[ "$line" == Y* ]] || [[ "$line" == y* ]] || [ -z "$line" ]; then - _upgrade_zsh - else - _update_zsh_update - fi - fi + # Ask for confirmation before updating unless disabled + if [[ "$DISABLE_UPDATE_PROMPT" = true ]]; then + update_ohmyzsh + else + # input sink to swallow all characters typed before the prompt + # and add a newline if there wasn't one after characters typed + while read -t -k 1 option; do true; done + [[ "$option" != ($'\n'|"") ]] && echo + + echo -n "[oh-my-zsh] Would you like to update? [Y/n] " + read -r -k 1 option + [[ "$option" != $'\n' ]] && echo + case "$option" in + [nN]) update_last-updated_file ;; + *) update_ohmyzsh ;; + esac fi - else - # create the zsh file - _update_zsh_update - fi +} - rmdir $ZSH/log/update.lock -fi +unset -f current_epoch update_last-updated_file update_ohmyzsh -- cgit v1.2.3-70-g09d2 From 48b98b957ecfb53a9d2925c03a1524197bd87894 Mon Sep 17 00:00:00 2001 From: alexagnelli <51273591+alexagnelli@users.noreply.github.com> Date: Sun, 28 Jun 2020 18:34:02 +0200 Subject: update: only update on a valid affirmative input (#9062) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Marc Cornellà --- tools/check_for_upgrade.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tools') diff --git a/tools/check_for_upgrade.sh b/tools/check_for_upgrade.sh index 872f5e820..368b30d25 100644 --- a/tools/check_for_upgrade.sh +++ b/tools/check_for_upgrade.sh @@ -79,8 +79,8 @@ function update_ohmyzsh() { read -r -k 1 option [[ "$option" != $'\n' ]] && echo case "$option" in + [yY$'\n']) update_ohmyzsh ;; [nN]) update_last-updated_file ;; - *) update_ohmyzsh ;; esac fi } -- cgit v1.2.3-70-g09d2 From 97cf0bf4bd7655767e9e5ea27ddb6fbe550a305d Mon Sep 17 00:00:00 2001 From: Marc Cornellà Date: Sun, 28 Jun 2020 18:54:26 +0200 Subject: update: change dash in function name for sh compat (fixes #9064) --- tools/check_for_upgrade.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'tools') diff --git a/tools/check_for_upgrade.sh b/tools/check_for_upgrade.sh index 368b30d25..c91431c25 100644 --- a/tools/check_for_upgrade.sh +++ b/tools/check_for_upgrade.sh @@ -19,13 +19,13 @@ function current_epoch() { echo $(( EPOCHSECONDS / 60 / 60 / 24 )) } -function update_last-updated_file() { +function update_last_updated_file() { echo "LAST_EPOCH=$(current_epoch)" >! "${ZSH_CACHE_DIR}/.zsh-update" } function update_ohmyzsh() { ZSH="$ZSH" sh "$ZSH/tools/upgrade.sh" - update_last-updated_file + update_last_updated_file } () { @@ -55,7 +55,7 @@ function update_ohmyzsh() { # Create or update .zsh-update file if missing or malformed if ! source "${ZSH_CACHE_DIR}/.zsh-update" 2>/dev/null || [[ -z "$LAST_EPOCH" ]]; then - update_last-updated_file + update_last_updated_file return fi @@ -80,9 +80,9 @@ function update_ohmyzsh() { [[ "$option" != $'\n' ]] && echo case "$option" in [yY$'\n']) update_ohmyzsh ;; - [nN]) update_last-updated_file ;; + [nN]) update_last_updated_file ;; esac fi } -unset -f current_epoch update_last-updated_file update_ohmyzsh +unset -f current_epoch update_last_updated_file update_ohmyzsh -- cgit v1.2.3-70-g09d2 From ce28ac42c8e9933b1b3ca041bed0a3f1140eada2 Mon Sep 17 00:00:00 2001 From: Larson Carter Date: Sun, 28 Jun 2020 15:06:13 -0500 Subject: Modernize install and update banners (#9045) --- tools/install.sh | 8 ++++---- tools/upgrade.sh | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) (limited to 'tools') diff --git a/tools/install.sh b/tools/install.sh index 08f3db1e3..26b9bf08e 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -269,11 +269,11 @@ main() { /____/ ....is now installed! - Please look over the ~/.zshrc file to select plugins, themes, and options. + Before your scream Oh My Zsh! please look over the ~/.zshrc file to select plugins, themes, and options. - p.s. Follow us on https://twitter.com/ohmyzsh - - p.p.s. Get stickers, shirts, and coffee mugs at https://shop.planetargon.com/collections/oh-my-zsh + • Follow us on Twitter: https://twitter.com/ohmyzsh + • Join our Discord server: https://discord.gg/ohmyzsh + • Get stickers, shirts, coffee mugs and other swag: https://shop.planetargon.com/collections/oh-my-zsh EOF printf "$RESET" diff --git a/tools/upgrade.sh b/tools/upgrade.sh index 19ac88c73..de7a8419b 100644 --- a/tools/upgrade.sh +++ b/tools/upgrade.sh @@ -62,7 +62,8 @@ then printf '%s\____/%s_/ /_/ %s /_/ /_/ /_/%s\__, / %s /___/%s____/%s_/ /_/ %s\n' $RB_RED $RB_ORANGE $RB_YELLOW $RB_GREEN $RB_BLUE $RB_INDIGO $RB_VIOLET $RB_RESET printf '%s %s %s %s /____/ %s %s %s %s\n' $RB_RED $RB_ORANGE $RB_YELLOW $RB_GREEN $RB_BLUE $RB_INDIGO $RB_VIOLET $RB_RESET printf "${BLUE}%s\n" "Hooray! Oh My Zsh has been updated and/or is at the current version." - printf "${BLUE}${BOLD}%s${RESET}\n" "To keep up on the latest news and updates, follow us on twitter: https://twitter.com/ohmyzsh" + printf "${BLUE}${BOLD}%s${RESET}\n" "To keep up on the latest news and updates, follow us on Twitter: https://twitter.com/ohmyzsh" + printf "${BLUE}${BOLD}%s${RESET}\n" "Want to get involved in the community? Join our Discord: https://discord.gg/ohmyzsh" printf "${BLUE}${BOLD}%s${RESET}\n" "Get your Oh My Zsh swag at: https://shop.planetargon.com/collections/oh-my-zsh" else printf "${RED}%s${RESET}\n" 'There was an error updating. Try again later?' -- cgit v1.2.3-70-g09d2 From 232cb19859ce9b0698ff8e281dc9e5d01b0aaf27 Mon Sep 17 00:00:00 2001 From: Alex Zdanowicz Date: Wed, 1 Jul 2020 06:44:14 -0700 Subject: install: fix typo (#9069) Changing 'your' to 'you' --- tools/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tools') diff --git a/tools/install.sh b/tools/install.sh index 26b9bf08e..8a93708ca 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -269,7 +269,7 @@ main() { /____/ ....is now installed! - Before your scream Oh My Zsh! please look over the ~/.zshrc file to select plugins, themes, and options. + Before you scream Oh My Zsh! please look over the ~/.zshrc file to select plugins, themes, and options. • Follow us on Twitter: https://twitter.com/ohmyzsh • Join our Discord server: https://discord.gg/ohmyzsh -- cgit v1.2.3-70-g09d2