"diff-index -m" does not mean "do not ignore merges", but means "pretend missing files match the index". The previous round tried to address this, but failed because setup_revisions() ate "-m" flag before the caller had a chance to intervene. Signed-off-by: Junio C Hamano <junkio@xxxxxxx> --- diff-index.c | 6 ++---- diff-lib.c | 10 +++++++++- diff.h | 2 +- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/diff-index.c b/diff-index.c index 4a243b3..8694012 100644 --- a/diff-index.c +++ b/diff-index.c @@ -23,9 +23,7 @@ int main(int argc, const char **argv) for (i = 1; i < argc; i++) { const char *arg = argv[i]; - if (!strcmp(arg, "-m")) - match_missing = 1; - else if (!strcmp(arg, "--cached")) + if (!strcmp(arg, "--cached")) cached = 1; else usage(diff_cache_usage); @@ -37,5 +35,5 @@ int main(int argc, const char **argv) if (!rev.pending_objects || rev.pending_objects->next || rev.max_count != -1 || rev.min_age != -1 || rev.max_age != -1) usage(diff_cache_usage); - return run_diff_index(&rev, cached, match_missing); + return run_diff_index(&rev, cached); } diff --git a/diff-lib.c b/diff-lib.c index 63da3b5..2183b41 100644 --- a/diff-lib.c +++ b/diff-lib.c @@ -308,12 +308,20 @@ static void mark_merge_entries(void) } } -int run_diff_index(struct rev_info *revs, int cached, int match_missing) +int run_diff_index(struct rev_info *revs, int cached) { int ret; struct object *ent; struct tree *tree; const char *tree_name; + int match_missing = 0; + + /* + * Backward compatibility wart - "diff-index -m" does + * not mean "do not ignore merges", but totally different. + */ + if (!revs->ignore_merges) + match_missing = 1; if (read_cache() < 0) { perror("read_cache"); diff --git a/diff.h b/diff.h index 837d449..7150b90 100644 --- a/diff.h +++ b/diff.h @@ -171,6 +171,6 @@ extern const char *diff_unique_abbrev(co extern int run_diff_files(struct rev_info *revs, int silent_on_removed); -extern int run_diff_index(struct rev_info *revs, int cached, int match_missing); +extern int run_diff_index(struct rev_info *revs, int cached); #endif /* DIFF_H */ -- 1.3.0.g0bc6 - : send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html