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
07bcf041
Unverified
Commit
07bcf041
authored
May 01, 2020
by
Marc Cornellà
Committed by
GitHub
May 01, 2020
Browse files
core: add basic Oh My Zsh CLI (#8876)
parent
06b02766
Changes
2
Hide whitespace changes
Inline
Side-by-side
core/cli.zsh
0 → 100644
View file @
07bcf041
#!/usr/bin/env zsh
function
omz
{
[[
$#
-gt
0
]]
||
{
_omz::help
return
1
}
local command
=
"
$1
"
shift
# Subcommand functions start with _ so that they don't
# appear as completion entries when looking for `omz`
((
$+
functions[_omz::
$command
]
))
||
{
_omz::help
return
1
}
_omz::
$command
"
$@
"
}
function
_omz
{
local
-a
cmds subcmds
cmds
=(
'help:Usage information'
'pr:Commands for Oh My Zsh Pull Requests'
)
if
((
CURRENT
==
2
))
;
then
_describe
'command'
cmds
elif
((
CURRENT
==
3
))
;
then
case
"
$words
[2]"
in
pr
)
subcmds
=(
'test:Test a Pull Request'
'clean:Delete all Pull Request branches'
)
_describe
'command'
subcmds
;;
esac
fi
return
0
}
compdef _omz omz
function
_omz::help
{
cat
<<
EOF
Usage: omz <command> [options]
Available commands:
help Print this help message
pr <command> Commands for Oh My Zsh Pull Requests
EOF
}
function
_omz::log
{
# if promptsubst is set, a message with `` or $()
# will be run even if quoted due to `print -P`
setopt localoptions nopromptsubst
# $1 = info|warn|error|debug
# $@ = text
local
logtype
=
$1
local logname
=
${${
functrace
[1]#_
}
%
:
*
}
shift
# Don't print anything if debug is not active
if
[[
$logtype
=
debug
&&
-z
$_OMZ_DEBUG
]]
;
then
return
fi
# Choose coloring based on log type
case
"
$logtype
"
in
prompt
)
print
-Pn
"%S%F{blue}
$logname
%f%s:
$@
"
;;
debug
)
print
-P
"%F{white}
$logname
%f:
$@
"
;;
info
)
print
-P
"%F{green}
$logname
%f:
$@
"
;;
warn
)
print
-P
"%S%F{yellow}
$logname
%f%s:
$@
"
;;
error
)
print
-P
"%S%F{red}
$logname
%f%s:
$@
"
;;
esac
>
&2
}
function
_omz::pr
{
((
$#
>
0
&&
$+
functions[_omz::pr::
$1
]
))
||
{
cat
<<
EOF
Usage: omz pr <command> [options]
Available commands:
clean Delete all PR branches (ohmyzsh/pull-*)
test <PR_number_or_URL> Fetch PR #NUMBER and rebase against master
EOF
return
1
}
local command
=
"
$1
"
shift
_omz::pr::
$command
"
$@
"
}
function
_omz::pr::clean
{
(
set
-e
cd
-q
"
$ZSH
"
_omz::log info
"removing all Oh My Zsh Pull Request branches..."
command
git branch
--list
'ohmyzsh/pull-*'
|
while
read
branch
;
do
command
git branch
-D
"
$branch
"
done
)
}
function
_omz::pr::test
{
# Allow $1 to be a URL to the pull request
if
[[
"
$1
"
=
https://
*
]]
;
then
1
=
"
${
1
:t
}
"
fi
# Check the input
if
!
[[
-n
"
$1
"
&&
"
$1
"
=
~ ^[[:digit:]]+
$
]]
;
then
echo
>
&2
"Usage: omz pr test <PR_NUMBER_or_URL>"
return
1
fi
# Save current git HEAD
local
branch
branch
=
$(
cd
-q
"
$ZSH
"
;
git symbolic-ref
--short
HEAD
)
||
{
_omz::log error
"error when getting the current git branch. Aborting..."
return
1
}
# Fetch PR onto ohmyzsh/pull-<PR_NUMBER> branch and rebase against master
# If any of these operations fail, undo the changes made
(
set
-e
cd
-q
"
$ZSH
"
# Get the ohmyzsh git remote
command
git remote
-v
|
while
read
remote url _
;
do
case
"
$url
"
in
https://github.com/ohmyzsh/ohmyzsh
(
|
.git
)
)
found
=
1
;
break
;;
git@github.com:ohmyzsh/ohmyzsh
(
|
.git
)
)
found
=
1
;
break
;;
esac
done
((
$found
))
||
{
_omz::log error
"could not found the ohmyzsh git remote. Aborting..."
return
1
}
# Fetch pull request head
_omz::log info
"fetching PR #
$1
to ohmyzsh/pull-
$1
..."
command
git fetch
-f
"
$remote
"
refs/pull/
$1
/head:ohmyzsh/pull-
$1
||
{
_omz::log error
"error when trying to fetch PR #
$1
."
return
1
}
# Rebase pull request branch against the current master
_omz::log info
"rebasing PR #
$1
..."
command
git rebase master ohmyzsh/pull-
$1
||
{
command
git rebase
--abort
&>/dev/null
_omz::log warn
"could not rebase PR #
$1
on top of master."
_omz::log warn
"you might not see the latest stable changes."
_omz::log info
"run
\`
zsh
\`
to test the changes."
return
1
}
_omz::log info
"fetch of PR #
${
1
}
successful."
)
# If there was an error, abort running zsh to test the PR
[[
$?
-eq
0
]]
||
return
1
# Run zsh to test the changes
_omz::log info
"running
\`
zsh
\`
to test the changes. Run
\`
exit
\`
to go back."
command
zsh
-l
# After testing, go back to the previous HEAD if the user wants
_omz::log prompt
"do you want to go back to the previous branch? [Y/n] "
read
-r
-k
1
[[
"
$REPLY
"
=
[
nN]
]]
&&
return
(
set
-e
cd
-q
"
$ZSH
"
command
git checkout
"
$branch
"
--
||
{
_omz::log error
"could not go back to the previous branch ('
$branch
')."
return
1
}
)
}
oh-my-zsh.sh
View file @
07bcf041
...
@@ -73,6 +73,11 @@ else
...
@@ -73,6 +73,11 @@ else
fi
fi
# Load core files
for
core_file
(
$ZSH
/core/
*
.zsh
)
;
do
source
"
$core_file
"
done
# Load all of the config files in ~/oh-my-zsh that end in .zsh
# Load all of the config files in ~/oh-my-zsh that end in .zsh
# TIP: Add files you don't want in git to .gitignore
# TIP: Add files you don't want in git to .gitignore
for
config_file
(
$ZSH
/lib/
*
.zsh
)
;
do
for
config_file
(
$ZSH
/lib/
*
.zsh
)
;
do
...
...
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