Git development
 help / color / mirror / Atom feed
From: Junio C Hamano <junkio@cox.net>
To: Linus Torvalds <torvalds@osdl.org>
Cc: git@vger.kernel.org
Subject: [PATCH 3/6] show-diff.c: simplify show_diff_empty.
Date: Mon, 18 Apr 2005 13:34:42 -0700	[thread overview]
Message-ID: <7vmzrvu8m5.fsf@assigned-by-dhcp.cox.net> (raw)

[PATCH 3/6] show-diff.c: simplify show_diff_empty.

This patch removes the custom diff generation code from the
show_diff_empty() function.  Instead, just use show_differences().

This reduces the code size; but more importantly, it is needed for
the later patch to give diff options.

To be applied on top of:

    [PATCH 1/6] show-diff.c: clean up private buffer use.
    [PATCH 2/6] show-diff.c: check unreadbale blob.

Signed-off-by: Junio C Hamano <junkio@cox.net>
---

 show-diff.c |   44 ++++++++++----------------------------------
 1 files changed, 10 insertions(+), 34 deletions(-)

--- a/show-diff.c
+++ b/show-diff.c
@@ -46,19 +46,23 @@ static char *sq_expand(char *src)
 	return buf;
 }
 
-static void show_differences(char *name, void *old_contents,
+static void show_differences(char *name, char *label, void *old_contents,
 			     unsigned long long old_size)
 {
 	FILE *f;
 	char *name_sq = sq_expand(name);
-	int cmd_size = strlen(name_sq) * 2 + strlen(diff_cmd);
+	char *label_sq = (name != label) ? sq_expand(label) : name_sq;
+	int cmd_size = strlen(name_sq) + strlen(label_sq) + strlen(diff_cmd);
 	char *cmd = malloc(cmd_size);
 
-	snprintf(cmd, cmd_size, diff_cmd, name_sq, name_sq);
+	fflush(stdout);
+	snprintf(cmd, cmd_size, diff_cmd, label_sq, name_sq);
 	f = popen(cmd, "w");
 	if (old_size)
 		fwrite(old_contents, old_size, 1, f);
 	pclose(f);
+	if (label_sq != name_sq)
+		free(label_sq);
 	free(name_sq);
 	free(cmd);
 }
@@ -67,8 +71,7 @@ static void show_diff_empty(struct cache
 {
 	char *old;
 	unsigned long int size;
-	int lines=0;
-	unsigned char type[20], *p, *end;
+	unsigned char type[20];
 
 	old = read_sha1_file(ce->sha1, type, &size);
 	if (! old) {
@@ -76,33 +79,7 @@ static void show_diff_empty(struct cache
 		      sha1_to_hex(ce->sha1));
 		return;
 	}
-	if (size > 0) {
-		int startline = 1;
-		int c = 0;
-
-		printf("--- %s\n", ce->name);
-		printf("+++ /dev/null\n");
-		p = old;
-		end = old + size;
-		while (p < end)
-			if (*p++ == '\n')
-				lines ++;
-		printf("@@ -1,%d +0,0 @@\n", lines);
-		p = old;
-		while (p < end) {
-			c = *p++;
-			if (startline) {
-				putchar('-');
-				startline = 0;
-			}
-			putchar(c);
-			if (c == '\n')
-				startline = 1;
-		}
-		if (c!='\n')
-			printf("\n");
-		fflush(stdout);
-	}
+	show_differences("/dev/null", ce->name, old, size);
 }
 
 static const char *show_diff_usage = "show-diff [-q] [-s] [-z] [paths...]";
@@ -195,7 +172,6 @@ int main(int argc, char **argv)
 			printf("%s %s%c", sha1_to_hex(ce->sha1), ce->name, 0);
 			continue;
 		}
-		fflush(stdout);
 		if (silent)
 			continue;
 
@@ -204,7 +180,7 @@ int main(int argc, char **argv)
 			error("unable to read blob object for %s (%s)",
 			      ce->name, sha1_to_hex(ce->sha1));
 		else
-			show_differences(ce->name, old, size);
+			show_differences(ce->name, ce->name, old, size);
 		free(old);
 	}
 	return 0;


                 reply	other threads:[~2005-04-18 20:31 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=7vmzrvu8m5.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