{"thread":{"id":"5712","subject":"[PATCH 2/3] diff --stat: color output.","startedAt":"2006-09-27T02:40:49Z","lastAt":"2006-09-27T02:40:49Z","messageCount":1,"participants":["Junio C Hamano"],"isPatch":true,"patchVersion":1,"patchTotal":3},"messages":[{"id":"27736","messageId":"7vlko6jaku.fsf@assigned-by-dhcp.cox.net","threadId":"5712","inReplyTo":null,"subject":"[PATCH 2/3] diff --stat: color output.","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2006-09-27T02:40:49Z","receivedAt":"2006-09-27T02:40:49Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Under --color option, diffstat shows '+' and '-' in the graph\nthe same color as added and deleted lines.\n\nSigned-off-by: Junio C Hamano <junkio@cox.net>\n---\n\n * This is unsolicited but while I was touching the vicinity of\n   the code I thought some people might find it cool.\n\n diff.c |   29 +++++++++++++++++++----------\n 1 files changed, 19 insertions(+), 10 deletions(-)\n\ndiff --git a/diff.c b/diff.c\nindex 6101365..13aac2d 100644\n--- a/diff.c\n+++ b/diff.c\n@@ -555,17 +555,20 @@ static int scale_linear(int it, int widt\n \treturn (it * width * 2 + max_change) / (max_change * 2);\n }\n \n-static void show_name(const char *prefix, const char *name, int len)\n+static void show_name(const char *prefix, const char *name, int len,\n+\t\t      const char *reset, const char *set)\n {\n-\tprintf(\" %s%-*s |\", prefix, len, name);\n+\tprintf(\" %s%s%-*s%s |\", set, prefix, len, name, reset);\n }\n \n-static void show_graph(char ch, int cnt)\n+static void show_graph(char ch, int cnt, const char *set, const char *reset)\n {\n \tif (!cnt)\n \t\treturn;\n+\tprintf(\"%s\", set);\n \twhile (cnt--)\n \t\tputchar(ch);\n+\tprintf(\"%s\", reset);\n }\n \n static void show_stats(struct diffstat_t* data, struct diff_options *options)\n@@ -574,6 +577,7 @@ static void show_stats(struct diffstat_t\n \tint max_change = 0, max_len = 0;\n \tint total_files = data->nr;\n \tint width, name_width;\n+\tconst char *reset, *set, *add_c, *del_c;\n \n \tif (data->nr == 0)\n \t\treturn;\n@@ -592,6 +596,11 @@ static void show_stats(struct diffstat_t\n \t}\n \n \t/* Find the longest filename and max number of changes */\n+\treset = diff_get_color(options->color_diff, DIFF_RESET);\n+\tset = diff_get_color(options->color_diff, DIFF_PLAIN);\n+\tadd_c = diff_get_color(options->color_diff, DIFF_FILE_NEW);\n+\tdel_c = diff_get_color(options->color_diff, DIFF_FILE_OLD);\n+\n \tfor (i = 0; i < data->nr; i++) {\n \t\tstruct diffstat_file *file = data->files[i];\n \t\tint change = file->added + file->deleted;\n@@ -649,12 +658,12 @@ static void show_stats(struct diffstat_t\n \t\t}\n \n \t\tif (data->files[i]->is_binary) {\n-\t\t\tshow_name(prefix, name, len);\n+\t\t\tshow_name(prefix, name, len, reset, set);\n \t\t\tprintf(\"  Bin\\n\");\n \t\t\tgoto free_diffstat_file;\n \t\t}\n \t\telse if (data->files[i]->is_unmerged) {\n-\t\t\tshow_name(prefix, name, len);\n+\t\t\tshow_name(prefix, name, len, reset, set);\n \t\t\tprintf(\"  Unmerged\\n\");\n \t\t\tgoto free_diffstat_file;\n \t\t}\n@@ -680,18 +689,18 @@ static void show_stats(struct diffstat_t\n \t\t\tadd = scale_linear(add, width, max_change);\n \t\t\tdel = total - add;\n \t\t}\n-\t\tshow_name(prefix, name, len);\n+\t\tshow_name(prefix, name, len, reset, set);\n \t\tprintf(\"%5d \", added + deleted);\n-\t\tshow_graph('+', add);\n-\t\tshow_graph('-', del);\n+\t\tshow_graph('+', add, add_c, reset);\n+\t\tshow_graph('-', del, del_c, reset);\n \t\tputchar('\\n');\n \tfree_diffstat_file:\n \t\tfree(data->files[i]->name);\n \t\tfree(data->files[i]);\n \t}\n \tfree(data->files);\n-\tprintf(\" %d files changed, %d insertions(+), %d deletions(-)\\n\",\n-\t       total_files, adds, dels);\n+\tprintf(\"%s %d files changed, %d insertions(+), %d deletions(-)%s\\n\",\n+\t       set, total_files, adds, dels, reset);\n }\n \n struct checkdiff_t {\n-- \n1.4.2.1.gf80a\n"}]}