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
Hide 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
# 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
zmodload zsh/datetime
function
_current_epoch
()
{
function
current_epoch
()
{
echo
$((
$EPOCHSECONDS
/
60
/
60
/
24
))
zmodload zsh/datetime
echo
$((
EPOCHSECONDS
/
60
/
60
/
24
))
}
}
function
_
update_
zsh_updat
e
()
{
function
update_
last-updated_fil
e
()
{
echo
"LAST_EPOCH=
$(
_
current_epoch
)
"
>!
${
ZSH_CACHE_DIR
}
/.zsh-update
echo
"LAST_EPOCH=
$(
current_epoch
)
"
>!
"
${
ZSH_CACHE_DIR
}
/.zsh-update
"
}
}
function
_upgrade_zsh
()
{
function
update_ohmyzsh
()
{
env
ZSH
=
$ZSH
sh
$ZSH
/tools/upgrade.sh
ZSH
=
"
$ZSH
"
sh
"
$ZSH
/tools/upgrade.sh"
# update the zsh file
update_last-updated_file
_update_zsh_update
}
}
epoch_target
=
$UPDATE_ZSH_DAYS
()
{
if
[[
-z
"
$epoch_target
"
]]
;
then
emulate
-L
zsh
# Default to old behavior
epoch_target
=
13
local
epoch_target mtime option LAST_EPOCH
fi
# 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
# Cancel upgrade if the current user doesn't have write permissions for the
# Check for lock directory
# oh-my-zsh directory.
if
!
command mkdir
"
$ZSH
/log/update.lock"
2>/dev/null
;
then
[[
-w
"
$ZSH
"
]]
||
return
0
return
fi
# Cancel upgrade if git is unavailable on the system
# Remove lock directory on exit. `return 1` is important for when trapping a SIGINT:
whence git
>
/dev/null
||
return
0
# 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
if
mkdir
"
$ZSH
/log/update.lock"
2>/dev/null
;
then
# Create or update .zsh-update file if missing or malformed
if
[
-f
${
ZSH_CACHE_DIR
}
/.zsh-update
]
;
then
if
!
source
"
${
ZSH_CACHE_DIR
}
/.zsh-update"
2>/dev/null
||
[[
-z
"
$LAST_EPOCH
"
]]
;
then
.
${
ZSH_CACHE_DIR
}
/.zsh-update
update_last-updated_file
return
fi
if
[[
-z
"
$LAST_EPOCH
"
]]
;
then
# Number of days before trying to update again
_update_zsh_update
epoch_target
=
${
UPDATE_ZSH_DAYS
:-
13
}
rmdir
$ZSH
/log/update.lock
# TODO: fix later
# Test if enough time has passed until the next update
return
0
if
((
(
$(
current_epoch
)
-
$LAST_EPOCH
)
<
$epoch_target
))
;
then
return
fi
fi
epoch_diff
=
$((
$(
_current_epoch
)
-
$LAST_EPOCH
))
# Ask for confirmation before updating unless disabled
if
[
$epoch_diff
-gt
$epoch_target
]
;
then
if
[[
"
$DISABLE_UPDATE_PROMPT
"
=
true
]]
;
then
if
[
"
$DISABLE_UPDATE_PROMPT
"
=
"true"
]
;
then
update_ohmyzsh
_upgrade_zsh
else
else
# input sink to swallow all characters typed before the prompt
echo
"[Oh My Zsh] Would you like to update? [Y/n]:
\c
"
# and add a newline if there wasn't one after characters typed
read
line
while
read
-t
-k
1 option
;
do
true
;
done
if
[[
"
$line
"
==
Y
*
]]
||
[[
"
$line
"
==
y
*
]]
||
[
-z
"
$line
"
]
;
then
[[
"
$option
"
!=
(
$'
\n
'
|
""
)
]]
&&
echo
_upgrade_zsh
else
echo
-n
"[oh-my-zsh] Would you like to update? [Y/n] "
_update_zsh_update
read
-r
-k
1 option
fi
[[
"
$option
"
!=
$'
\n
'
]]
&&
echo
fi
case
"
$option
"
in
[
nN]
)
update_last-updated_file
;;
*
)
update_ohmyzsh
;;
esac
fi
fi
else
}
# create the zsh file
_update_zsh_update
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