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