aboutsummaryrefslogtreecommitdiff
path: root/bash/bashrc.d
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2016-08-21 12:32:50 +1200
committerTom Ryder <tom@sanctum.geek.nz>2016-08-21 12:32:50 +1200
commitfe8389a2f5aad6bf4b6a6b003c349fe324cbf84d (patch)
treeb53d507fb89920bb7842ee877c0c1415b918dc1e /bash/bashrc.d
parentShow all untracked files in git-status (diff)
downloaddotfiles-fe8389a2f5aad6bf4b6a6b003c349fe324cbf84d.tar.gz
dotfiles-fe8389a2f5aad6bf4b6a6b003c349fe324cbf84d.zip
Add some upstream checking to Git prompt
Also add some comments to be a bit less cryptic
Diffstat (limited to 'bash/bashrc.d')
-rw-r--r--bash/bashrc.d/prompt.bash22
1 files changed, 19 insertions, 3 deletions
diff --git a/bash/bashrc.d/prompt.bash b/bash/bashrc.d/prompt.bash
index dca34928..1e8c568d 100644
--- a/bash/bashrc.d/prompt.bash
+++ b/bash/bashrc.d/prompt.bash
@@ -127,14 +127,30 @@ prompt() {
# Collect symbols representing repository state
local state
+
+ # Upstream HEAD has commits after local HEAD; we're "behind"
+ (($(git rev-list --count 'HEAD..@{u}' 2>/dev/null) > 0)) &&
+ state=${state}\<
+
+ # Local HEAD has commits after upstream HEAD; we're "ahead"
+ (($(git rev-list --count '@{u}..HEAD' 2>/dev/null) > 0)) &&
+ state=${state}\>
+
+ # Tracked files are modified
git diff-files --quiet ||
- state=${state}!
+ state=${state}\!
+
+ # Changes are staged
git diff-index --cached --quiet HEAD ||
- state=${state}+
+ state=${state}\+
+
+ # There are some untracked and unignored files
[[ -n $(git ls-files --others --exclude-standard) ]] &&
state=${state}\?
+
+ # There are stashed changes
git rev-parse --quiet --verify refs/stash >/dev/null &&
- state=${state}^
+ state=${state}\^
# Print the status in brackets; add a git: prefix only if there
# might be another VCS prompt (because PROMPT_VCS is set)