Commit 72a8c08c authored by Felipe Contreras's avatar Felipe Contreras

gitfast: synchronize with upstream

Up to version 1.8.2.1.
Signed-off-by: 's avatarFelipe Contreras <felipe.contreras@gmail.com>
parent 85426a57
...@@ -60,6 +60,15 @@ __gitcomp_nl () ...@@ -60,6 +60,15 @@ __gitcomp_nl ()
compadd -Q -S "${4- }" -p "${2-}" -- ${=1} && _ret=0 compadd -Q -S "${4- }" -p "${2-}" -- ${=1} && _ret=0
} }
__gitcomp_file ()
{
emulate -L zsh
local IFS=$'\n'
compset -P '*[=:]'
compadd -Q -p "${2-}" -f -- ${=1} && _ret=0
}
_git () _git ()
{ {
local _ret=1 local _ret=1
......
This diff is collapsed.
...@@ -10,9 +10,22 @@ ...@@ -10,9 +10,22 @@
# 1) Copy this file to somewhere (e.g. ~/.git-prompt.sh). # 1) Copy this file to somewhere (e.g. ~/.git-prompt.sh).
# 2) Add the following line to your .bashrc/.zshrc: # 2) Add the following line to your .bashrc/.zshrc:
# source ~/.git-prompt.sh # source ~/.git-prompt.sh
# 3) Change your PS1 to also show the current branch: # 3a) Change your PS1 to call __git_ps1 as
# command-substitution:
# Bash: PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ ' # Bash: PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
# ZSH: PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ ' # ZSH: PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ '
# the optional argument will be used as format string.
# 3b) Alternatively, if you are using bash, __git_ps1 can be
# used for PROMPT_COMMAND with two parameters, <pre> and
# <post>, which are strings you would put in $PS1 before
# and after the status string generated by the git-prompt
# machinery. e.g.
# PROMPT_COMMAND='__git_ps1 "\u@\h:\w" "\\\$ "'
# will show username, at-sign, host, colon, cwd, then
# various status string, followed by dollar and SP, as
# your prompt.
# Optionally, you can supply a third argument with a printf
# format string to finetune the output of the branch status
# #
# The argument to __git_ps1 will be displayed only if you are currently # The argument to __git_ps1 will be displayed only if you are currently
# in a git repository. The %s token will be the name of the current # in a git repository. The %s token will be the name of the current
...@@ -30,7 +43,10 @@ ...@@ -30,7 +43,10 @@
# #
# If you would like to see if there're untracked files, then you can set # If you would like to see if there're untracked files, then you can set
# GIT_PS1_SHOWUNTRACKEDFILES to a nonempty value. If there're untracked # GIT_PS1_SHOWUNTRACKEDFILES to a nonempty value. If there're untracked
# files, then a '%' will be shown next to the branch name. # files, then a '%' will be shown next to the branch name. You can
# configure this per-repository with the bash.showUntrackedFiles
# variable, which defaults to true once GIT_PS1_SHOWUNTRACKEDFILES is
# enabled.
# #
# If you would like to see the difference between HEAD and its upstream, # If you would like to see the difference between HEAD and its upstream,
# set GIT_PS1_SHOWUPSTREAM="auto". A "<" indicates you are behind, ">" # set GIT_PS1_SHOWUPSTREAM="auto". A "<" indicates you are behind, ">"
...@@ -49,6 +65,19 @@ ...@@ -49,6 +65,19 @@
# find one, or @{upstream} otherwise. Once you have set # find one, or @{upstream} otherwise. Once you have set
# GIT_PS1_SHOWUPSTREAM, you can override it on a per-repository basis by # GIT_PS1_SHOWUPSTREAM, you can override it on a per-repository basis by
# setting the bash.showUpstream config variable. # setting the bash.showUpstream config variable.
#
# If you would like to see more information about the identity of
# commits checked out as a detached HEAD, set GIT_PS1_DESCRIBE_STYLE
# to one of these values:
#
# contains relative to newer annotated tag (v1.6.3.2~35)
# branch relative to newer tag or branch (master~4)
# describe relative to older annotated tag (v1.6.3.1-13-gdd42c2f)
# default exactly matching tag
#
# 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".
# __gitdir accepts 0 or 1 arguments (i.e., location) # __gitdir accepts 0 or 1 arguments (i.e., location)
# returns location of .git repo # returns location of .git repo
...@@ -195,11 +224,43 @@ __git_ps1_show_upstream () ...@@ -195,11 +224,43 @@ __git_ps1_show_upstream ()
# __git_ps1 accepts 0 or 1 arguments (i.e., format string) # __git_ps1 accepts 0 or 1 arguments (i.e., format string)
# returns text to add to bash PS1 prompt (includes branch name) # when called from PS1 using command substitution
# in this mode it prints text to add to bash PS1 prompt (includes branch name)
#
# __git_ps1 requires 2 or 3 arguments when called from PROMPT_COMMAND (pc)
# in that case it _sets_ PS1. The arguments are parts of a PS1 string.
# when two arguments are given, the first is prepended and the second appended
# to the state string when assigned to PS1.
# The optional third parameter will be used as printf format string to further
# customize the output of the git-status string.
# In this mode you can request colored hints using GIT_PS1_SHOWCOLORHINTS=true
__git_ps1 () __git_ps1 ()
{ {
local pcmode=no
local detached=no
local ps1pc_start='\u@\h:\w '
local ps1pc_end='\$ '
local printf_format=' (%s)'
case "$#" in
2|3) pcmode=yes
ps1pc_start="$1"
ps1pc_end="$2"
printf_format="${3:-$printf_format}"
;;
0|1) printf_format="${1:-$printf_format}"
;;
*) return
;;
esac
local g="$(__gitdir)" local g="$(__gitdir)"
if [ -n "$g" ]; then if [ -z "$g" ]; then
if [ $pcmode = yes ]; then
#In PC mode PS1 always needs to be set
PS1="$ps1pc_start$ps1pc_end"
fi
else
local r="" local r=""
local b="" local b=""
if [ -f "$g/rebase-merge/interactive" ]; then if [ -f "$g/rebase-merge/interactive" ]; then
...@@ -226,7 +287,7 @@ __git_ps1 () ...@@ -226,7 +287,7 @@ __git_ps1 ()
fi fi
b="$(git symbolic-ref HEAD 2>/dev/null)" || { b="$(git symbolic-ref HEAD 2>/dev/null)" || {
detached=yes
b="$( b="$(
case "${GIT_PS1_DESCRIBE_STYLE-}" in case "${GIT_PS1_DESCRIBE_STYLE-}" in
(contains) (contains)
...@@ -259,8 +320,9 @@ __git_ps1 () ...@@ -259,8 +320,9 @@ __git_ps1 ()
b="GIT_DIR!" b="GIT_DIR!"
fi fi
elif [ "true" = "$(git rev-parse --is-inside-work-tree 2>/dev/null)" ]; then elif [ "true" = "$(git rev-parse --is-inside-work-tree 2>/dev/null)" ]; then
if [ -n "${GIT_PS1_SHOWDIRTYSTATE-}" ]; then if [ -n "${GIT_PS1_SHOWDIRTYSTATE-}" ] &&
if [ "$(git config --bool bash.showDirtyState)" != "false" ]; then [ "$(git config --bool bash.showDirtyState)" != "false" ]
then
git diff --no-ext-diff --quiet --exit-code || w="*" git diff --no-ext-diff --quiet --exit-code || w="*"
if git rev-parse --quiet --verify HEAD >/dev/null; then if git rev-parse --quiet --verify HEAD >/dev/null; then
git diff-index --cached --quiet HEAD -- || i="+" git diff-index --cached --quiet HEAD -- || i="+"
...@@ -268,16 +330,16 @@ __git_ps1 () ...@@ -268,16 +330,16 @@ __git_ps1 ()
i="#" i="#"
fi fi
fi fi
fi
if [ -n "${GIT_PS1_SHOWSTASHSTATE-}" ]; then if [ -n "${GIT_PS1_SHOWSTASHSTATE-}" ]; then
git rev-parse --verify refs/stash >/dev/null 2>&1 && s="$" git rev-parse --verify refs/stash >/dev/null 2>&1 && s="$"
fi fi
if [ -n "${GIT_PS1_SHOWUNTRACKEDFILES-}" ]; then if [ -n "${GIT_PS1_SHOWUNTRACKEDFILES-}" ] &&
if [ -n "$(git ls-files --others --exclude-standard)" ]; then [ "$(git config --bool bash.showUntrackedFiles)" != "false" ] &&
[ -n "$(git ls-files --others --exclude-standard)" ]
then
u="%%" u="%%"
fi fi
fi
if [ -n "${GIT_PS1_SHOWUPSTREAM-}" ]; then if [ -n "${GIT_PS1_SHOWUPSTREAM-}" ]; then
__git_ps1_show_upstream __git_ps1_show_upstream
...@@ -285,6 +347,53 @@ __git_ps1 () ...@@ -285,6 +347,53 @@ __git_ps1 ()
fi fi
local f="$w$i$s$u" local f="$w$i$s$u"
printf -- "${1:- (%s)}" "$c${b##refs/heads/}${f:+ $f}$r$p" if [ $pcmode = yes ]; then
local gitstring=
if [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then
local c_red='\e[31m'
local c_green='\e[32m'
local c_lblue='\e[1;34m'
local c_clear='\e[0m'
local bad_color=$c_red
local ok_color=$c_green
local branch_color="$c_clear"
local flags_color="$c_lblue"
local branchstring="$c${b##refs/heads/}"
if [ $detached = no ]; then
branch_color="$ok_color"
else
branch_color="$bad_color"
fi
# Setting gitstring directly with \[ and \] around colors
# is necessary to prevent wrapping issues!
gitstring="\[$branch_color\]$branchstring\[$c_clear\]"
if [ -n "$w$i$s$u$r$p" ]; then
gitstring="$gitstring "
fi
if [ "$w" = "*" ]; then
gitstring="$gitstring\[$bad_color\]$w"
fi
if [ -n "$i" ]; then
gitstring="$gitstring\[$ok_color\]$i"
fi
if [ -n "$s" ]; then
gitstring="$gitstring\[$flags_color\]$s"
fi
if [ -n "$u" ]; then
gitstring="$gitstring\[$bad_color\]$u"
fi
gitstring="$gitstring\[$c_clear\]$r$p"
else
gitstring="$c${b##refs/heads/}${f:+ $f}$r$p"
fi
gitstring=$(printf -- "$printf_format" "$gitstring")
PS1="$ps1pc_start$gitstring$ps1pc_end"
else
# NO color option unless in PROMPT_COMMAND mode
printf -- "$printf_format" "$c${b##refs/heads/}${f:+ $f}$r$p"
fi
fi fi
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment