bash prompt: use bash builtins to find out rebase state

During an ongoing interactive rebase __git_ps1() finds out the name of the rebased branch, the total number of patches and the number of the current patch by executing a '$(cat .git/rebase-merge/<FILE>)' command substitution for each. That is not quite the most efficient way to read single line single word files, because it imposes the overhead of fork()ing a subshell and fork()+exec()ing 'cat' several times. Use the 'read' bash builtin instead to avoid those overheads. Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>

SZEDER Gábor committed Apr 1, 2011 at 00:25 UTC b91b935f04e8dcb1cc9f247627fbd0346ce949f4
1 file changed +6 -6
contrib/completion/git-prompt.sh
+6 -6
@@ -325,9 +325,9 @@ __git_ps1 ()
325 local step=""
326 local total=""
327 if [ -d "$g/rebase-merge" ]; then
328 - b="$(cat "$g/rebase-merge/head-name" 2>/dev/null)"
329 - step=$(cat "$g/rebase-merge/msgnum" 2>/dev/null)
330 - total=$(cat "$g/rebase-merge/end" 2>/dev/null)
328 + read b 2>/dev/null <"$g/rebase-merge/head-name"
329 + read step 2>/dev/null <"$g/rebase-merge/msgnum"
330 + read total 2>/dev/null <"$g/rebase-merge/end"
331 if [ -f "$g/rebase-merge/interactive" ]; then
332 r="|REBASE-i"
333 else
@@ -335,10 +335,10 @@ __git_ps1 ()
335 fi
336 else
337 if [ -d "$g/rebase-apply" ]; then
338 - step=$(cat "$g/rebase-apply/next" 2>/dev/null)
339 - total=$(cat "$g/rebase-apply/last" 2>/dev/null)
338 + read step 2>/dev/null <"$g/rebase-apply/next"
339 + read total 2>/dev/null <"$g/rebase-apply/last"
340 if [ -f "$g/rebase-apply/rebasing" ]; then
341 - b="$(cat "$g/rebase-apply/head-name" 2>/dev/null)"
341 + read b 2>/dev/null <"$g/rebase-apply/head-name"
342 r="|REBASE"
343 elif [ -f "$g/rebase-apply/applying" ]; then
344 r="|AM"