Skip to content

Commit 1feb458

Browse files
committed
Merge branch 'jk/reset-p-current-head-fix'
"git reset -p HEAD" has codepath to special case it from resetting to contents of other commits, but recent change broke it. * jk/reset-p-current-head-fix: reset: pass real rev name to add--interactive add-interactive: handle unborn branch in patch mode
2 parents 60e779a + b3e9ce1 commit 1feb458

File tree

4 files changed

+23
-16
lines changed

4 files changed

+23
-16
lines changed

builtin/reset.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
304304
if (patch_mode) {
305305
if (reset_type != NONE)
306306
die(_("--patch is incompatible with --{hard,mixed,soft}"));
307-
return run_add_interactive(sha1_to_hex(sha1), "--patch=reset", &pathspec);
307+
return run_add_interactive(rev, "--patch=reset", &pathspec);
308308
}
309309

310310
/* git reset tree [--] paths... can be used to

git-add--interactive.perl

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,17 @@ sub get_empty_tree {
263263
return '4b825dc642cb6eb9a060e54bf8d69288fbee4904';
264264
}
265265

266+
sub get_diff_reference {
267+
my $ref = shift;
268+
if (defined $ref and $ref ne 'HEAD') {
269+
return $ref;
270+
} elsif (is_initial_commit()) {
271+
return get_empty_tree();
272+
} else {
273+
return 'HEAD';
274+
}
275+
}
276+
266277
# Returns list of hashes, contents of each of which are:
267278
# VALUE: pathname
268279
# BINARY: is a binary path
@@ -286,14 +297,7 @@ sub list_modified {
286297
return if (!@tracked);
287298
}
288299

289-
my $reference;
290-
if (defined $patch_mode_revision and $patch_mode_revision ne 'HEAD') {
291-
$reference = $patch_mode_revision;
292-
} elsif (is_initial_commit()) {
293-
$reference = get_empty_tree();
294-
} else {
295-
$reference = 'HEAD';
296-
}
300+
my $reference = get_diff_reference($patch_mode_revision);
297301
for (run_cmd_pipe(qw(git diff-index --cached
298302
--numstat --summary), $reference,
299303
'--', @tracked)) {
@@ -737,7 +741,7 @@ sub parse_diff {
737741
splice @diff_cmd, 1, 0, "--diff-algorithm=${diff_algorithm}";
738742
}
739743
if (defined $patch_mode_revision) {
740-
push @diff_cmd, $patch_mode_revision;
744+
push @diff_cmd, get_diff_reference($patch_mode_revision);
741745
}
742746
my @diff = run_cmd_pipe("git", @diff_cmd, "--", $path);
743747
my @colored = ();

t/t7105-reset-patch.sh

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,17 @@ test_expect_success PERL 'saying "n" does nothing' '
2525
'
2626

2727
test_expect_success PERL 'git reset -p' '
28-
(echo n; echo y) | git reset -p &&
28+
(echo n; echo y) | git reset -p >output &&
2929
verify_state dir/foo work head &&
30-
verify_saved_state bar
30+
verify_saved_state bar &&
31+
test_i18ngrep "Unstage" output
3132
'
3233

3334
test_expect_success PERL 'git reset -p HEAD^' '
34-
(echo n; echo y) | git reset -p HEAD^ &&
35+
(echo n; echo y) | git reset -p HEAD^ >output &&
3536
verify_state dir/foo work parent &&
36-
verify_saved_state bar
37+
verify_saved_state bar &&
38+
test_i18ngrep "Apply" output
3739
'
3840

3941
# The idea in the rest is that bar sorts first, so we always say 'y'

t/t7106-reset-unborn-branch.sh

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,12 @@ test_expect_success PERL 'reset -p' '
3737
rm .git/index &&
3838
git add a &&
3939
echo y >yes &&
40-
git reset -p <yes &&
40+
git reset -p <yes >output &&
4141
4242
>expect &&
4343
git ls-files >actual &&
44-
test_cmp expect actual
44+
test_cmp expect actual &&
45+
test_i18ngrep "Unstage" output
4546
'
4647

4748
test_expect_success 'reset --soft is a no-op' '

0 commit comments

Comments
 (0)