Skip to content

Commit 38f7dbc

Browse files
hgmollhgmoll
authored andcommitted
Fix index lock issue
1 parent 85a2752 commit 38f7dbc

1 file changed

Lines changed: 20 additions & 0 deletions

File tree

gitprompt.sh

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,20 @@ function replaceSymbols() {
437437
echo ${VALUE2//_PREHASH_/${GIT_PROMPT_SYMBOLS_PREHASH}}
438438
}
439439

440+
function createPrivateIndex {
441+
# Create a copy of the index to avoid conflicts with parallel git commands, e.g. git rebase.
442+
local __GIT_INDEX_FILE
443+
local __GIT_INDEX_PRIVATE
444+
if [[ -z "$GIT_INDEX_FILE" ]]; then
445+
__GIT_INDEX_FILE="$(git rev-parse --git-dir)/index"
446+
else
447+
__GIT_INDEX_FILE="$GIT_INDEX_FILE"
448+
fi
449+
__GIT_INDEX_PRIVATE="/tmp/git-index-private$$"
450+
cp "$__GIT_INDEX_FILE" "$__GIT_INDEX_PRIVATE" 2>/dev/null
451+
echo "$__GIT_INDEX_PRIVATE"
452+
}
453+
440454
function updatePrompt() {
441455
local LAST_COMMAND_INDICATOR
442456
local PROMPT_LEADING_SPACE
@@ -456,6 +470,11 @@ function updatePrompt() {
456470
export __GIT_PROMPT_SHOW_UNTRACKED_FILES=${GIT_PROMPT_SHOW_UNTRACKED_FILES}
457471
fi
458472

473+
local GIT_INDEX_PRIVATE="$(createPrivateIndex)"
474+
#important to define GIT_INDEX_FILE as local: This way it only affects this function (and below) - even with the export afterwards
475+
local GIT_INDEX_FILE
476+
export GIT_INDEX_FILE="$GIT_INDEX_PRIVATE"
477+
459478
local -a git_status_fields
460479
git_status_fields=($("$__GIT_STATUS_CMD" 2>/dev/null))
461480

@@ -528,6 +547,7 @@ function updatePrompt() {
528547
fi
529548

530549
PS1="${NEW_PROMPT//_LAST_COMMAND_INDICATOR_/${LAST_COMMAND_INDICATOR}${ResetColor}}"
550+
rm "$GIT_INDEX_PRIVATE" 2>/dev/null
531551
}
532552

533553
# Helper function that returns virtual env information to be set in prompt

0 commit comments

Comments
 (0)