Merge branch 'jk/reset-p-current-head-fix'
authorJunio C Hamano <gitster@pobox.com>
Fri, 1 Nov 2013 14:38:49 +0000 (07:38 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 1 Nov 2013 14:38:49 +0000 (07:38 -0700)
"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

builtin/reset.c
git-add--interactive.perl
t/t7105-reset-patch.sh
t/t7106-reset-unborn-branch.sh
index f2f9d55392d2193432d5a572a70cd27afcf6b136..60048030dd4d05e9938f298002d02afc31528bf1 100644 (file)
@@ -304,7 +304,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
        if (patch_mode) {
                if (reset_type != NONE)
                        die(_("--patch is incompatible with --{hard,mixed,soft}"));
-               return run_add_interactive(sha1_to_hex(sha1), "--patch=reset", &pathspec);
+               return run_add_interactive(rev, "--patch=reset", &pathspec);
        }
 
        /* git reset tree [--] paths... can be used to
index 51563840f49089cf250992fd47fe70a45cef0c52..24bb1ab9929d2cbf117051ed0e4edeb37b0efaea 100755 (executable)
@@ -263,6 +263,17 @@ sub get_empty_tree {
        return '4b825dc642cb6eb9a060e54bf8d69288fbee4904';
 }
 
+sub get_diff_reference {
+       my $ref = shift;
+       if (defined $ref and $ref ne 'HEAD') {
+               return $ref;
+       } elsif (is_initial_commit()) {
+               return get_empty_tree();
+       } else {
+               return 'HEAD';
+       }
+}
+
 # Returns list of hashes, contents of each of which are:
 # VALUE:       pathname
 # BINARY:      is a binary path
@@ -286,14 +297,7 @@ sub list_modified {
                return if (!@tracked);
        }
 
-       my $reference;
-       if (defined $patch_mode_revision and $patch_mode_revision ne 'HEAD') {
-               $reference = $patch_mode_revision;
-       } elsif (is_initial_commit()) {
-               $reference = get_empty_tree();
-       } else {
-               $reference = 'HEAD';
-       }
+       my $reference = get_diff_reference($patch_mode_revision);
        for (run_cmd_pipe(qw(git diff-index --cached
                             --numstat --summary), $reference,
                             '--', @tracked)) {
@@ -737,7 +741,7 @@ sub parse_diff {
                splice @diff_cmd, 1, 0, "--diff-algorithm=${diff_algorithm}";
        }
        if (defined $patch_mode_revision) {
-               push @diff_cmd, $patch_mode_revision;
+               push @diff_cmd, get_diff_reference($patch_mode_revision);
        }
        my @diff = run_cmd_pipe("git", @diff_cmd, "--", $path);
        my @colored = ();
index 95fab2036109c5a4aef8ff3d8100403fe335819f..98b7d7b969e4eb3ded40aba1f12d2afc8bad849a 100755 (executable)
@@ -25,15 +25,17 @@ test_expect_success PERL 'saying "n" does nothing' '
 '
 
 test_expect_success PERL 'git reset -p' '
-       (echo n; echo y) | git reset -p &&
+       (echo n; echo y) | git reset -p >output &&
        verify_state dir/foo work head &&
-       verify_saved_state bar
+       verify_saved_state bar &&
+       test_i18ngrep "Unstage" output
 '
 
 test_expect_success PERL 'git reset -p HEAD^' '
-       (echo n; echo y) | git reset -p HEAD^ &&
+       (echo n; echo y) | git reset -p HEAD^ >output &&
        verify_state dir/foo work parent &&
-       verify_saved_state bar
+       verify_saved_state bar &&
+       test_i18ngrep "Apply" output
 '
 
 # The idea in the rest is that bar sorts first, so we always say 'y'
index af00ab4d88cc75ec720e31da3a0d5d3a1ef8df40..0f95f004777ac3db191264fc5760c17bc1bdf77b 100755 (executable)
@@ -37,11 +37,12 @@ test_expect_success PERL 'reset -p' '
        rm .git/index &&
        git add a &&
        echo y >yes &&
-       git reset -p <yes &&
+       git reset -p <yes >output &&
 
        >expect &&
        git ls-files >actual &&
-       test_cmp expect actual
+       test_cmp expect actual &&
+       test_i18ngrep "Unstage" output
 '
 
 test_expect_success 'reset --soft is a no-op' '