aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2006-04-22 03:58:04 -0700
committerJunio C Hamano <junkio@cox.net>2006-04-22 04:03:32 -0700
commit5c21ac0e7c475c82039ab604ee9d7d8430889346 (patch)
tree4dc25e01b3d8b9bf4eb46bab7c9632afd84c29fa
parente09ad6e1e3308fde346b4b6287d9441363806832 (diff)
downloadgit-5c21ac0e7c475c82039ab604ee9d7d8430889346.tar.gz
git-5c21ac0e7c475c82039ab604ee9d7d8430889346.tar.xz
Libified diff-index: backward compatibility fix.
"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@cox.net>
-rw-r--r--diff-index.c6
-rw-r--r--diff-lib.c10
-rw-r--r--diff.h2
3 files changed, 12 insertions, 6 deletions
diff --git a/diff-index.c b/diff-index.c
index 4a243b362..86940123b 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 63da3b521..2183b41b0 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 837d449f8..7150b9038 100644
--- a/diff.h
+++ b/diff.h
@@ -171,6 +171,6 @@ extern const char *diff_unique_abbrev(const unsigned char *, int);
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 */