Documentation/git-rebase: fix an example
[gitweb.git] / builtin-diff.c
index 4ba4d18f871122e0585ead1d09deb728ff518174..6ed7b6842ec533902427f2d47790d57aa5082365 100644 (file)
@@ -32,7 +32,7 @@ static void stuff_change(struct diff_options *opt,
        struct diff_filespec *one, *two;
 
        if (!is_null_sha1(old_sha1) && !is_null_sha1(new_sha1) &&
-           !hashcmp(old_sha1, new_sha1))
+           !hashcmp(old_sha1, new_sha1) && (old_mode == new_mode))
                return;
 
        if (opt->reverse_diff) {
@@ -222,6 +222,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
        prefix = setup_git_directory_gently(&nongit);
        git_config(git_diff_ui_config);
        init_revisions(&rev, prefix);
+       rev.diffopt.skip_stat_unmatch = 1;
 
        if (!setup_diff_no_index(&rev, argc, argv, nongit, prefix))
                argc = 0;
@@ -233,6 +234,13 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
                        die("diff_setup_done failed");
        }
        rev.diffopt.allow_external = 1;
+       rev.diffopt.recursive = 1;
+
+       /* If the user asked for our exit code then don't start a
+        * pager or we would end up reporting its exit code instead.
+        */
+       if (!rev.diffopt.exit_with_status)
+               setup_pager();
 
        /* Do we have --cached and not have a pending object, then
         * default to HEAD by hand.  Eek.
@@ -337,5 +345,12 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
                                             ent, ents);
        if (rev.diffopt.exit_with_status)
                result = rev.diffopt.has_changes;
+
+       if ((rev.diffopt.output_format & DIFF_FORMAT_PATCH)
+           && (1 < rev.diffopt.skip_stat_unmatch))
+               printf("Warning: %d path%s touched but unmodified. "
+                      "Consider running git-status.\n",
+                      rev.diffopt.skip_stat_unmatch - 1,
+                      rev.diffopt.skip_stat_unmatch == 2 ? "" : "s");
        return result;
 }