diff-files: show diffs with stage0 and unmerged stage at the same time.
authorJunio C Hamano <junkio@cox.net>
Wed, 30 Nov 2005 10:16:36 +0000 (02:16 -0800)
committerJunio C Hamano <junkio@cox.net>
Wed, 30 Nov 2005 10:17:51 +0000 (02:17 -0800)
After thinking about it more, I realized that much of the change
I did on top of Linus' version does not make much sense.  This
commit reverts it so that it by default shows diffs with stage0
paths or stage2 paths with working tree; the unmerged stage to
use can be overridden with -1/-2/-3 option (-2 is the default so
essentially is a no-op).

When the index file is unmerged, we are by definition in the
middle of a conflicting merge, and we should show the diff with
stage 2 by default.  More importantly, paths without conflicts
are updated in the working tree and collapsed to stage0 in the
index, so showing diff with stage0 at the same time does not
hurt.  In normal cases, stage0 entries should be in sync with
the working tree files and does not clutter the output.  It even
helps the user to realize that the working tree has local
changes unrelated to the merge and remember to be careful not to
do a "git-commit -a" after resolving the conflicts.

When there is no unmerged entries, giving diff_unmerged_stage a
default value of 2 does not cause any harm, because it would not
be used anyway.  So in all, always showing diff between stage0
paths and unmerged entries from a stage (defaulting to 2) is the
right thing to do, as Linus originally did.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Documentation/git-diff-files.txt
diff-files.c

index b45d1e69da30cae6fad7eec3694c1768774519b8..67f51265e6aeadf85db582fe89c2c5752b36745a 100644 (file)
@@ -26,10 +26,9 @@ include::diff-options.txt[]
        branch" respectively.  With these options, diffs for
        merged entries are not shown.
 +
-The default is to diff against our branch (-2) if there
-is an unmerged path, and show diff for unmerged entries
-otherwise.  The option -0 can be given to force diff for
-unmerged entries even when the index is unmerged.
+The default is to diff against our branch (-2) and the 
+cleanly resolved paths.  The option -0 can be given to
+omit diff output for unmerged entries and just show "Unmerged".
 
 -q::
        Remain silent even on nonexisting files
index bbeeea7988bf487930b42dfc4a50f4f8394c2795..6c0696c34f0af95acbfe06f644f7df7fb1e93509 100644 (file)
@@ -12,7 +12,7 @@ COMMON_DIFF_OPTIONS_HELP;
 
 static struct diff_options diff_options;
 static int silent = 0;
-static int diff_unmerged_stage = -1;
+static int diff_unmerged_stage = 2;
 
 static void show_unmerge(const char *path)
 {
@@ -87,20 +87,6 @@ int main(int argc, const char **argv)
        pathspec = get_pathspec(prefix, argv + 1);
        entries = read_cache();
 
-       if (diff_unmerged_stage < 0) {
-               /* default to "ours" if unmerged index, otherwise 0 */
-               for (i = 0; i < entries; i++) {
-                       struct cache_entry *ce = active_cache[i];
-                       if (ce_stage(ce)) {
-                               diff_unmerged_stage = 2;
-                               break;
-                       }
-               }
-               if (diff_unmerged_stage < 0)
-                       diff_unmerged_stage = 0;
-       }
-
-
        if (diff_setup_done(&diff_options) < 0)
                usage(diff_files_usage);
 
@@ -122,8 +108,7 @@ int main(int argc, const char **argv)
                        continue;
 
                if (ce_stage(ce)) {
-                       if (!diff_unmerged_stage)
-                               show_unmerge(ce->name);
+                       show_unmerge(ce->name);
                        while (i < entries) {
                                struct cache_entry *nce = active_cache[i];
 
@@ -145,8 +130,6 @@ int main(int argc, const char **argv)
                        if (ce_stage(ce) != diff_unmerged_stage)
                                continue;
                }
-               else if (diff_unmerged_stage)
-                       continue;
 
                if (lstat(ce->name, &st) < 0) {
                        if (errno != ENOENT && errno != ENOTDIR) {