diff options
author | Junio C Hamano <junkio@cox.net> | 2005-04-16 21:29:45 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 21:29:45 -0700 |
commit | d94c6128e6df3161b111e7af73a7ef782eb4b63e (patch) | |
tree | cc2df043a780ba35f1ad458d4710a4ea42fc9c17 | |
parent | [PATCH] Optionally tell show-diff to show only named files (diff) | |
download | tgif-d94c6128e6df3161b111e7af73a7ef782eb4b63e.tar.xz |
[PATCH] show-diff -z option for machine readable output.
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.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | show-diff.c | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/show-diff.c b/show-diff.c index f9e8c12f90..4221d3ae4c 100644 --- a/show-diff.c +++ b/show-diff.c @@ -55,7 +55,7 @@ static void show_diff_empty(struct cache_entry *ce) } } -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 main(int argc, char **argv) { int silent = 0; int silent_on_nonexisting_files = 0; + int machine_readable = 0; int entries = read_cache(); int i; @@ -84,6 +85,9 @@ int main(int argc, char **argv) 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 @@ int main(int argc, char **argv) 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 @@ int main(int argc, char **argv) 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; |