[packages/rpm-build-tools] bash-prompt: rewritten not to rely on git status output text

glen glen at pld-linux.org
Sun Nov 20 18:40:55 CET 2016


commit 893f1bfe17def845775adf8ec64649251e5e1672
Author: Elan Ruusamäe <glen at delfi.ee>
Date:   Sun Nov 20 19:39:56 2016 +0200

    bash-prompt: rewritten not to rely on git status output text
    
    to be error prone to changes in git status command output

 bash-prompt.sh | 42 +++++++++++++++++++-----------------------
 1 file changed, 19 insertions(+), 23 deletions(-)
---
diff --git a/bash-prompt.sh b/bash-prompt.sh
index 2750122..467e4b3 100644
--- a/bash-prompt.sh
+++ b/bash-prompt.sh
@@ -1,5 +1,5 @@
 # NOTE:
-# This code works known to work for bash
+# This code is known to work with bash
 
 # the code below requires bash 4.x, skip if earlier
 test ${BASH_VERSION%%.*} -lt 4 && return 1
@@ -9,7 +9,7 @@ test ${BASH_VERSION%%.*} -lt 4 && return 1
 
 #
 # A colorized bash prompt
-# - shows curret branch
+# - shows current branch
 # - shows if branch is up to date/ahead/behind
 # - shows if last command exited with error (red)
 #
@@ -43,37 +43,33 @@ __bash_prompt_command() {
 # note we use "\" here to avoid any "git" previous alias/func
 __bash_parse_git_branch() {
 	# not in git dir. return early
-	\git rev-parse --git-dir &> /dev/null || return
+	git rev-parse --git-dir &> /dev/null || return
 
-	local git_status branch_pattern remote_pattern diverge_pattern
 	local state remote branch
 
-	git_status=$(\git -c color.ui=no status 2> /dev/null)
-	branch_pattern="^On branch ([^${IFS}]*)"
-	remote_pattern="Your branch is (behind|ahead) "
-	diverge_pattern="Your branch and (.*) have diverged"
+	# without branch, nothing is shown; don't bother further
+	branch=$(git symbolic-ref --short HEAD 2>/dev/null) || return
 
-	if [[ ! ${git_status} =~ "working directory clean" ]]; then
+	if [ -n "$(git status -s 2> /dev/null)" ]; then
 		state="${RED}★"
 	fi
 
-	# add an else if or two here if you want to get more specific
-	if [[ ${git_status} =~ ${remote_pattern} ]]; then
-		if [[ ${BASH_REMATCH[1]} == "ahead" ]]; then
-			remote="${YELLOW}↑"
-		else
-			remote="${YELLOW}↓"
-		fi
-	fi
-
-	if [[ ${git_status} =~ ${diverge_pattern} ]]; then
+	# http://stackoverflow.com/a/3278427
+	local=$(git rev-parse @)
+	remote=$(git rev-parse '@{u}')
+	base=$(git merge-base @ '@{u}')
+
+	if [ $local = $remote ]; then
+		remote=""
+	elif [ $local = $base ]; then
+		remote="${YELLOW}↓"
+	elif [ $remote = $base ]; then
+		remote="${YELLOW}↑"
+	else
 		remote="${YELLOW}↕"
 	fi
 
-	if [[ ${git_status} =~ ${branch_pattern} ]]; then
-		branch=${BASH_REMATCH[1]}
-		echo " (${branch})${remote}${state}"
-	fi
+	echo " (${branch})${remote}${state}"
 }
 
 # cache requires bash 4.x
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/rpm-build-tools.git/commitdiff/893f1bfe17def845775adf8ec64649251e5e1672



More information about the pld-cvs-commit mailing list