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
889cd7ac
Commit
889cd7ac
authored
Oct 31, 2020
by
Marc Cornellà
Browse files
refactor(updater): switch to Zsh execution and fix git remote detection logic
parent
05e2956d
Changes
4
Hide whitespace changes
Inline
Side-by-side
lib/cli.zsh
View file @
889cd7ac
...
...
@@ -351,7 +351,7 @@ function _omz::theme::use {
function
_omz::update
{
# Run update script
env
ZSH
=
"
$ZSH
"
sh
"
$ZSH
/tools/upgrade.sh"
env
ZSH
=
"
$ZSH
"
z
sh
-f
"
$ZSH
/tools/upgrade.sh"
# Update last updated file
zmodload zsh/datetime
echo
"LAST_EPOCH=
$((
EPOCHSECONDS
/
60
/
60
/
24
))
"
>!
"
${
ZSH_CACHE_DIR
}
/.zsh-update"
...
...
lib/functions.zsh
View file @
889cd7ac
...
...
@@ -14,7 +14,7 @@ function upgrade_oh_my_zsh() {
fi
# Run update script
env
ZSH
=
"
$ZSH
"
sh
"
$ZSH
/tools/upgrade.sh"
env
ZSH
=
"
$ZSH
"
z
sh
-f
"
$ZSH
/tools/upgrade.sh"
# Update last updated file
zmodload zsh/datetime
echo
"LAST_EPOCH=
$((
EPOCHSECONDS
/
60
/
60
/
24
))
"
>!
"
${
ZSH_CACHE_DIR
}
/.zsh-update"
...
...
tools/check_for_upgrade.sh
View file @
889cd7ac
# 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"
mv
~/.zsh-update
"
${
ZSH_CACHE_DIR
}
/.zsh-update"
fi
# Cancel update if:
...
...
@@ -10,79 +10,81 @@ fi
if
[[
"
$DISABLE_AUTO_UPDATE
"
=
true
]]
\
||
[[
!
-w
"
$ZSH
"
||
!
-O
"
$ZSH
"
]]
\
||
!
command
-v
git &>/dev/null
;
then
return
return
fi
function
current_epoch
()
{
zmodload zsh/datetime
echo
$((
EPOCHSECONDS
/
60
/
60
/
24
))
zmodload zsh/datetime
echo
$((
EPOCHSECONDS
/
60
/
60
/
24
))
}
function
update_last_updated_file
()
{
echo
"LAST_EPOCH=
$(
current_epoch
)
"
>!
"
${
ZSH_CACHE_DIR
}
/.zsh-update"
echo
"LAST_EPOCH=
$(
current_epoch
)
"
>!
"
${
ZSH_CACHE_DIR
}
/.zsh-update"
}
function
update_ohmyzsh
()
{
ZSH
=
"
$ZSH
"
sh
"
$ZSH
/tools/upgrade.sh"
update_last_updated_file
ZSH
=
"
$ZSH
"
z
sh
-f
"
$ZSH
/tools/upgrade.sh"
update_last_updated_file
}
()
{
emulate
-L
zsh
emulate
-L
zsh
local
epoch_target mtime option LAST_EPOCH
local
epoch_target mtime option LAST_EPOCH
# 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
# 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
# Check for lock directory
if
!
command mkdir
"
$ZSH
/log/update.lock"
2>/dev/null
;
then
return
fi
# 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
"command rm -rf '
$ZSH
/log/update.lock'; return 1"
EXIT INT QUIT
# 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
"
unset -f current_epoch update_last_updated_file update_ohmyzsh
command 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
# 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
# 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
# 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
# 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
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
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
}
unset
-f
current_epoch update_last_updated_file update_ohmyzsh
tools/upgrade.sh
100644 → 100755
View file @
889cd7ac
# Use colors, but only if connected to a terminal, and that terminal
# supports them.
#!/usr/bin/env zsh
cd
"
$ZSH
"
# Use colors, but only if connected to a terminal
# and that terminal supports them.
local
-a
RAINBOW
local
RED GREEN YELLOW BLUE UNDER BOLD RESET
if
[
-t
1
]
;
then
RB_RED
=
$(
printf
'\033[38;5;196m'
)
RB_ORANGE
=
$(
printf
'\033[38;5;202m'
)
RB_YELLOW
=
$(
printf
'\033[38;5;226m'
)
RB_GREEN
=
$(
printf
'\033[38;5;082m'
)
RB_BLUE
=
$(
printf
'\033[38;5;021m'
)
RB_INDIGO
=
$(
printf
'\033[38;5;093m'
)
RB_VIOLET
=
$(
printf
'\033[38;5;163m'
)
RAINBOW
=(
"
$(
printf
'\033[38;5;196m'
)
"
"
$(
printf
'\033[38;5;202m'
)
"
"
$(
printf
'\033[38;5;226m'
)
"
"
$(
printf
'\033[38;5;082m'
)
"
"
$(
printf
'\033[38;5;021m'
)
"
"
$(
printf
'\033[38;5;093m'
)
"
"
$(
printf
'\033[38;5;163m'
)
"
)
RED
=
$(
printf
'\033[31m'
)
GREEN
=
$(
printf
'\033[32m'
)
...
...
@@ -16,25 +26,19 @@ if [ -t 1 ]; then
BOLD
=
$(
printf
'\033[1m'
)
UNDER
=
$(
printf
'\033[4m'
)
RESET
=
$(
printf
'\033[m'
)
else
RB_RED
=
""
RB_ORANGE
=
""
RB_YELLOW
=
""
RB_GREEN
=
""
RB_BLUE
=
""
RB_INDIGO
=
""
RB_VIOLET
=
""
RED
=
""
GREEN
=
""
YELLOW
=
""
BLUE
=
""
UNDER
=
""
BOLD
=
""
RESET
=
""
fi
cd
"
$ZSH
"
# Update upstream remote to ohmyzsh org
git remote
-v
|
while
read
remote url _
;
do
case
"
$url
"
in
https://github.com/robbyrussell/oh-my-zsh
(
|
.git
)
)
git remote set-url
"
$remote
"
"https://github.com/ohmyzsh/ohmyzsh.git"
break
;;
git@github.com:robbyrussell/oh-my-zsh
(
|
.git
)
)
git remote set-url
"
$remote
"
"git@github.com:ohmyzsh/ohmyzsh.git"
break
;;
esac
done
# Set git-config values known to fix git errors
# Line endings (#4069)
...
...
@@ -45,30 +49,36 @@ git config fsck.zeroPaddedFilemode ignore
git config fetch.fsck.zeroPaddedFilemode ignore
git config receive.fsck.zeroPaddedFilemode ignore
# autostash on rebase (#7172)
resetAutoStash
=
$(
git config
--bool
rebase.autoStash 2>
&1
)
resetAutoStash
=
$(
git config
--bool
rebase.autoStash 2>
/dev/null
)
git config rebase.autoStash
true
# Update upstream remote to ohmyzsh org
remote
=
$(
git remote
-v
|
awk
'/https:\/\/github\.com\/robbyrussell\/oh-my-zsh\.git/{ print $1; exit }'
)
if
[
-n
"
$remote
"
]
;
then
git remote set-url
"
$remote
"
"https://github.com/ohmyzsh/ohmyzsh.git"
fi
local
ret
=
0
# Update Oh My Zsh
printf
"
${
BLUE
}
%s
${
RESET
}
\n
"
"Updating Oh My Zsh"
if
git pull
--rebase
--stat
origin master
then
printf
'%s %s__ %s %s %s %s %s__ %s\n'
$RB_RED
$RB_ORANGE
$RB_YELLOW
$RB_GREEN
$RB_BLUE
$RB_INDIGO
$RB_VIOLET
$RB_RESET
printf
'%s ____ %s/ /_ %s ____ ___ %s__ __ %s ____ %s_____%s/ /_ %s\n'
$RB_RED
$RB_ORANGE
$RB_YELLOW
$RB_GREEN
$RB_BLUE
$RB_INDIGO
$RB_VIOLET
$RB_RESET
printf
'%s / __ \%s/ __ \ %s / __ `__ \%s/ / / / %s /_ / %s/ ___/%s __ \ %s\n'
$RB_RED
$RB_ORANGE
$RB_YELLOW
$RB_GREEN
$RB_BLUE
$RB_INDIGO
$RB_VIOLET
$RB_RESET
printf
'%s/ /_/ /%s / / / %s / / / / / /%s /_/ / %s / /_%s(__ )%s / / / %s\n'
$RB_RED
$RB_ORANGE
$RB_YELLOW
$RB_GREEN
$RB_BLUE
$RB_INDIGO
$RB_VIOLET
$RB_RESET
printf
'%s\____/%s_/ /_/ %s /_/ /_/ /_/%s\__, / %s /___/%s____/%s_/ /_/ %s\n'
$RB_RED
$RB_ORANGE
$RB_YELLOW
$RB_GREEN
$RB_BLUE
$RB_INDIGO
$RB_VIOLET
$RB_RESET
printf
'%s %s %s %s /____/ %s %s %s %s\n'
$RB_RED
$RB_ORANGE
$RB_YELLOW
$RB_GREEN
$RB_BLUE
$RB_INDIGO
$RB_VIOLET
$RB_RESET
printf
"
${
BLUE
}
%s
\n
"
"Hooray! Oh My Zsh has been updated and/or is at the current version."
printf
"
${
BLUE
}${
BOLD
}
%s
${
UNDER
}
%s
${
RESET
}
\n
"
"To keep up on the latest news and updates, follow us on Twitter:"
"https://twitter.com/ohmyzsh"
last_commit
=
$(
git rev-parse HEAD
)
if
git pull
--rebase
--stat
origin master
;
then
# Check if it was really updated or not
if
[[
"
$(
git rev-parse HEAD
)
"
=
"
$last_commit
"
]]
;
then
message
=
"Oh My Zsh is already at the latest version."
ret
=
80
# non-zero exit code to indicate no changes pulled
else
message
=
"Hooray! Oh My Zsh has been updated!"
fi
printf
'%s %s__ %s %s %s %s %s__ %s\n'
$RAINBOW
$RESET
printf
'%s ____ %s/ /_ %s ____ ___ %s__ __ %s ____ %s_____%s/ /_ %s\n'
$RAINBOW
$RESET
printf
'%s / __ \%s/ __ \ %s / __ `__ \%s/ / / / %s /_ / %s/ ___/%s __ \ %s\n'
$RAINBOW
$RESET
printf
'%s/ /_/ /%s / / / %s / / / / / /%s /_/ / %s / /_%s(__ )%s / / / %s\n'
$RAINBOW
$RESET
printf
'%s\____/%s_/ /_/ %s /_/ /_/ /_/%s\__, / %s /___/%s____/%s_/ /_/ %s\n'
$RAINBOW
$RESET
printf
'%s %s %s %s /____/ %s %s %s %s\n'
$RAINBOW
$RESET
printf
'\n'
printf
"
${
BLUE
}
%s
${
RESET
}
\n
"
"
$message
"
printf
"
${
BLUE
}${
BOLD
}
%s
${
UNDER
}
%s
${
RESET
}
\n
"
"To keep up with the latest news and updates, follow us on Twitter:"
"https://twitter.com/ohmyzsh"
printf
"
${
BLUE
}${
BOLD
}
%s
${
UNDER
}
%s
${
RESET
}
\n
"
"Want to get involved in the community? Join our Discord:"
"https://discord.gg/ohmyzsh"
printf
"
${
BLUE
}${
BOLD
}
%s
${
UNDER
}
%s
${
RESET
}
\n
"
"Get your Oh My Zsh swag at:"
"https://shop.planetargon.com/collections/oh-my-zsh"
else
status
=
$?
ret
=
$?
printf
"
${
RED
}
%s
${
RESET
}
\n
"
'There was an error updating. Try again later?'
fi
...
...
@@ -79,4 +89,4 @@ case "$resetAutoStash" in
esac
# Exit with `1` if the update failed
exit
$
status
exit
$
ret
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