aboutsummaryrefslogtreecommitdiff
path: root/diff.c
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2006-09-26 18:59:41 -0700
committerJunio C Hamano <junkio@cox.net>2006-09-27 02:57:37 -0700
commit785f743276991567a36420f069c228e4dc9d0df3 (patch)
treea7e26891af16e04105ba0d86986f207533173568 /diff.c
parenta2540023dcf833ca02d87c28052e8b7135d56b60 (diff)
downloadgit-785f743276991567a36420f069c228e4dc9d0df3.tar.gz
git-785f743276991567a36420f069c228e4dc9d0df3.tar.xz
diff --stat: color output.
Under --color option, diffstat shows '+' and '-' in the graph the same color as added and deleted lines. Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'diff.c')
-rw-r--r--diff.c29
1 files changed, 19 insertions, 10 deletions
diff --git a/diff.c b/diff.c
index 8d299f476..3fd7a5220 100644
--- a/diff.c
+++ b/diff.c
@@ -555,17 +555,20 @@ static int scale_linear(int it, int width, int max_change)
return (it * width * 2 + max_change) / (max_change * 2);
}
-static void show_name(const char *prefix, const char *name, int len)
+static void show_name(const char *prefix, const char *name, int len,
+ const char *reset, const char *set)
{
- printf(" %s%-*s |", prefix, len, name);
+ printf(" %s%s%-*s%s |", set, prefix, len, name, reset);
}
-static void show_graph(char ch, int cnt)
+static void show_graph(char ch, int cnt, const char *set, const char *reset)
{
if (cnt <= 0)
return;
+ printf("%s", set);
while (cnt--)
putchar(ch);
+ printf("%s", reset);
}
static void show_stats(struct diffstat_t* data, struct diff_options *options)
@@ -574,6 +577,7 @@ static void show_stats(struct diffstat_t* data, struct diff_options *options)
int max_change = 0, max_len = 0;
int total_files = data->nr;
int width, name_width;
+ const char *reset, *set, *add_c, *del_c;
if (data->nr == 0)
return;
@@ -592,6 +596,11 @@ static void show_stats(struct diffstat_t* data, struct diff_options *options)
}
/* Find the longest filename and max number of changes */
+ reset = diff_get_color(options->color_diff, DIFF_RESET);
+ set = diff_get_color(options->color_diff, DIFF_PLAIN);
+ add_c = diff_get_color(options->color_diff, DIFF_FILE_NEW);
+ del_c = diff_get_color(options->color_diff, DIFF_FILE_OLD);
+
for (i = 0; i < data->nr; i++) {
struct diffstat_file *file = data->files[i];
int change = file->added + file->deleted;
@@ -650,12 +659,12 @@ static void show_stats(struct diffstat_t* data, struct diff_options *options)
}
if (data->files[i]->is_binary) {
- show_name(prefix, name, len);
+ show_name(prefix, name, len, reset, set);
printf(" Bin\n");
goto free_diffstat_file;
}
else if (data->files[i]->is_unmerged) {
- show_name(prefix, name, len);
+ show_name(prefix, name, len, reset, set);
printf(" Unmerged\n");
goto free_diffstat_file;
}
@@ -679,18 +688,18 @@ static void show_stats(struct diffstat_t* data, struct diff_options *options)
add = scale_linear(add, width, max_change);
del = total - add;
}
- show_name(prefix, name, len);
+ show_name(prefix, name, len, reset, set);
printf("%5d ", added + deleted);
- show_graph('+', add);
- show_graph('-', del);
+ show_graph('+', add, add_c, reset);
+ show_graph('-', del, del_c, reset);
putchar('\n');
free_diffstat_file:
free(data->files[i]->name);
free(data->files[i]);
}
free(data->files);
- printf(" %d files changed, %d insertions(+), %d deletions(-)\n",
- total_files, adds, dels);
+ printf("%s %d files changed, %d insertions(+), %d deletions(-)%s\n",
+ set, total_files, adds, dels, reset);
}
struct checkdiff_t {