Subject: [PATCH] Fix early wrapping of the command line when using git-prompt.sh

From: "Richard Quadling via GitGitGadget" <[email-masked]>
Date: Mon, 28 Apr 2025 12:33:51 +0000

From: Richard Quadling <[email-masked]>

When running git-prompt in Bash, the lack of \001 and \002 causes
the command line to wrap early.

The issue is the current \001 and \002 were not themselves escaped
and so resulted in binary 0b1 and 0b10 being present, rather than
the strings "\001" and "\002".

Signed-off-by: Richard Quadling <[email-masked]>
---
    Fix early wrapping of the command line when using git-prompt.sh
    
    When running git-prompt in Bash, the lack of \001 and \002 causes the
    command line to wrap early.
    
    The issue is the current \001 and \002 were not themselves escaped and
    so resulted in binary 0b1 and 0b10 being present, rather than the
    strings "\001" and "\002".

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1910%2Frquadling%2Fmaster-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1910/rquadling/master-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/1910

 contrib/completion/git-prompt.sh | 2 +-
 t/t9903-bash-prompt.sh           | 8 ++++----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/contrib/completion/git-prompt.sh b/contrib/completion/git-prompt.sh
index 6186c474ba7..4a64aca3eda 100644
--- a/contrib/completion/git-prompt.sh
+++ b/contrib/completion/git-prompt.sh
@@ -147,7 +147,7 @@ printf -v __git_printf_supports_v -- '%s' yes >/dev/null 2>&1
 
 # like __git_SOH=$'\001' etc but works also in shells without $'...'
 eval "$(printf '
-	__git_SOH="\001" __git_STX="\002" __git_ESC="\033"
+	__git_SOH="\\001" __git_STX="\\002" __git_ESC="\033"
 	__git_LF="\n" __git_CRLF="\r\n"
 ')"
 
diff --git a/t/t9903-bash-prompt.sh b/t/t9903-bash-prompt.sh
index d667dda654e..fc6fdd36c69 100755
--- a/t/t9903-bash-prompt.sh
+++ b/t/t9903-bash-prompt.sh
@@ -13,10 +13,10 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 . "$GIT_BUILD_DIR/contrib/completion/git-prompt.sh"
 
 actual="$TRASH_DIRECTORY/actual"
-c_red='\001\e[31m\002'
-c_green='\001\e[32m\002'
-c_lblue='\001\e[1;34m\002'
-c_clear='\001\e[0m\002'
+c_red='\\001\e[31m\\002'
+c_green='\\001\e[32m\\002'
+c_lblue='\\001\e[1;34m\\002'
+c_clear='\\001\e[0m\\002'
 
 test_expect_success 'setup for prompt tests' '
 	git init otherrepo &&

base-commit: f65182a99e545d2f2bc22e6c1c2da192133b16a3
-- 
gitgitgadget