135 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/zsh
 | |
| # vcs-info config
 | |
| #
 | |
| # Partly based on Seth House's zsh promp
 | |
| 
 | |
| 
 | |
| autoload -Uz vcs_info
 | |
| 
 | |
| # Set up VCS_INFO
 | |
| zstyle ':vcs_info:*' enable git hg svn
 | |
| zstyle ':vcs_info:(hg*|git*):*' get-revision true
 | |
| zstyle ':vcs_info:(hg*|git*):*' check-for-changes true
 | |
| 
 | |
| zstyle ':vcs_info:hg*' formats "(%s)[%i%u %b %m]" # rev+changes branch misc
 | |
| zstyle ':vcs_info:hg*' actionformats "(%s|${white}%a${rpscolor})[%i%u %b %m]"
 | |
| 
 | |
| zstyle ':vcs_info:hg*:netbeans' use-simple true
 | |
| zstyle ':vcs_info:hg*:*' get-bookmarks true
 | |
| zstyle ':vcs_info:hg*:*' get-mq true
 | |
| 
 | |
| zstyle ':vcs_info:hg*:*' get-unapplied true
 | |
| zstyle ':vcs_info:hg*:*' patch-format "mq(%g):%n/%c %p"
 | |
| zstyle ':vcs_info:hg*:*' nopatch-format "mq(%g):%n/%c %p"
 | |
| 
 | |
| zstyle ':vcs_info:hg*:*' hgrevformat "%r" # only show local rev.
 | |
| zstyle ':vcs_info:hg*:*' branchformat "%b" # only show branch
 | |
| zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat "%b$vcs_revision:%f%r%f"
 | |
| 
 | |
| if [[ -z $(git ls-files --other --exclude-standard 2> /dev/null) ]] {
 | |
| 	zstyle ':vcs_info:git*' formats "(%s) %12.12i %c%u %b%m" # hash changes branch misc
 | |
| 	zstyle ':vcs_info:git*' actionformats "(%s|${white}%a${rpscolor}) %12.12i %c%u %b%m"
 | |
| } else {
 | |
| 	zstyle ':vcs_info:git*' formats "(%s) %12.12i %c%u${gituntracked} %b%m" # hash changes branch misc
 | |
| 	zstyle ':vcs_info:git*' actionformats "(%s|${white}%a${rpscolor}) %12.12i %c%u %b%m"
 | |
| }
 | |
| 
 | |
| 
 | |
| zstyle ':vcs_info:*' stagedstr "$gitstaged●$rpscolor"
 | |
| zstyle ':vcs_info:*' unstagedstr "$gitdirty●$rpscolor"
 | |
| 
 | |
| # zstyle ':vcs_info:hg:*:-all-' command fakehg
 | |
| # zstyle ':vcs_info:*+*:*' debug true
 | |
| 
 | |
| zstyle ':vcs_info:hg*+set-hgrev-format:*' hooks hg-hashfallback
 | |
| zstyle ':vcs_info:hg*+set-message:*' hooks mq-vcs
 | |
| zstyle ':vcs_info:git*+set-message:*' hooks git-st git-stash
 | |
| zstyle ':vcs_info:*+pre-get-data:*' hooks vcs-detect
 | |
| 
 | |
| disable_pattern=()
 | |
| for i in $MPATH/filter/*(N); do
 | |
| 	filter="$(readlink -f $i)(|/*)"
 | |
| 	disable_pattern=("${disable_pattern[@]}" "$filter");
 | |
| done
 | |
| zstyle ':vcs_info:*' disable-patterns "${disable_pattern[@]}"
 | |
| 
 | |
| +vi-vcs-detect() {
 | |
| 	export VCS_DETECTED=$vcs
 | |
| }
 | |
| 
 | |
| function vcs_char {
 | |
| 	case $VCS_DETECTED in 
 | |
| 		git)
 | |
| 			echo '±';;
 | |
| 		hg)
 | |
| 			echo '☿';;
 | |
| 		svn)
 | |
| 			echo '☣';;
 | |
| 		*)
 | |
| 			echo '#';;
 | |
| 	esac
 | |
| }
 | |
| 
 | |
| exitstatus () {
 | |
|   local exitstatus=$?
 | |
| 
 | |
|   if [ $exitstatus -ne 0 ] ; then
 | |
|     if [ $exitstatus -gt 128 -a $exitstatus -lt 163 ] ; then
 | |
|       echo "${SIG_PROMPT_PREFIX}SIG$signals[$exitstatus-127]${SIG_PROMPT_SUFFIX}"
 | |
|     else
 | |
|       echo "${SIG_PROMPT_PREFIX}${exitstatus}${SIG_PROMPT_SUFFIX}"
 | |
|     fi
 | |
|   fi
 | |
| }
 | |
| 
 | |
| 
 | |
| ### Dynamically set hgrevformat based on if the local rev is available
 | |
| # We don't always know the local revision, e.g. if use-simple is set
 | |
| # Truncate long hash to 12-chars but also allow for multiple parents
 | |
| function +vi-hg-hashfallback() {
 | |
|     if [[ -z ${hook_com[localrev]} ]] ; then
 | |
|         local -a parents
 | |
| 
 | |
|         parents=( ${(s:+:)hook_com[hash]} )
 | |
|         parents=( ${(@r:12:)parents} )
 | |
|         hook_com[rev-replace]="${(j:+:)parents}"
 | |
| 
 | |
|         ret=1
 | |
|     fi
 | |
| }
 | |
| 
 | |
| # Show remote ref name and number of commits ahead-of or behind
 | |
| function +vi-git-st() {
 | |
|     local ahead behind remote
 | |
|     local -a gitstatus
 | |
| 
 | |
|     # Are we on a remote-tracking branch?
 | |
|     remote=${$(git rev-parse --verify ${hook_com[branch]}@{upstream} \
 | |
|         --symbolic-full-name --abbrev-ref 2>/dev/null)}
 | |
| 
 | |
|     if [[ -n ${remote} ]] ; then
 | |
|         # for git prior to 1.7
 | |
|         # ahead=$(git rev-list origin/${hook_com[branch]}..HEAD | wc -l)
 | |
|         ahead=$(git rev-list ${hook_com[branch]}@{upstream}..HEAD 2>/dev/null | wc -l)
 | |
| 		(( $ahead )) && gitstatus+=( "${gitstaged}+${ahead}${rpscolor}" )
 | |
| 
 | |
|         # for git prior to 1.7
 | |
|         # behind=$(git rev-list HEAD..origin/${hook_com[branch]} | wc -l)
 | |
|         behind=$(git rev-list HEAD..${hook_com[branch]}@{upstream} 2>/dev/null | wc -l)
 | |
|         (( $behind )) && gitstatus+=( "${gitdirty}-${behind}${rpscolor}" )
 | |
| 
 | |
|         hook_com[branch]="${hook_com[branch]} [ ${remote}${gitstatus:+ }${gitstatus} ]"
 | |
|     fi
 | |
| }
 | |
| 
 | |
| 
 | |
| # Show count of stashed changes
 | |
| function +vi-git-stash() {
 | |
|     local -a stashes
 | |
| 
 | |
|     if [[ -s ${hook_com[base]}/.git/refs/stash ]] ; then
 | |
|         stashes=$(git stash list 2>/dev/null | wc -l)
 | |
|         hook_com[misc]+=" (${stashes} stashed)"
 | |
|     fi
 | |
| }
 | |
| 
 | 
