From 40bfe5a4124be7b5983756cc81b54a4a4d5846e6 Mon Sep 17 00:00:00 2001
From: Fabian Wolff <fabi.wolff@arcor.de>
Date: Mon, 26 Sep 2016 21:41:42 +0200
Subject: Implement a locking mechanism to avoid multiple update prompts (fixes
 #3766)

---
 tools/check_for_upgrade.sh | 41 +++++++++++++++++++++++------------------
 1 file changed, 23 insertions(+), 18 deletions(-)

(limited to 'tools/check_for_upgrade.sh')

diff --git a/tools/check_for_upgrade.sh b/tools/check_for_upgrade.sh
index bd9aba8be..d1b174c6d 100644
--- a/tools/check_for_upgrade.sh
+++ b/tools/check_for_upgrade.sh
@@ -29,31 +29,36 @@ fi
 # Cancel upgrade if git is unavailable on the system
 whence git >/dev/null || return 0
 
-if [ -f ~/.zsh-update ]
+if mkdir "$ZSH/log/update.lock" 2>/dev/null
 then
-  . ~/.zsh-update
+  if [ -f ~/.zsh-update ]
+  then
+    . ~/.zsh-update
 
-  if [[ -z "$LAST_EPOCH" ]]; then
-    _update_zsh_update && return 0;
-  fi
+    if [[ -z "$LAST_EPOCH" ]]; then
+      _update_zsh_update && return 0;
+    fi
 
-  epoch_diff=$(($(_current_epoch) - $LAST_EPOCH))
-  if [ $epoch_diff -gt $epoch_target ]
-  then
-    if [ "$DISABLE_UPDATE_PROMPT" = "true" ]
+    epoch_diff=$(($(_current_epoch) - $LAST_EPOCH))
+    if [ $epoch_diff -gt $epoch_target ]
     then
-      _upgrade_zsh
-    else
-      echo "[Oh My Zsh] Would you like to check for updates? [Y/n]: \c"
-      read line
-      if [[ "$line" == Y* ]] || [[ "$line" == y* ]] || [ -z "$line" ]; then
+      if [ "$DISABLE_UPDATE_PROMPT" = "true" ]
+      then
         _upgrade_zsh
       else
-        _update_zsh_update
+        echo "[Oh My Zsh] Would you like to check for updates? [Y/n]: \c"
+        read line
+        if [[ "$line" == Y* ]] || [[ "$line" == y* ]] || [ -z "$line" ]; then
+          _upgrade_zsh
+        else
+          _update_zsh_update
+        fi
       fi
     fi
+  else
+    # create the zsh file
+    _update_zsh_update
   fi
-else
-  # create the zsh file
-  _update_zsh_update
+
+  rm -r $ZSH/log/update.lock
 fi
-- 
cgit v1.2.3-70-g09d2