From 36f444ed7325720ec05f182781ec7d6c9a4d675c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marc=20Cornell=C3=A0?= <hello@mcornella.com>
Date: Thu, 8 Jul 2021 16:11:16 +0200
Subject: [PATCH] fix(update): fix error exit code on update check (#10033)

This patch removes the 'exit 1' status code when the update check
finishes or is ended with CTRL+C.

Fixes #10033
---
 tools/check_for_upgrade.sh | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/tools/check_for_upgrade.sh b/tools/check_for_upgrade.sh
index 29a48b88..e87da348 100644
--- a/tools/check_for_upgrade.sh
+++ b/tools/check_for_upgrade.sh
@@ -48,14 +48,17 @@ function update_ohmyzsh() {
     return
   fi
 
-  # Remove lock directory on exit. `return 1` is important for when trapping a SIGINT:
+  # Remove lock directory on exit. `return $ret` 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.
+  #  This means that for a CTRL+C, the trap needs to return the same exit status so that
+  #  the shell actually exits what it's running.
   trap "
-  unset -f current_epoch update_last_updated_file update_ohmyzsh
-  command rm -rf '$ZSH/log/update.lock'
-  return 1
+    ret=\$?
+    unset -f current_epoch update_last_updated_file update_ohmyzsh 2>/dev/null
+    command rm -rf '$ZSH/log/update.lock'
+    return \$ret
   " EXIT INT QUIT
 
   # Create or update .zsh-update file if missing or malformed