]> git.phdru.name Git - dotfiles.git/commitdiff
bash_prompt: recurse submodules
authorOleg Broytman <phd@phdru.name>
Thu, 9 Nov 2023 10:51:48 +0000 (13:51 +0300)
committerOleg Broytman <phd@phdru.name>
Thu, 9 Nov 2023 10:51:48 +0000 (13:51 +0300)
admin/prog/bash_prompt

index e4b3563b613ae78588eda1068b25cdc064a3dee8..903a58b8bbaefd02d04a141006f268d7619307b7 100644 (file)
@@ -43,6 +43,16 @@ short_curdir() {
 # https://github.com/necolas/dotfiles/blob/master/shell/bash_prompt and
 # https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh
 
+_recurse_submodules() {
+    local command="$@"
+    local output="$($command 2>/dev/null)"
+    if [ -n "$output" ]; then
+        echo -n "$output"
+        return
+    fi
+    git submodule --quiet foreach $command 2>/dev/null
+}
+
 prompt_git() {
     local s=""
     local branchName=""
@@ -57,22 +67,22 @@ prompt_git() {
             #git update-index --really-refresh -q &>/dev/null
 
             # check for unstaged changes
-            if [ -n "$(git ls-files --modified :/)" ]; then
+            if [ -n "$(_recurse_submodules git ls-files --modified :/)" ]; then
                 s="$s*";
             fi
 
             # check for uncommitted changes in the index
-            if ! $(git diff --quiet --ignore-submodules --cached); then
+            if [ -n "$(_recurse_submodules git diff --ignore-submodules --cached)" ]; then
                 s="$s+";
             fi
 
             # check for stashed files
-            if $(git rev-parse --verify refs/stash &>/dev/null); then
+            if [ -n "$(_recurse_submodules git rev-parse --verify refs/stash)" ]; then
                 s="$s$";
             fi
 
             # check for untracked files
-            if [ -n "$(git ls-files --others --exclude-standard :/)" ]; then
+            if [ -n "$(_recurse_submodules git ls-files --others --exclude-standard :/)" ]; then
                 s="$s%";
             fi