diff: deprecate -q option to diff-files
authorJunio C Hamano <gitster@pobox.com>
Thu, 18 Jul 2013 00:18:32 +0000 (17:18 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 19 Jul 2013 22:20:47 +0000 (15:20 -0700)
This reimplements the ancient "-q" option to "git diff-files" that
was inherited from "show-diff -q" in terms of "--diff-filter=d". We
will be deprecating the "-q" option, so let's issue a warning when
we do so.

Incidentally this also tentatively fixes "git diff --no-index" to
honor "-q" and hide deletions; the use will get the same warning.

We should remove the support for "-q" in a future version but it is
not that urgent.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
diff-lib.c
diff-no-index.c
diff.c
diff.h
index f35de0ffa0ec263acae7ac6211e3c2817987f760..4634b291993ce77c1d9c587cb535e8cc6b4f076f 100644 (file)
@@ -86,10 +86,12 @@ int run_diff_files(struct rev_info *revs, unsigned int option)
 {
        int entries, i;
        int diff_unmerged_stage = revs->max_count;
-       int silent_on_removed = option & DIFF_SILENT_ON_REMOVED;
        unsigned ce_option = ((option & DIFF_RACY_IS_MODIFIED)
                              ? CE_MATCH_RACY_IS_DIRTY : 0);
 
+       if (option & DIFF_SILENT_ON_REMOVED)
+               handle_deprecated_show_diff_q(&revs->diffopt);
+
        diff_set_mnemonic_prefix(&revs->diffopt, "i/", "w/");
 
        if (diff_unmerged_stage < 0)
@@ -136,8 +138,6 @@ int run_diff_files(struct rev_info *revs, unsigned int option)
                                        perror(ce->name);
                                        continue;
                                }
-                               if (silent_on_removed)
-                                       continue;
                                wt_mode = 0;
                        }
                        dpath->mode = wt_mode;
@@ -203,8 +203,6 @@ int run_diff_files(struct rev_info *revs, unsigned int option)
                                perror(ce->name);
                                continue;
                        }
-                       if (silent_on_removed)
-                               continue;
                        diff_addremove(&revs->diffopt, '-', ce->ce_mode,
                                       ce->sha1, !is_null_sha1(ce->sha1),
                                       ce->name, 0);
index 74da659368e4db67715a9c81dc7a5e0edcd3bcce..a788a5f3043400e6adee5436ca5618690b689de2 100644 (file)
@@ -187,7 +187,7 @@ void diff_no_index(struct rev_info *revs,
 {
        int i, prefixlen;
        int no_index = 0;
-       unsigned options = 0;
+       unsigned deprecated_show_diff_q_option_used = 0;
        const char *paths[2];
 
        /* Were we asked to do --no-index explicitly? */
@@ -225,7 +225,7 @@ void diff_no_index(struct rev_info *revs,
                if (!strcmp(argv[i], "--no-index"))
                        i++;
                else if (!strcmp(argv[i], "-q")) {
-                       options |= DIFF_SILENT_ON_REMOVED;
+                       deprecated_show_diff_q_option_used = 1;
                        i++;
                }
                else if (!strcmp(argv[i], "--"))
@@ -260,6 +260,9 @@ void diff_no_index(struct rev_info *revs,
        revs->max_count = -2;
        diff_setup_done(&revs->diffopt);
 
+       if (deprecated_show_diff_q_option_used)
+               handle_deprecated_show_diff_q(&revs->diffopt);
+
        setup_diff_pager(&revs->diffopt);
        DIFF_OPT_SET(&revs->diffopt, EXIT_WITH_STATUS);
 
diff --git a/diff.c b/diff.c
index 2d0b5e33f93065172f3a85a22ac8ed643089a53e..78819ba1513acbd726076873bab92a5183f2827b 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -3570,6 +3570,14 @@ static int parse_diff_filter_opt(const char *optarg, struct diff_options *opt)
        return 0;
 }
 
+/* Used only by "diff-files" and "diff --no-index" */
+void handle_deprecated_show_diff_q(struct diff_options *opt)
+{
+       warning("'diff -q' and 'diff-files -q' are deprecated.");
+       warning("Use 'diff --diff-filter=d' instead to ignore deleted filepairs.");
+       parse_diff_filter_opt("d", opt);
+}
+
 int diff_opt_parse(struct diff_options *options, const char **av, int ac)
 {
        const char *arg = av[0];
diff --git a/diff.h b/diff.h
index a36720752f08fc26ca2ada0b2688b726518e13d6..5237d63a71efd2c04354850fb976b254e432a587 100644 (file)
--- a/diff.h
+++ b/diff.h
@@ -341,6 +341,8 @@ extern int parse_rename_score(const char **cp_p);
 
 extern long parse_algorithm_value(const char *value);
 
+extern void handle_deprecated_show_diff_q(struct diff_options *);
+
 extern int print_stat_summary(FILE *fp, int files,
                              int insertions, int deletions);
 extern void setup_diff_pager(struct diff_options *);