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>
This commit is contained in:
SZEDER Gábor 2011-04-01 00:25:16 +02:00
parent 511ad15904
commit b91b935f04

View File

@ -325,9 +325,9 @@ __git_ps1 ()
local step="" local step=""
local total="" local total=""
if [ -d "$g/rebase-merge" ]; then if [ -d "$g/rebase-merge" ]; then
b="$(cat "$g/rebase-merge/head-name" 2>/dev/null)" read b 2>/dev/null <"$g/rebase-merge/head-name"
step=$(cat "$g/rebase-merge/msgnum" 2>/dev/null) read step 2>/dev/null <"$g/rebase-merge/msgnum"
total=$(cat "$g/rebase-merge/end" 2>/dev/null) read total 2>/dev/null <"$g/rebase-merge/end"
if [ -f "$g/rebase-merge/interactive" ]; then if [ -f "$g/rebase-merge/interactive" ]; then
r="|REBASE-i" r="|REBASE-i"
else else
@ -335,10 +335,10 @@ __git_ps1 ()
fi fi
else else
if [ -d "$g/rebase-apply" ]; then if [ -d "$g/rebase-apply" ]; then
step=$(cat "$g/rebase-apply/next" 2>/dev/null) read step 2>/dev/null <"$g/rebase-apply/next"
total=$(cat "$g/rebase-apply/last" 2>/dev/null) read total 2>/dev/null <"$g/rebase-apply/last"
if [ -f "$g/rebase-apply/rebasing" ]; then if [ -f "$g/rebase-apply/rebasing" ]; then
b="$(cat "$g/rebase-apply/head-name" 2>/dev/null)" read b 2>/dev/null <"$g/rebase-apply/head-name"
r="|REBASE" r="|REBASE"
elif [ -f "$g/rebase-apply/applying" ]; then elif [ -f "$g/rebase-apply/applying" ]; then
r="|AM" r="|AM"