mirror of
https://github.com/git/git
synced 2024-10-30 04:01:21 +00:00
b3e9ce1332
The add--interactive --patch mode adjusts the UI based on whether we are pulling changes from HEAD or elsewhere (in the former case it asks to unstage the reverse hunk, rather than apply the forward hunk). Commit166ec2e
taught reset to work on an unborn branch, but in doing so, switched to always providing add--interactive with the sha1 rather than the symbolic name. This meant we always used the "apply" interface, even for "git reset -p HEAD". We can fix this by passing the symbolic name to add--interactive. Since it understands unborn branches these days, we do not even have to cover this special case ourselves; we can simply pass HEAD. The tests in t7105 now check that the right interface is used in each circumstance (and notice the regression from166ec2e
we are fixing). The test in t7106 checks that we get this right for the unborn case, too (not a regression, since it didn't work at all before, but a nice improvement). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
71 lines
1.8 KiB
Bash
Executable file
71 lines
1.8 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
test_description='git reset --patch'
|
|
. ./lib-patch-mode.sh
|
|
|
|
test_expect_success PERL 'setup' '
|
|
mkdir dir &&
|
|
echo parent > dir/foo &&
|
|
echo dummy > bar &&
|
|
git add dir &&
|
|
git commit -m initial &&
|
|
test_tick &&
|
|
test_commit second dir/foo head &&
|
|
set_and_save_state bar bar_work bar_index &&
|
|
save_head
|
|
'
|
|
|
|
# note: bar sorts before foo, so the first 'n' is always to skip 'bar'
|
|
|
|
test_expect_success PERL 'saying "n" does nothing' '
|
|
set_and_save_state dir/foo work work &&
|
|
(echo n; echo n) | git reset -p &&
|
|
verify_saved_state dir/foo &&
|
|
verify_saved_state bar
|
|
'
|
|
|
|
test_expect_success PERL 'git reset -p' '
|
|
(echo n; echo y) | git reset -p >output &&
|
|
verify_state dir/foo work head &&
|
|
verify_saved_state bar &&
|
|
test_i18ngrep "Unstage" output
|
|
'
|
|
|
|
test_expect_success PERL 'git reset -p HEAD^' '
|
|
(echo n; echo y) | git reset -p HEAD^ >output &&
|
|
verify_state dir/foo work parent &&
|
|
verify_saved_state bar &&
|
|
test_i18ngrep "Apply" output
|
|
'
|
|
|
|
# The idea in the rest is that bar sorts first, so we always say 'y'
|
|
# first and if the path limiter fails it'll apply to bar instead of
|
|
# dir/foo. There's always an extra 'n' to reject edits to dir/foo in
|
|
# the failure case (and thus get out of the loop).
|
|
|
|
test_expect_success PERL 'git reset -p dir' '
|
|
set_state dir/foo work work &&
|
|
(echo y; echo n) | git reset -p dir &&
|
|
verify_state dir/foo work head &&
|
|
verify_saved_state bar
|
|
'
|
|
|
|
test_expect_success PERL 'git reset -p -- foo (inside dir)' '
|
|
set_state dir/foo work work &&
|
|
(echo y; echo n) | (cd dir && git reset -p -- foo) &&
|
|
verify_state dir/foo work head &&
|
|
verify_saved_state bar
|
|
'
|
|
|
|
test_expect_success PERL 'git reset -p HEAD^ -- dir' '
|
|
(echo y; echo n) | git reset -p HEAD^ -- dir &&
|
|
verify_state dir/foo work parent &&
|
|
verify_saved_state bar
|
|
'
|
|
|
|
test_expect_success PERL 'none of this moved HEAD' '
|
|
verify_saved_head
|
|
'
|
|
|
|
|
|
test_done
|