| 
									
										
										
										
											2020-06-09 19:38:08 +02:00
										 |  |  | # Migrate .zsh-update file to $ZSH_CACHE_DIR | 
					
						
							|  |  |  | if [[ -f ~/.zsh-update && ! -f "${ZSH_CACHE_DIR}/.zsh-update" ]]; then | 
					
						
							| 
									
										
										
										
											2020-10-31 23:14:24 +01:00
										 |  |  |   mv ~/.zsh-update "${ZSH_CACHE_DIR}/.zsh-update" | 
					
						
							| 
									
										
										
										
											2020-06-09 19:38:08 +02:00
										 |  |  | 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 | 
					
						
							| 
									
										
										
										
											2020-10-31 23:14:24 +01:00
										 |  |  |   return | 
					
						
							| 
									
										
										
										
											2020-06-09 19:38:08 +02:00
										 |  |  | fi | 
					
						
							| 
									
										
										
										
											2014-09-16 22:29:52 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-23 17:11:45 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-09 19:38:08 +02:00
										 |  |  | function current_epoch() { | 
					
						
							| 
									
										
										
										
											2020-10-31 23:14:24 +01:00
										 |  |  |   zmodload zsh/datetime | 
					
						
							|  |  |  |   echo $(( EPOCHSECONDS / 60 / 60 / 24 )) | 
					
						
							| 
									
										
										
										
											2009-12-12 13:45:30 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-28 18:54:26 +02:00
										 |  |  | function update_last_updated_file() { | 
					
						
							| 
									
										
										
										
											2020-10-31 23:14:24 +01:00
										 |  |  |   echo "LAST_EPOCH=$(current_epoch)" >! "${ZSH_CACHE_DIR}/.zsh-update" | 
					
						
							| 
									
										
										
										
											2009-12-12 13:45:30 -08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2009-09-23 17:11:45 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-09 19:38:08 +02:00
										 |  |  | function update_ohmyzsh() { | 
					
						
							| 
									
										
										
										
											2021-03-01 07:17:54 +00:00
										 |  |  |   if ZSH="$ZSH" zsh -f "$ZSH/tools/upgrade.sh" --interactive; then | 
					
						
							| 
									
										
										
										
											2021-01-21 11:52:09 +01:00
										 |  |  |     update_last_updated_file | 
					
						
							|  |  |  |   fi | 
					
						
							| 
									
										
										
										
											2011-11-15 13:46:14 -05:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-09 19:38:08 +02:00
										 |  |  | () { | 
					
						
							| 
									
										
										
										
											2020-10-31 23:14:24 +01:00
										 |  |  |   emulate -L zsh | 
					
						
							| 
									
										
										
										
											2020-06-09 19:38:08 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-31 23:14:24 +01:00
										 |  |  |   local epoch_target mtime option LAST_EPOCH | 
					
						
							| 
									
										
										
										
											2020-06-09 19:38:08 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-31 23:14:24 +01:00
										 |  |  |   # 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" | 
					
						
							| 
									
										
										
										
											2020-06-09 19:38:08 +02:00
										 |  |  |     fi | 
					
						
							| 
									
										
										
										
											2020-10-31 23:14:24 +01:00
										 |  |  |   fi | 
					
						
							| 
									
										
										
										
											2012-11-26 11:35:16 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-31 23:14:24 +01:00
										 |  |  |   # Check for lock directory | 
					
						
							|  |  |  |   if ! command mkdir "$ZSH/log/update.lock" 2>/dev/null; then | 
					
						
							|  |  |  |     return | 
					
						
							|  |  |  |   fi | 
					
						
							| 
									
										
										
										
											2014-06-04 19:26:46 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-08 16:11:16 +02:00
										 |  |  |   # Remove lock directory on exit. `return $ret` is important for when trapping a SIGINT: | 
					
						
							| 
									
										
										
										
											2020-10-31 23:14:24 +01:00
										 |  |  |   #  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. | 
					
						
							| 
									
										
										
										
											2021-07-08 16:11:16 +02:00
										 |  |  |   #  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. | 
					
						
							| 
									
										
										
										
											2020-10-31 23:14:24 +01:00
										 |  |  |   trap "
 | 
					
						
							| 
									
										
										
										
											2021-07-08 16:11:16 +02:00
										 |  |  |     ret=\$? | 
					
						
							|  |  |  |     unset -f current_epoch update_last_updated_file update_ohmyzsh 2>/dev/null | 
					
						
							|  |  |  |     command rm -rf '$ZSH/log/update.lock' | 
					
						
							|  |  |  |     return \$ret | 
					
						
							| 
									
										
										
										
											2020-10-31 23:14:24 +01:00
										 |  |  |   " EXIT INT QUIT
 | 
					
						
							| 
									
										
										
										
											2015-10-16 23:19:55 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-31 23:14:24 +01:00
										 |  |  |   # 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 | 
					
						
							| 
									
										
										
										
											2009-12-12 13:45:30 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-31 23:14:24 +01:00
										 |  |  |   # 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 | 
					
						
							| 
									
										
										
										
											2009-12-12 13:45:30 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-31 23:14:24 +01:00
										 |  |  |   # 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 | 
					
						
							| 
									
										
										
										
											2020-06-09 19:38:08 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-31 23:14:24 +01:00
										 |  |  |     echo -n "[oh-my-zsh] Would you like to update? [Y/n] " | 
					
						
							|  |  |  |     read -r -k 1 option | 
					
						
							|  |  |  |     [[ "$option" != $'\n' ]] && echo | 
					
						
							|  |  |  |     case "$option" in | 
					
						
							|  |  |  |       [yY$'\n']) update_ohmyzsh ;; | 
					
						
							|  |  |  |       [nN]) update_last_updated_file ;; | 
					
						
							|  |  |  |     esac | 
					
						
							|  |  |  |   fi | 
					
						
							| 
									
										
										
										
											2020-06-09 19:38:08 +02:00
										 |  |  | } |