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
a32564e0
Unverified
Commit
a32564e0
authored
Oct 24, 2020
by
Felipe Contreras
Committed by
GitHub
Oct 24, 2020
Browse files
gitfast: update to latest upstream and more (#9382)
parent
3b1699b5
Changes
5
Expand all
Hide whitespace changes
Inline
Side-by-side
plugins/gitfast/_git
View file @
a32564e0
...
...
@@ -2,25 +2,24 @@
# zsh completion wrapper for git
#
# Copyright (c) 2012-20
13
Felipe Contreras <felipe.contreras@gmail.com>
# Copyright (c) 2012-20
20
Felipe Contreras <felipe.contreras@gmail.com>
#
#
You need git's bash completion script installed somewhere, by default it
#
would be the location bash-completion uses
.
#
The recommended way to install this script is to make a copy of it as a
#
file named '_git' inside any directory in your fpath
.
#
# If your script is somewhere else, you can configure it on your ~/.zshrc:
# For example, create a directory '~/.zsh/', copy this file to '~/.zsh/_git',
# and then add the following to your ~/.zshrc file:
#
#
zstyle ':completion:*:*:git:*' script ~/.git-completion.zsh
#
fpath=(~/.zsh $fpath)
#
# The recommended way to install this script is to copy to '~/.zsh/_git', and
# then add the following to your ~/.zshrc file:
# You need git's bash completion script installed. By default bash-completion's
# location will be used (e.g. pkg-config --variable=completionsdir bash-completion).
#
# If your bash completion script is somewhere else, you can specify the
# location in your ~/.zshrc:
#
# zstyle ':completion:*:*:git:*' script ~/.git-completion.bash
#
# fpath=(~/.zsh $fpath)
complete ()
{
# do nothing
return 0
}
zstyle -T ':completion:*:*:git:*' tag-order && \
zstyle ':completion:*:*:git:*' tag-order 'common-commands'
...
...
@@ -30,16 +29,17 @@ if [ -z "$script" ]; then
local -a locations
local e
locations=(
"$(dirname ${funcsourcetrace[1]%:*})/git-completion.bash"
'/etc/bash_completion.d/git' # fedora, old debian
'/usr/share/bash-completion/completions/git' # arch, ubuntu, new debian
'/usr/share/bash-completion/git' # gentoo
"$(dirname ${funcsourcetrace[1]%:*})"/git-completion.bash
"$HOME/.local/share/bash-completion/completions/git"
"$(pkg-config --variable=completionsdir bash-completion)"/git
'/usr/share/bash-completion/completions/git'
'/etc/bash_completion.d/git' # old debian
)
for e in $locations; do
test -f $e && script="$e" && break
done
fi
ZSH_VERS
ION=
''
. "$script"
GIT_SOURCING_ZSH_COMPLET
ION=
y
. "$script"
__gitcomp ()
{
...
...
@@ -50,13 +50,35 @@ __gitcomp ()
case "$cur_" in
--*=)
;;
--no-*)
local c IFS=$' \t\n'
local -a array
for c in ${=1}; do
if [[ $c == "--" ]]; then
continue
fi
c="$c${4-}"
case $c in
--*=|*.) ;;
*) c="$c " ;;
esac
array+=("$c")
done
compset -P '*[=:]'
compadd -Q -S '' -p "${2-}" -a -- array && _ret=0
;;
*)
local c IFS=$' \t\n'
local -a array
for c in ${=1}; do
if [[ $c == "--" ]]; then
c="--no-...${4-}"
array+=("$c ")
break
fi
c="$c${4-}"
case $c in
--*=
*
|*.) ;;
--*=|*.) ;;
*) c="$c " ;;
esac
array+=("$c")
...
...
@@ -71,35 +93,57 @@ __gitcomp_direct ()
{
emulate -L zsh
local IFS=$'\n'
compset -P '*[=:]'
compadd -Q -- ${
=
1} && _ret=0
compadd -Q
-S ''
-- ${
(f)
1} && _ret=0
}
__gitcomp_nl ()
{
emulate -L zsh
local IFS=$'\n'
compset -P '*[=:]'
compadd -Q -S "${4- }" -p "${2-}" -- ${
=
1} && _ret=0
compadd -Q -S "${4- }" -p "${2-}" -- ${
(f)
1} && _ret=0
}
__gitcomp_nl_append ()
{
emulate -L zsh
local IFS=$'\n'
compadd -Q -S "${4- }" -p "${2-}" -- ${=1} && _ret=0
compset -P '*[=:]'
compadd -Q -S "${4- }" -p "${2-}" -- ${(f)1} && _ret=0
}
__gitcomp_file_direct ()
{
emulate -L zsh
compadd -f -- ${(f)1} && _ret=0
}
__gitcomp_file ()
{
emulate -L zsh
local IFS=$'\n'
compset -P '*[=:]'
compadd -Q -p "${2-}" -f -- ${=1} && _ret=0
compadd -f -p "${2-}" -- ${(f)1} && _ret=0
}
_git_zsh ()
{
__gitcomp "v1.0"
}
__git_complete_command ()
{
emulate -L zsh
local command="$1"
local completion_func="_git_${command//-/_}"
if (( $+functions[$completion_func] )); then
emulate ksh -c $completion_func
return 0
else
return 1
fi
}
__git_zsh_bash_func ()
...
...
@@ -108,14 +152,12 @@ __git_zsh_bash_func ()
local command=$1
local completion_func="_git_${command//-/_}"
declare -f $completion_func >/dev/null && $completion_func && return
__git_complete_command "$command" && return
local expansion=$(__git_aliased_command "$command")
if [ -n "$expansion" ]; then
words[1]=$expansion
completion_func="_git_${expansion//-/_}"
declare -f $completion_func >/dev/null && $completion_func
__git_complete_command "$expansion"
fi
}
...
...
@@ -140,9 +182,11 @@ __git_zsh_cmd_common ()
push:'update remote refs along with associated objects'
rebase:'forward-port local commits to the updated upstream head'
reset:'reset current HEAD to the specified state'
restore:'restore working tree files'
rm:'remove files from the working tree and from the index'
show:'show various types of objects'
status:'show the working tree status'
switch:'switch branches'
tag:'create, list, delete or verify a tag object signed with GPG')
_describe -t common-commands 'common commands' list && _ret=0
}
...
...
@@ -150,8 +194,9 @@ __git_zsh_cmd_common ()
__git_zsh_cmd_alias ()
{
local -a list
list=(${${${(0)"$(git config -z --get-regexp '^alias\.')"}#alias.}%$'\n'*})
_describe -t alias-commands 'aliases' list $* && _ret=0
list=(${${(0)"$(git config -z --get-regexp '^alias\.*')"}#alias.})
list=(${(f)"$(printf "%s:alias for '%s'\n" ${(f@)list})"})
_describe -t alias-commands 'aliases' list && _ret=0
}
__git_zsh_cmd_all ()
...
...
@@ -189,10 +234,13 @@ __git_zsh_main ()
case $state in
(command)
_alternative \
'alias-commands:alias:__git_zsh_cmd_alias' \
'common-commands:common:__git_zsh_cmd_common' \
'all-commands:all:__git_zsh_cmd_all' && _ret=0
_tags common-commands alias-commands all-commands
while _tags; do
_requested common-commands && __git_zsh_cmd_common
_requested alias-commands && __git_zsh_cmd_alias
_requested all-commands && __git_zsh_cmd_all
let _ret || break
done
;;
(arg)
local command="${words[1]}" __git_dir
...
...
plugins/gitfast/git-completion.bash
View file @
a32564e0
This diff is collapsed.
Click to expand it.
plugins/gitfast/git-prompt.sh
View file @
a32564e0
...
...
@@ -70,6 +70,15 @@
# state symbols by setting GIT_PS1_STATESEPARATOR. The default separator
# is SP.
#
# When there is an in-progress operation such as a merge, rebase,
# revert, cherry-pick, or bisect, the prompt will include information
# related to the operation, often in the form "|<OPERATION-NAME>".
#
# When the repository has a sparse-checkout, a notification of the form
# "|SPARSE" will be included in the prompt. This can be shortened to a
# single '?' character by setting GIT_PS1_COMPRESSSPARSESTATE, or omitted
# by setting GIT_PS1_OMITSPARSESTATE.
#
# By default, __git_ps1 will compare HEAD to your SVN upstream if it can
# find one, or @{upstream} otherwise. Once you have set
# GIT_PS1_SHOWUPSTREAM, you can override it on a per-repository basis by
...
...
@@ -88,7 +97,8 @@
# If you would like a colored hint about the current dirty state, set
# GIT_PS1_SHOWCOLORHINTS to a nonempty value. The colors are based on
# the colored output of "git status -sb" and are available only when
# using __git_ps1 for PROMPT_COMMAND or precmd.
# using __git_ps1 for PROMPT_COMMAND or precmd in Bash,
# but always available in Zsh.
#
# If you would like __git_ps1 to do nothing in the case when the current
# directory is set up to be ignored by git, then set
...
...
@@ -286,6 +296,37 @@ __git_eread ()
test
-r
"
$1
"
&&
IFS
=
$'
\r\n
'
read
"
$2
"
<
"
$1
"
}
# see if a cherry-pick or revert is in progress, if the user has committed a
# conflict resolution with 'git commit' in the middle of a sequence of picks or
# reverts then CHERRY_PICK_HEAD/REVERT_HEAD will not exist so we have to read
# the todo file.
__git_sequencer_status
()
{
local
todo
if
test
-f
"
$g
/CHERRY_PICK_HEAD"
then
r
=
"|CHERRY-PICKING"
return
0
;
elif
test
-f
"
$g
/REVERT_HEAD"
then
r
=
"|REVERTING"
return
0
;
elif
__git_eread
"
$g
/sequencer/todo"
todo
then
case
"
$todo
"
in
p[
\ \
]
|
pick[
\ \
]
*
)
r
=
"|CHERRY-PICKING"
return
0
;;
revert[
\ \
]
*
)
r
=
"|REVERTING"
return
0
;;
esac
fi
return
1
}
# __git_ps1 accepts 0 or 1 arguments (i.e., format string)
# when called from PS1 using command substitution
# in this mode it prints text to add to bash PS1 prompt (includes branch name)
...
...
@@ -390,6 +431,13 @@ __git_ps1 ()
return
$exit
fi
local
sparse
=
""
if
[
-z
"
${
GIT_PS1_COMPRESSSPARSESTATE
}
"
]
&&
[
-z
"
${
GIT_PS1_OMITSPARSESTATE
}
"
]
&&
[
"
$(
git config
--bool
core.sparseCheckout
)
"
=
"true"
]
;
then
sparse
=
"|SPARSE"
fi
local
r
=
""
local
b
=
""
local
step
=
""
...
...
@@ -398,11 +446,7 @@ __git_ps1 ()
__git_eread
"
$g
/rebase-merge/head-name"
b
__git_eread
"
$g
/rebase-merge/msgnum"
step
__git_eread
"
$g
/rebase-merge/end"
total
if
[
-f
"
$g
/rebase-merge/interactive"
]
;
then
r
=
"|REBASE-i"
else
r
=
"|REBASE-m"
fi
r
=
"|REBASE"
else
if
[
-d
"
$g
/rebase-apply"
]
;
then
__git_eread
"
$g
/rebase-apply/next"
step
...
...
@@ -417,10 +461,8 @@ __git_ps1 ()
fi
elif
[
-f
"
$g
/MERGE_HEAD"
]
;
then
r
=
"|MERGING"
elif
[
-f
"
$g
/CHERRY_PICK_HEAD"
]
;
then
r
=
"|CHERRY-PICKING"
elif
[
-f
"
$g
/REVERT_HEAD"
]
;
then
r
=
"|REVERTING"
elif
__git_sequencer_status
;
then
:
elif
[
-f
"
$g
/BISECT_LOG"
]
;
then
r
=
"|BISECTING"
fi
...
...
@@ -467,6 +509,7 @@ __git_ps1 ()
local
i
=
""
local
s
=
""
local
u
=
""
local
h
=
""
local
c
=
""
local
p
=
""
...
...
@@ -499,6 +542,11 @@ __git_ps1 ()
u
=
"%
${
ZSH_VERSION
+%
}
"
fi
if
[
-n
"
${
GIT_PS1_COMPRESSSPARSESTATE
}
"
]
&&
[
"
$(
git config
--bool
core.sparseCheckout
)
"
=
"true"
]
;
then
h
=
"?"
fi
if
[
-n
"
${
GIT_PS1_SHOWUPSTREAM
-
}
"
]
;
then
__git_ps1_show_upstream
fi
...
...
@@ -519,8 +567,8 @@ __git_ps1 ()
b
=
"
\$
{__git_ps1_branch_name}"
fi
local
f
=
"
$w$i$s$u
"
local
gitstring
=
"
$c$b
${
f
:+
$z$f
}
$r$p
"
local
f
=
"
$
h$
w$i$s$u
"
local
gitstring
=
"
$c$b
${
f
:+
$z$f
}$
{
sparse
}
$
r$p
"
if
[
$pcmode
=
yes
]
;
then
if
[
"
${
__git_printf_supports_v
-
}
"
!=
yes
]
;
then
...
...
plugins/gitfast/update
View file @
a32564e0
#!/bin/sh
url
=
"https://
git.kernel.org/pub/scm/git/git.git/plain/contrib/
completion"
version
=
"
2.16
.0"
url
=
"https://
raw.githubusercontent.com/felipec/git-
completion"
version
=
"
1
.0"
curl
-s
-o
_git
"
${
url
}
/git-completion.zsh?h=v
${
version
}
"
&&
curl
-s
-o
git-completion.bash
"
${
url
}
/git-completion.bash?h=v
${
version
}
"
&&
curl
-s
-o
git-prompt.sh
"
${
url
}
/git-prompt.sh?h=v
${
version
}
"
&&
git apply updates.patch
curl
-s
-o
_git
"
${
url
}
/v
${
version
}
/git-completion.zsh"
&&
curl
-s
-o
git-completion.bash
"
${
url
}
/v
${
version
}
/git-completion.bash"
&&
curl
-s
-o
git-prompt.sh
"
${
url
}
/v
${
version
}
/git-prompt.sh"
plugins/gitfast/updates.patch
deleted
100644 → 0
View file @
3b1699b5
diff --git b/plugins/gitfast/_git a/plugins/gitfast/_git
index e2554130..a2e3bef5 100644
--- b/plugins/gitfast/_git
+++ a/plugins/gitfast/_git
@@ -30,7 +30,7 @@
if [ -z "$script" ]; then
local -a locations
local e
locations=(
- $(dirname ${funcsourcetrace[1]%:*})/git-completion.bash
+ "$(dirname ${funcsourcetrace[1]%:*})/git-completion.bash"
'/etc/bash_completion.d/git' # fedora, old debian
'/usr/share/bash-completion/completions/git' # arch, ubuntu, new debian
'/usr/share/bash-completion/git' # gentoo
@@ -214,8 +214,10 @@
_git ()
if (( $+functions[__${service}_zsh_main] )); then
__${service}_zsh_main
- else
+ elif (( $+functions[__${service}_main] )); then
emulate ksh -c __${service}_main
+ elif (( $+functions[_${service}] )); then
+ emulate ksh -c _${service}
fi
let _ret && _default && _ret=0
diff --git b/plugins/gitfast/git-completion.bash a/plugins/gitfast/git-completion.bash
index 9c8f7380..14012cab 100644
--- b/plugins/gitfast/git-completion.bash
+++ a/plugins/gitfast/git-completion.bash
@@ -2915,6 +2915,6 @@
__git_complete gitk __gitk_main
# when the user has tab-completed the executable name and consequently
# included the '.exe' suffix.
#
-if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
+if [[ "$OSTYPE" = cygwin* ]]; then
__git_complete git.exe __git_main
fi
diff --git b/plugins/gitfast/git-prompt.sh a/plugins/gitfast/git-prompt.sh
index 97eacd78..c1de34eb 100644
--- b/plugins/gitfast/git-prompt.sh
+++ a/plugins/gitfast/git-prompt.sh
@@ -502,9 +502,11 @@
__git_ps1 ()
local z="${GIT_PS1_STATESEPARATOR-" "}"
- # NO color option unless in PROMPT_COMMAND mode
- if [ $pcmode = yes ] && [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then
- __git_ps1_colorize_gitstring
+ # NO color option unless in PROMPT_COMMAND mode or it's Zsh
+ if [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then
+ if [ $pcmode = yes ] || [ -n "${ZSH_VERSION-}" ]; then
+ __git_ps1_colorize_gitstring
+ fi
fi
b=${b##refs/heads/}
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