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
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
Show 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
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
# TIP: Add files you don't want in git to .gitignore
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