Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Oh My Zsh
Commits
3c777ebf
Unverified
Commit
3c777ebf
authored
Jun 09, 2020
by
Marc Cornellà
Committed by
GitHub
Jun 09, 2020
Browse files
update: refactor and fix logic in check_for_upgrade.sh (#8939)
parent
a2a83be9
Changes
2
Show whitespace changes
Inline
Side-by-side
oh-my-zsh.sh
View file @
3c777ebf
...
...
@@ -4,11 +4,6 @@ if [[ -z "$ZSH_CACHE_DIR" ]]; then
ZSH_CACHE_DIR
=
"
$ZSH
/cache"
fi
# 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
# Check for updates on initial load...
if
[
"
$DISABLE_AUTO_UPDATE
"
!=
"true"
]
;
then
env
ZSH
=
$ZSH
ZSH_CACHE_DIR
=
$ZSH_CACHE_DIR
DISABLE_UPDATE_PROMPT
=
$DISABLE_UPDATE_PROMPT
zsh
-f
$ZSH
/tools/check_for_upgrade.sh
...
...
tools/check_for_upgrade.sh
View file @
3c777ebf
#!/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
zmodload zsh/datetime
# 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
function
_current_epoch
()
{
echo
$((
$EPOCHSECONDS
/
60
/
60
/
24
))
}
function
_update_zsh_update
()
{
echo
"LAST_EPOCH=
$(
_current_epoch
)
"
>!
${
ZSH_CACHE_DIR
}
/.zsh-update
function
current_epoch
()
{
zmodload zsh/datetime
echo
$((
EPOCHSECONDS
/
60
/
60
/
24
))
}
function
_upgrade_zsh
()
{
env
ZSH
=
$ZSH
sh
$ZSH
/tools/upgrade.sh
# update the zsh file
_update_zsh_update
function
update_last-updated_file
()
{
echo
"LAST_EPOCH=
$(
current_epoch
)
"
>!
"
${
ZSH_CACHE_DIR
}
/.zsh-update"
}
epoch_target
=
$UPDATE_ZSH_DAYS
if
[[
-z
"
$epoch_target
"
]]
;
then
# Default to old behavior
epoch_target
=
13
fi
# Cancel upgrade if the current user doesn't have write permissions for the
# oh-my-zsh directory.
[[
-w
"
$ZSH
"
]]
||
return
0
function
update_ohmyzsh
()
{
ZSH
=
"
$ZSH
"
sh
"
$ZSH
/tools/upgrade.sh"
update_last-updated_file
}
# Cancel upgrade if git is unavailable on the system
whence git
>
/dev/null
||
return
0
()
{
emulate
-L
zsh
if
mkdir
"
$ZSH
/log/update.lock"
2>/dev/null
;
then
if
[
-f
${
ZSH_CACHE_DIR
}
/.zsh-update
]
;
then
.
${
ZSH_CACHE_DIR
}
/.zsh-update
local
epoch_target mtime option LAST_EPOCH
if
[[
-z
"
$LAST_EPOCH
"
]]
;
then
_update_zsh_update
rmdir
$ZSH
/log/update.lock
# TODO: fix later
return
0
# 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
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
# Check for lock directory
if
!
command mkdir
"
$ZSH
/log/update.lock"
2>/dev/null
;
then
return
fi
# 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
# 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
# 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
# Ask for confirmation before updating unless disabled
if
[[
"
$DISABLE_UPDATE_PROMPT
"
=
true
]]
;
then
update_ohmyzsh
else
# create the zsh file
_update_zsh_update
# 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
}
rmdir
$ZSH
/log/update.lock
fi
unset
-f
current_epoch update_last-updated_file update_ohmyzsh
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment