aboutsummaryrefslogtreecommitdiff
path: root/diff.c
diff options
context:
space:
mode:
authorAlexandre Julliard <julliard@winehq.org>2007-02-10 15:39:00 +0100
committerJunio C Hamano <junkio@cox.net>2007-02-11 13:08:10 -0800
commite5bfbf9b3ee57292aea95313e8659d26f90f8cc5 (patch)
tree5082b7e448293bd11df07f1476c781c8e26e2db3 /diff.c
parent0d26a64ece4d2692463a7bcb5235b75ee2f35ec0 (diff)
downloadgit-e5bfbf9b3ee57292aea95313e8659d26f90f8cc5.tar.gz
git-e5bfbf9b3ee57292aea95313e8659d26f90f8cc5.tar.xz
diff.c: More logical file name quoting for renames in diffstat.
Quote both file names separately when printing a rename, yielding something like "foo" => "bar" instead of the current "foo => bar" Signed-off-by: Alexandre Julliard <julliard@winehq.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'diff.c')
-rw-r--r--diff.c34
1 files changed, 27 insertions, 7 deletions
diff --git a/diff.c b/diff.c
index 14684a5c8..aaab3095a 100644
--- a/diff.c
+++ b/diff.c
@@ -545,6 +545,24 @@ static char *pprint_rename(const char *a, const char *b)
int pfx_length, sfx_length;
int len_a = strlen(a);
int len_b = strlen(b);
+ int qlen_a = quote_c_style(a, NULL, NULL, 0);
+ int qlen_b = quote_c_style(b, NULL, NULL, 0);
+
+ if (qlen_a || qlen_b) {
+ if (qlen_a) len_a = qlen_a;
+ if (qlen_b) len_b = qlen_b;
+ name = xmalloc( len_a + len_b + 5 );
+ if (qlen_a)
+ quote_c_style(a, name, NULL, 0);
+ else
+ memcpy(name, a, len_a);
+ memcpy(name + len_a, " => ", 4);
+ if (qlen_b)
+ quote_c_style(b, name + len_a + 4, NULL, 0);
+ else
+ memcpy(name + len_a + 4, b, len_b + 1);
+ return name;
+ }
/* Find common prefix */
pfx_length = 0;
@@ -701,12 +719,14 @@ static void show_stats(struct diffstat_t* data, struct diff_options *options)
struct diffstat_file *file = data->files[i];
int change = file->added + file->deleted;
- len = quote_c_style(file->name, NULL, NULL, 0);
- if (len) {
- char *qname = xmalloc(len + 1);
- quote_c_style(file->name, qname, NULL, 0);
- free(file->name);
- file->name = qname;
+ if (!file->is_renamed) { /* renames are already quoted by pprint_rename */
+ len = quote_c_style(file->name, NULL, NULL, 0);
+ if (len) {
+ char *qname = xmalloc(len + 1);
+ quote_c_style(file->name, qname, NULL, 0);
+ free(file->name);
+ file->name = qname;
+ }
}
len = strlen(file->name);
@@ -838,7 +858,7 @@ static void show_numstat(struct diffstat_t* data, struct diff_options *options)
printf("-\t-\t");
else
printf("%d\t%d\t", file->added, file->deleted);
- if (options->line_termination &&
+ if (options->line_termination && !file->is_renamed &&
quote_c_style(file->name, NULL, NULL, 0))
quote_c_style(file->name, NULL, stdout, 0);
else