diff options
Diffstat (limited to 'plugins/gitfast')
| -rw-r--r-- | plugins/gitfast/_git | 10 | ||||
| -rw-r--r-- | plugins/gitfast/git-completion.bash | 47 | ||||
| -rw-r--r-- | plugins/gitfast/git-prompt.sh | 36 | 
3 files changed, 67 insertions, 26 deletions
| diff --git a/plugins/gitfast/_git b/plugins/gitfast/_git index fac5e711e..c75b0be7f 100644 --- a/plugins/gitfast/_git +++ b/plugins/gitfast/_git @@ -30,10 +30,10 @@ 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  		)  	for e in $locations; do  		test -f $e && script="$e" && break @@ -76,6 +76,14 @@ __gitcomp_nl ()  	compadd -Q -S "${4- }" -p "${2-}" -- ${=1} && _ret=0  } +__gitcomp_nl_append () +{ +	emulate -L zsh + +	local IFS=$'\n' +	compadd -Q -S "${4- }" -p "${2-}" -- ${=1} && _ret=0 +} +  __gitcomp_file ()  {  	emulate -L zsh diff --git a/plugins/gitfast/git-completion.bash b/plugins/gitfast/git-completion.bash index 5da920ecd..9525343fc 100644 --- a/plugins/gitfast/git-completion.bash +++ b/plugins/gitfast/git-completion.bash @@ -1,5 +1,3 @@ -#!bash -#  # bash/zsh completion support for core Git.  #  # Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org> @@ -180,9 +178,9 @@ _get_comp_words_by_ref ()  }  fi -__gitcompadd () +__gitcompappend ()  { -	local i=0 +	local i=${#COMPREPLY[@]}  	for x in $1; do  		if [[ "$x" == "$3"* ]]; then  			COMPREPLY[i++]="$2$x$4" @@ -190,6 +188,12 @@ __gitcompadd ()  	done  } +__gitcompadd () +{ +	COMPREPLY=() +	__gitcompappend "$@" +} +  # Generates completion reply, appending a space to possible completion words,  # if necessary.  # It accepts 1 to 4 arguments: @@ -220,6 +224,14 @@ __gitcomp ()  	esac  } +# Variation of __gitcomp_nl () that appends to the existing list of +# completion candidates, COMPREPLY. +__gitcomp_nl_append () +{ +	local IFS=$'\n' +	__gitcompappend "$1" "${2-}" "${3-$cur}" "${4- }" +} +  # Generates completion reply from newline-separated possible completion words  # by appending a space to all of them.  # It accepts 1 to 4 arguments: @@ -231,8 +243,8 @@ __gitcomp ()  #    appended.  __gitcomp_nl ()  { -	local IFS=$'\n' -	__gitcompadd "$1" "${2-}" "${3-$cur}" "${4- }" +	COMPREPLY=() +	__gitcomp_nl_append "$@"  }  # Generates completion reply with compgen from newline-separated possible @@ -673,7 +685,6 @@ __git_list_porcelain_commands ()  		index-pack)       : plumbing;;  		init-db)          : deprecated;;  		local-fetch)      : plumbing;; -		lost-found)       : infrequent;;  		ls-files)         : plumbing;;  		ls-remote)        : plumbing;;  		ls-tree)          : plumbing;; @@ -687,14 +698,12 @@ __git_list_porcelain_commands ()  		pack-refs)        : plumbing;;  		parse-remote)     : plumbing;;  		patch-id)         : plumbing;; -		peek-remote)      : plumbing;;  		prune)            : plumbing;;  		prune-packed)     : plumbing;;  		quiltimport)      : import;;  		read-tree)        : plumbing;;  		receive-pack)     : plumbing;;  		remote-*)         : transport;; -		repo-config)      : deprecated;;  		rerere)           : plumbing;;  		rev-list)         : plumbing;;  		rev-parse)        : plumbing;; @@ -707,7 +716,6 @@ __git_list_porcelain_commands ()  		ssh-*)            : transport;;  		stripspace)       : plumbing;;  		symbolic-ref)     : plumbing;; -		tar-tree)         : deprecated;;  		unpack-file)      : plumbing;;  		unpack-objects)   : plumbing;;  		update-index)     : plumbing;; @@ -901,7 +909,7 @@ _git_add ()  	esac  	# XXX should we check for --update and --all options ? -	__git_complete_index_file "--others --modified" +	__git_complete_index_file "--others --modified --directory --no-empty-directory"  }  _git_archive () @@ -1063,7 +1071,7 @@ _git_clean ()  	esac  	# XXX should we check for -x option ? -	__git_complete_index_file "--others" +	__git_complete_index_file "--others --directory"  }  _git_clone () @@ -1188,7 +1196,7 @@ _git_diff ()  	__git_complete_revlist_file  } -__git_mergetools_common="diffuse ecmerge emerge kdiff3 meld opendiff +__git_mergetools_common="diffuse diffmerge ecmerge emerge kdiff3 meld opendiff  			tkdiff vimdiff gvimdiff xxdiff araxis p4merge bc3 codecompare  " @@ -1491,6 +1499,12 @@ _git_mergetool ()  _git_merge_base ()  { +	case "$cur" in +	--*) +		__gitcomp "--octopus --independent --is-ancestor --fork-point" +		return +		;; +	esac  	__gitcomp_nl "$(__git_refs)"  } @@ -1623,7 +1637,7 @@ _git_rebase ()  			--preserve-merges --stat --no-stat  			--committer-date-is-author-date --ignore-date  			--ignore-whitespace --whitespace= -			--autosquash +			--autosquash --fork-point --no-fork-point  			"  		return @@ -1833,6 +1847,7 @@ _git_config ()  	branch.*)  		local pfx="${cur%.*}." cur_="${cur#*.}"  		__gitcomp_nl "$(__git_heads)" "$pfx" "$cur_" "." +		__gitcomp_nl_append $'autosetupmerge\nautosetuprebase\n' "$pfx" "$cur_"  		return  		;;  	guitool.*.*) @@ -1875,6 +1890,7 @@ _git_config ()  	remote.*)  		local pfx="${cur%.*}." cur_="${cur#*.}"  		__gitcomp_nl "$(__git_remotes)" "$pfx" "$cur_" "." +		__gitcomp_nl_append "pushdefault" "$pfx" "$cur_"  		return  		;;  	url.*.*) @@ -1997,6 +2013,7 @@ _git_config ()  		fetch.unpackLimit  		format.attach  		format.cc +		format.coverLetter  		format.headers  		format.numbered  		format.pretty @@ -2580,7 +2597,7 @@ if [[ -n ${ZSH_VERSION-} ]]; then  				--*=*|*.) ;;  				*) c="$c " ;;  				esac -				array[$#array+1]="$c" +				array[${#array[@]}+1]="$c"  			done  			compset -P '*[=:]'  			compadd -Q -S '' -p "${2-}" -a -- array && _ret=0 diff --git a/plugins/gitfast/git-prompt.sh b/plugins/gitfast/git-prompt.sh index a81ef5a48..54489080f 100644 --- a/plugins/gitfast/git-prompt.sh +++ b/plugins/gitfast/git-prompt.sh @@ -60,6 +60,7 @@  # of values:  #  #     verbose       show number of commits ahead/behind (+/-) upstream +#     name          if verbose, then also show the upstream abbrev name  #     legacy        don't use the '--count' option available in recent  #                   versions of git-rev-list  #     git           always compare HEAD to @{upstream} @@ -84,13 +85,17 @@  # the colored output of "git status -sb" and are available only when  # using __git_ps1 for PROMPT_COMMAND or precmd. +# check whether printf supports -v +__git_printf_supports_v= +printf -v __git_printf_supports_v -- '%s' yes >/dev/null 2>&1 +  # stores the divergence from upstream in $p  # used by GIT_PS1_SHOWUPSTREAM  __git_ps1_show_upstream ()  {  	local key value  	local svn_remote svn_url_pattern count n -	local upstream=git legacy="" verbose="" +	local upstream=git legacy="" verbose="" name=""  	svn_remote=()  	# get some config options from git-config @@ -106,7 +111,7 @@ __git_ps1_show_upstream ()  			;;  		svn-remote.*.url)  			svn_remote[$((${#svn_remote[@]} + 1))]="$value" -			svn_url_pattern+="\\|$value" +			svn_url_pattern="$svn_url_pattern\\|$value"  			upstream=svn+git # default upstream is SVN if available, else git  			;;  		esac @@ -118,6 +123,7 @@ __git_ps1_show_upstream ()  		git|svn) upstream="$option" ;;  		verbose) verbose=1 ;;  		legacy)  legacy=1  ;; +		name)    name=1 ;;  		esac  	done @@ -200,6 +206,9 @@ __git_ps1_show_upstream ()  		*)	    # diverged from upstream  			p=" u+${count#*	}-${count%	*}" ;;  		esac +		if [[ -n "$count" && -n "$name" ]]; then +			p="$p $(git rev-parse --abbrev-ref "$upstream" 2>/dev/null)" +		fi  	fi  } @@ -250,6 +259,13 @@ __git_ps1_colorize_gitstring ()  	r="$c_clear$r"  } +eread () +{ +	f="$1" +	shift +	test -r "$f" && read "$@" <"$f" +} +  # __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) @@ -312,9 +328,9 @@ __git_ps1 ()  	local step=""  	local total=""  	if [ -d "$g/rebase-merge" ]; then -		read b 2>/dev/null <"$g/rebase-merge/head-name" -		read step 2>/dev/null <"$g/rebase-merge/msgnum" -		read total 2>/dev/null <"$g/rebase-merge/end" +		eread "$g/rebase-merge/head-name" b +		eread "$g/rebase-merge/msgnum" step +		eread "$g/rebase-merge/end" total  		if [ -f "$g/rebase-merge/interactive" ]; then  			r="|REBASE-i"  		else @@ -322,10 +338,10 @@ __git_ps1 ()  		fi  	else  		if [ -d "$g/rebase-apply" ]; then -			read step 2>/dev/null <"$g/rebase-apply/next" -			read total 2>/dev/null <"$g/rebase-apply/last" +			eread "$g/rebase-apply/next" step +			eread "$g/rebase-apply/last" total  			if [ -f "$g/rebase-apply/rebasing" ]; then -				read b 2>/dev/null <"$g/rebase-apply/head-name" +				eread "$g/rebase-apply/head-name" b  				r="|REBASE"  			elif [ -f "$g/rebase-apply/applying" ]; then  				r="|AM" @@ -349,7 +365,7 @@ __git_ps1 ()  			b="$(git symbolic-ref HEAD 2>/dev/null)"  		else  			local head="" -			if ! read head 2>/dev/null <"$g/HEAD"; then +			if ! eread "$g/HEAD" head; then  				if [ $pcmode = yes ]; then  					PS1="$ps1pc_start$ps1pc_end"  				fi @@ -433,7 +449,7 @@ __git_ps1 ()  	local gitstring="$c${b##refs/heads/}${f:+$z$f}$r$p"  	if [ $pcmode = yes ]; then -		if [[ -n ${ZSH_VERSION-} ]]; then +		if [ "${__git_printf_supports_v-}" != yes ]; then  			gitstring=$(printf -- "$printf_format" "$gitstring")  		else  			printf -v gitstring -- "$printf_format" "$gitstring" | 
