Skip to content

Commit

Permalink
unpack_trees(): fix diff-index regression.
Browse files Browse the repository at this point in the history
When skip_unmerged option is not given, unpack_trees() should not just
skip unmerged cache entries but keep them in the result for the caller to
sort them out.

For callers other than diff-index, the incoming index should never be
unmerged, but diff-index is a special case caller.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Linus Torvalds authored and Junio C Hamano committed Mar 11, 2008
1 parent 542c264 commit 20a16eb
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 2 deletions.
18 changes: 18 additions & 0 deletions diff-lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -641,6 +641,21 @@ static void do_oneway_diff(struct unpack_trees_options *o,
show_modified(revs, tree, idx, 1, cached, match_missing);
}

static inline void skip_same_name(struct cache_entry *ce, struct unpack_trees_options *o)
{
int len = ce_namelen(ce);
const struct index_state *index = o->src_index;

while (o->pos < index->cache_nr) {
struct cache_entry *next = index->cache[o->pos];
if (len != ce_namelen(next))
break;
if (memcmp(ce->name, next->name, len))
break;
o->pos++;
}
}

/*
* The unpack_trees() interface is designed for merging, so
* the different source entries are designed primarily for
Expand All @@ -662,6 +677,9 @@ static int oneway_diff(struct cache_entry **src, struct unpack_trees_options *o)
struct cache_entry *tree = src[1];
struct rev_info *revs = o->unpack_data;

if (idx && ce_stage(idx))
skip_same_name(idx, o);

/*
* Unpack-trees generates a DF/conflict entry if
* there was a directory in the index and a tree
Expand Down
2 changes: 0 additions & 2 deletions unpack-trees.c
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,6 @@ static int unpack_index_entry(struct cache_entry *ce, struct unpack_trees_option
add_entry(o, ce, 0, 0);
return 0;
}
return 0;
}
return call_unpack_fn(src, o);
}
Expand Down Expand Up @@ -286,7 +285,6 @@ static int unpack_callback(int n, unsigned long mask, unsigned long dirmask, str
add_entry(o, ce, 0, 0);
return mask;
}
continue;
}
src[0] = ce;
}
Expand Down

0 comments on commit 20a16eb

Please sign in to comment.