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
...
@@ -4,11 +4,6 @@ if [[ -z "$ZSH_CACHE_DIR" ]]; then
ZSH_CACHE_DIR
=
"
$ZSH
/cache"
ZSH_CACHE_DIR
=
"
$ZSH
/cache"
fi
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...
# Check for updates on initial load...
if
[
"
$DISABLE_AUTO_UPDATE
"
!=
"true"
]
;
then
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
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
()
{
function
current_epoch
()
{
echo
"LAST_EPOCH=
$(
_current_epoch
)
"
>!
${
ZSH_CACHE_DIR
}
/.zsh-update
zmodload zsh/datetime
echo
$((
EPOCHSECONDS
/
60
/
60
/
24
))
}
}
function
_upgrade_zsh
()
{
function
update_last-updated_file
()
{
env
ZSH
=
$ZSH
sh
$ZSH
/tools/upgrade.sh
echo
"LAST_EPOCH=
$(
current_epoch
)
"
>!
"
${
ZSH_CACHE_DIR
}
/.zsh-update"
# update the zsh file
_update_zsh_update
}
}
epoch_target
=
$UPDATE_ZSH_DAYS
function
update_ohmyzsh
()
{
if
[[
-z
"
$epoch_target
"
]]
;
then
ZSH
=
"
$ZSH
"
sh
"
$ZSH
/tools/upgrade.sh"
# Default to old behavior
update_last-updated_file
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
# 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
local
epoch_target mtime option LAST_EPOCH
if
[
-f
${
ZSH_CACHE_DIR
}
/.zsh-update
]
;
then
.
${
ZSH_CACHE_DIR
}
/.zsh-update
if
[[
-z
"
$LAST_EPOCH
"
]]
;
then
# Remove lock directory if older than a day
_update_zsh_update
zmodload zsh/datetime
rmdir
$ZSH
/log/update.lock
# TODO: fix later
zmodload
-F
zsh/stat b:zstat
return
0
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
fi
epoch_diff
=
$((
$(
_current_epoch
)
-
$LAST_EPOCH
))
# Check for lock directory
if
[
$epoch_diff
-gt
$epoch_target
]
;
then
if
!
command mkdir
"
$ZSH
/log/update.lock"
2>/dev/null
;
then
if
[
"
$DISABLE_UPDATE_PROMPT
"
=
"true"
]
;
then
return
_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
# 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
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
fi
# Ask for confirmation before updating unless disabled
if
[[
"
$DISABLE_UPDATE_PROMPT
"
=
true
]]
;
then
update_ohmyzsh
else
else
# create the zsh file
# input sink to swallow all characters typed before the prompt
_update_zsh_update
# 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
fi
}
rmdir
$ZSH
/log/update.lock
unset
-f
current_epoch update_last-updated_file update_ohmyzsh
fi
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