This patch adds the -z option to the show-diff command,
primarily for use by scripts.  The information emitted is
similar to that of -q option, but in a more machine readable
form.  Records are terminated with NUL instead of LF, so that
the scripts can deal with pathnames with embedded newlines.

To be applied on top of my previous patch:

    [PATCH] Optionally tell show-diff to show only named files.

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

 show-diff.c |   28 +++++++++++++++++++---------
 1 files changed, 19 insertions(+), 9 deletions(-)

show-diff.c: 0c5fb1a381a6c6689dca3f52d0c66bb591cadb39
--- show-diff.c
+++ show-diff.c 2005-04-16 16:23:40.000000000 -0700
@@ -55,7 +55,7 @@
        }
 }
 
-static const char *show_diff_usage = "show-diff [-s] [-q] [paths...]";
+static const char *show_diff_usage = "show-diff [-s] [-q] [-z] [paths...]";
 
 static int matches_pathspec(struct cache_entry *ce, char **spec, int cnt)
 {
@@ -76,6 +76,7 @@
 {
        int silent = 0;
        int silent_on_nonexisting_files = 0;
+       int machine_readable = 0;
        int entries = read_cache();
        int i;
 
@@ -84,6 +85,9 @@
                        silent_on_nonexisting_files = silent = 1;
                else if (!strcmp(argv[1], "-q"))
                        silent_on_nonexisting_files = 1;
+               else if (!strcmp(argv[1], "-z")) {
+                       machine_readable = 1;
+               }
                else
                        usage(show_diff_usage);
                argv++; argc--;
@@ -99,7 +103,7 @@
        for (i = 0; i < entries; i++) {
                struct stat st;
                struct cache_entry *ce = active_cache[i];
-               int n, changed;
+               int changed;
                unsigned long size;
                char type[20];
                void *new;
@@ -111,18 +115,24 @@
                if (stat(ce->name, &st) < 0) {
                        if (errno == ENOENT && silent_on_nonexisting_files)
                                continue;
-                       printf("%s: %s\n", ce->name, strerror(errno));
-                       if (errno == ENOENT)
-                               show_diff_empty(ce);
+                       if (machine_readable)
+                               printf("X %s%c", ce->name, 0);
+                       else {
+                               printf("%s: %s\n", ce->name, strerror(errno));
+                               if (errno == ENOENT)
+                                       show_diff_empty(ce);
+                       }
                        continue;
                }
                changed = cache_match_stat(ce, &st);
                if (!changed)
                        continue;
-               printf("%s:  ", ce->name);
-               for (n = 0; n < 20; n++)
-                       printf("%02x", ce->sha1[n]);
-               printf("\n");
+               if (!machine_readable)
+                       printf("%s: %s\n", ce->name, sha1_to_hex(ce->sha1));
+               else {
+                       printf("%s %s%c", sha1_to_hex(ce->sha1), ce->name, 0);
+                       continue;
+               }
                fflush(stdout);
                if (silent)
                        continue;

-
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