]> git.ipfire.org Git - thirdparty/git.git/commitdiff
git-prompt: show presence of unresolved conflicts at command prompt
authorJustin Donnelly <justinrdonnelly@gmail.com>
Wed, 17 Aug 2022 00:18:12 +0000 (00:18 +0000)
committerJunio C Hamano <gitster@pobox.com>
Fri, 19 Aug 2022 17:58:40 +0000 (10:58 -0700)
If GIT_PS1_SHOWCONFLICTSTATE is set to "yes", show the word "CONFLICT"
on the command prompt when there are unresolved conflicts.

Example prompt: (main|CONFLICT)

Signed-off-by: Justin Donnelly <justinrdonnelly@gmail.com>
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
contrib/completion/git-prompt.sh
t/t9903-bash-prompt.sh

index 1435548e004687fcc21a9e1b8922aa3bd39b8515..57972c2845c135dc45aeb560d289aade4caa5e5d 100644 (file)
 # single '?' character by setting GIT_PS1_COMPRESSSPARSESTATE, or omitted
 # by setting GIT_PS1_OMITSPARSESTATE.
 #
+# If you would like to see a notification on the prompt when there are
+# unresolved conflicts, set GIT_PS1_SHOWCONFLICTSTATE to "yes". The
+# prompt will include "|CONFLICT".
+#
 # If you would like to see more information about the identity of
 # commits checked out as a detached HEAD, set GIT_PS1_DESCRIBE_STYLE
 # to one of these values:
@@ -508,6 +512,12 @@ __git_ps1 ()
                r="$r $step/$total"
        fi
 
+       local conflict="" # state indicator for unresolved conflicts
+       if [[ "${GIT_PS1_SHOWCONFLICTSTATE}" == "yes" ]] &&
+          [[ $(git ls-files --unmerged 2>/dev/null) ]]; then
+               conflict="|CONFLICT"
+       fi
+
        local w=""
        local i=""
        local s=""
@@ -572,7 +582,7 @@ __git_ps1 ()
        fi
 
        local f="$h$w$i$s$u$p"
-       local gitstring="$c$b${f:+$z$f}${sparse}$r${upstream}"
+       local gitstring="$c$b${f:+$z$f}${sparse}$r${upstream}${conflict}"
 
        if [ $pcmode = yes ]; then
                if [ "${__git_printf_supports_v-}" != yes ]; then
index 6a30f5719c33260cb57fca2112d77bc1f9515375..d459fae6551bd7b5812f8b76a5faae8ebd4075df 100755 (executable)
@@ -759,4 +759,20 @@ test_expect_success 'prompt - hide if pwd ignored - inside gitdir' '
        test_cmp expected "$actual"
 '
 
+test_expect_success 'prompt - conflict indicator' '
+       printf " (main|CONFLICT)" >expected &&
+       echo "stash" >file &&
+       git stash &&
+       test_when_finished "git stash drop" &&
+       echo "commit" >file &&
+       git commit -m "commit" file &&
+       test_when_finished "git reset --hard HEAD~" &&
+       test_must_fail git stash apply &&
+       (
+               GIT_PS1_SHOWCONFLICTSTATE="yes" &&
+               __git_ps1 >"$actual"
+       ) &&
+       test_cmp expected "$actual"
+'
+
 test_done