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
Ohmyzsh
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