When run on unmerged dircache, show-diff compares the working
file with each non-empty stage for that path.  Two out of three
times, this is not very helpful.  This patch makes it report the
unmergedness only once per each path and avoids running the
actual diff.

Upper layer SCMs like Cogito are expected to find out mode/SHA1
for each stage by using "show-files --stage" and run the diff
itself.  This would result in more sensible diffs.

To be applied on top of my previous patches:

    [PATCH] Optionally tell show-diff to show only named files.
    [PATCH] show-diff -z option for machine readable output.
    [PATCH] show-diff shell safety.
    [PATCH] (take 2) Rename confusing variable in show-diff.
    [PATCH] show-diff style fix.

Signed-off-by: Junio C Hamano <[EMAIL PROTECTED]>

 ++show-diff.c |   13 +++++++++++++
 1 files changed, 13 insertions(+)

--- ./show-diff.c       2005-04-16 19:01:28.000000000 -0700
+++ ./++show-diff.c     2005-04-16 18:57:55.000000000 -0700
@@ -167,6 +167,19 @@
                    ! matches_pathspec(ce, argv+1, argc-1))
+               if (ce_stage(ce)) {
+                       if (machine_readable)
+                               printf("U %s%c", ce->name, 0);
+                       else
+                               printf("%s: Unmerged\n",
+                                      ce->name);
+                       while (i < entries &&
+                              !strcmp(ce->name, active_cache[i]->name))
+                               i++;
+                       i--; /* compensate for loop control increments */
+                       continue;
+               }
                if (stat(ce->name, &st) < 0) {
                        if (errno == ENOENT && silent_on_nonexisting_files)

To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to