mirror of
https://github.com/git/git.git
synced 2024-11-23 18:05:29 +08:00
git-prompt: improve cherry-pick/revert detection
If the user commits or resets a conflict resolution in the middle of a sequence of cherry-picks or reverts then CHERRY_PICK_HEAD/REVERT_HEAD will be removed and so in the absence of those files we need to check .git/sequencer/todo to see if there is a cherry-pick or revert in progress. Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
8dca754b1e
commit
e981bf7525
@ -286,6 +286,37 @@ __git_eread ()
|
||||
test -r "$1" && IFS=$'\r\n' read "$2" <"$1"
|
||||
}
|
||||
|
||||
# see if a cherry-pick or revert is in progress, if the user has committed a
|
||||
# conflict resolution with 'git commit' in the middle of a sequence of picks or
|
||||
# reverts then CHERRY_PICK_HEAD/REVERT_HEAD will not exist so we have to read
|
||||
# the todo file.
|
||||
__git_sequencer_status ()
|
||||
{
|
||||
local todo
|
||||
if test -f "$g/CHERRY_PICK_HEAD"
|
||||
then
|
||||
r="|CHERRY-PICKING"
|
||||
return 0;
|
||||
elif test -f "$g/REVERT_HEAD"
|
||||
then
|
||||
r="|REVERTING"
|
||||
return 0;
|
||||
elif __git_eread "$g/sequencer/todo" todo
|
||||
then
|
||||
case "$todo" in
|
||||
p[\ \ ]|pick[\ \ ]*)
|
||||
r="|CHERRY-PICKING"
|
||||
return 0
|
||||
;;
|
||||
revert[\ \ ]*)
|
||||
r="|REVERTING"
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
# __git_ps1 accepts 0 or 1 arguments (i.e., format string)
|
||||
# when called from PS1 using command substitution
|
||||
# in this mode it prints text to add to bash PS1 prompt (includes branch name)
|
||||
@ -417,10 +448,8 @@ __git_ps1 ()
|
||||
fi
|
||||
elif [ -f "$g/MERGE_HEAD" ]; then
|
||||
r="|MERGING"
|
||||
elif [ -f "$g/CHERRY_PICK_HEAD" ]; then
|
||||
r="|CHERRY-PICKING"
|
||||
elif [ -f "$g/REVERT_HEAD" ]; then
|
||||
r="|REVERTING"
|
||||
elif __git_sequencer_status; then
|
||||
:
|
||||
elif [ -f "$g/BISECT_LOG" ]; then
|
||||
r="|BISECTING"
|
||||
fi
|
||||
|
@ -211,8 +211,24 @@ test_expect_success 'prompt - merge' '
|
||||
|
||||
test_expect_success 'prompt - cherry-pick' '
|
||||
printf " (master|CHERRY-PICKING)" >expected &&
|
||||
test_must_fail git cherry-pick b1 &&
|
||||
test_when_finished "git reset --hard" &&
|
||||
test_must_fail git cherry-pick b1 b1^ &&
|
||||
test_when_finished "git cherry-pick --abort" &&
|
||||
__git_ps1 >"$actual" &&
|
||||
test_cmp expected "$actual" &&
|
||||
git reset --merge &&
|
||||
test_must_fail git rev-parse CHERRY_PICK_HEAD &&
|
||||
__git_ps1 >"$actual" &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success 'prompt - revert' '
|
||||
printf " (master|REVERTING)" >expected &&
|
||||
test_must_fail git revert b1^ b1 &&
|
||||
test_when_finished "git revert --abort" &&
|
||||
__git_ps1 >"$actual" &&
|
||||
test_cmp expected "$actual" &&
|
||||
git reset --merge &&
|
||||
test_must_fail git rev-parse REVERT_HEAD &&
|
||||
__git_ps1 >"$actual" &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
Loading…
Reference in New Issue
Block a user