Skip to content

Commit

Permalink
reset [<commit>] paths...: do not mishandle unmerged paths
Browse files Browse the repository at this point in the history
Because "diff --cached HEAD" showed an incorrect blob object name on the
LHS of the diff, we ended up updating the index entry with bogus value,
not what we read from the tree.

Noticed by John Nowak.

Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
gitster committed Jul 14, 2011
1 parent d28790d commit ff00b68
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 2 deletions.
2 changes: 1 addition & 1 deletion builtin/reset.c
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ static void update_index_from_diff(struct diff_queue_struct *q,

for (i = 0; i < q->nr; i++) {
struct diff_filespec *one = q->queue[i]->one;
if (one->mode) {
if (one->mode && !is_null_sha1(one->sha1)) {
struct cache_entry *ce;
ce = make_cache_entry(one->mode, one->sha1, one->path,
0, 0);
Expand Down
3 changes: 2 additions & 1 deletion diff-lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -379,7 +379,8 @@ static void do_oneway_diff(struct unpack_trees_options *o,
if (cached && idx && ce_stage(idx)) {
struct diff_filepair *pair;
pair = diff_unmerge(&revs->diffopt, idx->name);
fill_filespec(pair->one, idx->sha1, idx->ce_mode);
if (tree)
fill_filespec(pair->one, tree->sha1, tree->ce_mode);
return;
}

Expand Down
15 changes: 15 additions & 0 deletions t/t7102-reset.sh
Original file line number Diff line number Diff line change
Expand Up @@ -429,6 +429,21 @@ test_expect_success '--mixed refreshes the index' '
test_i18ncmp expect output
'

test_expect_success 'resetting specific path that is unmerged' '
git rm --cached file2 &&
F1=$(git rev-parse HEAD:file1) &&
F2=$(git rev-parse HEAD:file2) &&
F3=$(git rev-parse HEAD:secondfile) &&
{
echo "100644 $F1 1 file2" &&
echo "100644 $F2 2 file2" &&
echo "100644 $F3 3 file2"
} | git update-index --index-info &&
git ls-files -u &&
test_must_fail git reset HEAD file2 &&
git diff-index --exit-code --cached HEAD
'

test_expect_success 'disambiguation (1)' '
git reset --hard &&
Expand Down

0 comments on commit ff00b68

Please sign in to comment.