From: Junio C Hamano <junkio@cox.net>
To: Linus Torvalds <torvalds@osdl.org>
Cc: git@vger.kernel.org
Subject: [PATCH] show-diff -z option for machine readable output.
Date: Sat, 16 Apr 2005 16:30:39 -0700 [thread overview]
Message-ID: <7vr7ha47vk.fsf@assigned-by-dhcp.cox.net> (raw)
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 <junkio@cox.net>
---
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;
reply other threads:[~2005-04-16 23:27 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7vr7ha47vk.fsf@assigned-by-dhcp.cox.net \
--to=junkio@cox.net \
--cc=git@vger.kernel.org \
--cc=torvalds@osdl.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox