Skip to content

Commit b91b935

Browse files
committed
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 <[email protected]>
1 parent 511ad15 commit b91b935

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

contrib/completion/git-prompt.sh

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -325,20 +325,20 @@ __git_ps1 ()
325325
local step=""
326326
local total=""
327327
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"
331331
if [ -f "$g/rebase-merge/interactive" ]; then
332332
r="|REBASE-i"
333333
else
334334
r="|REBASE-m"
335335
fi
336336
else
337337
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"
340340
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"
342342
r="|REBASE"
343343
elif [ -f "$g/rebase-apply/applying" ]; then
344344
r="|AM"

0 commit comments

Comments
 (0)