Re: [PATCH] Add color.diff.{header,message} formats

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



  Hmmm it seems this patch has been somehow lost somewhere, is there
anything wrong with it ?

On Mon, May 05, 2008 at 09:38:36AM +0000, Pierre Habouzit wrote:
> The goal is to be able to read git log -p more easily, and commit messages
> tends to meld within the diff. Now it's possible to set e.g.
> color.diff.message to 'bold' and read them more easily.
> 
> Defaults for those two colors are set to normal color to match previous
> behavior.
> 
> Signed-off-by: Pierre Habouzit <madcoder@xxxxxxxxxx>
> ---
>  builtin-branch.c      |    2 +-
>  builtin-checkout.c    |    2 +-
>  builtin-log.c         |    8 ++++----
>  builtin-rev-list.c    |    2 +-
>  builtin-show-branch.c |    2 +-
>  commit.h              |    8 +++++---
>  diff.c                |    6 ++++++
>  diff.h                |    2 ++
>  log-tree.c            |    6 +++---
>  pretty.c              |   43 ++++++++++++++++++++++++++++++-------------
>  10 files changed, 54 insertions(+), 27 deletions(-)
> 
> diff --git a/builtin-branch.c b/builtin-branch.c
> index 19c508a..c2f4227 100644
> --- a/builtin-branch.c
> +++ b/builtin-branch.c
> @@ -315,7 +315,7 @@ static void print_ref_item(struct ref_item *item, int maxwidth, int verbose,
>  
>  		commit = lookup_commit(item->sha1);
>  		if (commit && !parse_commit(commit)) {
> -			pretty_print_commit(CMIT_FMT_ONELINE, commit,
> +			pretty_print_commit(CMIT_FMT_ONELINE, NULL, commit,
>  					    &subject, 0, NULL, NULL, 0, 0);
>  			sub = subject.buf;
>  		}
> diff --git a/builtin-checkout.c b/builtin-checkout.c
> index 28722aa..b89851d 100644
> --- a/builtin-checkout.c
> +++ b/builtin-checkout.c
> @@ -142,7 +142,7 @@ static void describe_detached_head(char *msg, struct commit *commit)
>  	struct strbuf sb;
>  	strbuf_init(&sb, 0);
>  	parse_commit(commit);
> -	pretty_print_commit(CMIT_FMT_ONELINE, commit, &sb, 0, "", "", 0, 0);
> +	pretty_print_commit(CMIT_FMT_ONELINE, NULL, commit, &sb, 0, "", "", 0, 0);
>  	fprintf(stderr, "%s %s... %s\n", msg,
>  		find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV), sb.buf);
>  	strbuf_release(&sb);
> diff --git a/builtin-log.c b/builtin-log.c
> index 5e9c256..9efb3ad 100644
> --- a/builtin-log.c
> +++ b/builtin-log.c
> @@ -693,11 +693,11 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,
>  
>  	msg = body;
>  	strbuf_init(&sb, 0);
> -	pp_user_info(NULL, CMIT_FMT_EMAIL, &sb, committer, DATE_RFC2822,
> +	pp_user_info(NULL, CMIT_FMT_EMAIL, &sb, "", committer, DATE_RFC2822,
>  		     encoding);
>  	pp_title_line(CMIT_FMT_EMAIL, &msg, &sb, subject_start, extra_headers,
>  		      encoding, need_8bit_cte);
> -	pp_remainder(CMIT_FMT_EMAIL, &msg, &sb, 0);
> +	pp_remainder(CMIT_FMT_EMAIL, &msg, &sb, "", 0);
>  	printf("%s\n", sb.buf);
>  
>  	strbuf_release(&sb);
> @@ -1160,8 +1160,8 @@ int cmd_cherry(int argc, const char **argv, const char *prefix)
>  		if (verbose) {
>  			struct strbuf buf;
>  			strbuf_init(&buf, 0);
> -			pretty_print_commit(CMIT_FMT_ONELINE, commit,
> -			                    &buf, 0, NULL, NULL, 0, 0);
> +			pretty_print_commit(CMIT_FMT_ONELINE, &revs.diffopt,
> +			                    commit, &buf, 0, NULL, NULL, 0, 0);
>  			printf("%c %s %s\n", sign,
>  			       sha1_to_hex(commit->object.sha1), buf.buf);
>  			strbuf_release(&buf);
> diff --git a/builtin-rev-list.c b/builtin-rev-list.c
> index 9199b32..240fc8d 100644
> --- a/builtin-rev-list.c
> +++ b/builtin-rev-list.c
> @@ -103,7 +103,7 @@ static void show_commit(struct commit *commit)
>  	if (REV_DIFF_TST(&revs, VERBOSE_HEADER) && commit->buffer) {
>  		struct strbuf buf;
>  		strbuf_init(&buf, 0);
> -		pretty_print_commit(revs.commit_format, commit,
> +		pretty_print_commit(revs.commit_format, &revs.diffopt, commit,
>  				    &buf, revs.abbrev, NULL, NULL,
>  				    revs.date_mode, 0);
>  		if (buf.len)
> diff --git a/builtin-show-branch.c b/builtin-show-branch.c
> index 019abd3..39a8b04 100644
> --- a/builtin-show-branch.c
> +++ b/builtin-show-branch.c
> @@ -265,7 +265,7 @@ static void show_one_commit(struct commit *commit, int no_name)
>  
>  	strbuf_init(&pretty, 0);
>  	if (commit->object.parsed) {
> -		pretty_print_commit(CMIT_FMT_ONELINE, commit,
> +		pretty_print_commit(CMIT_FMT_ONELINE, NULL, commit,
>  				    &pretty, 0, NULL, NULL, 0, 0);
>  		pretty_str = pretty.buf;
>  	}
> diff --git a/commit.h b/commit.h
> index 2d94d41..6175e0f 100644
> --- a/commit.h
> +++ b/commit.h
> @@ -5,6 +5,7 @@
>  #include "tree.h"
>  #include "strbuf.h"
>  #include "decorate.h"
> +#include "diff.h"
>  
>  struct commit_list {
>  	struct commit *item;
> @@ -67,13 +68,13 @@ struct rev_info; /* in revision.h, it circularly uses enum cmit_fmt */
>  extern void get_commit_format(const char *arg, struct rev_info *);
>  extern void format_commit_message(const struct commit *commit,
>                                    const void *format, struct strbuf *sb);
> -extern void pretty_print_commit(enum cmit_fmt fmt, const struct commit*,
> -                                struct strbuf *,
> +extern void pretty_print_commit(enum cmit_fmt fmt, const struct diff_options *dopt,
> +                                const struct commit*, struct strbuf *,
>                                  int abbrev, const char *subject,
>                                  const char *after_subject, enum date_mode,
>  				int need_8bit_cte);
>  void pp_user_info(const char *what, enum cmit_fmt fmt, struct strbuf *sb,
> -		   const char *line, enum date_mode dmode,
> +		   const char *color, const char *line, enum date_mode dmode,
>  		   const char *encoding);
>  void pp_title_line(enum cmit_fmt fmt,
>  		   const char **msg_p,
> @@ -85,6 +86,7 @@ void pp_title_line(enum cmit_fmt fmt,
>  void pp_remainder(enum cmit_fmt fmt,
>  		  const char **msg_p,
>  		  struct strbuf *sb,
> +		  const char *color,
>  		  int indent);
>  
>  
> diff --git a/diff.c b/diff.c
> index 29c168d..787c91b 100644
> --- a/diff.c
> +++ b/diff.c
> @@ -33,6 +33,8 @@ static char diff_colors[][COLOR_MAXLEN] = {
>  	"\033[32m",	/* NEW (green) */
>  	"\033[33m",	/* COMMIT (yellow) */
>  	"\033[41m",	/* WHITESPACE (red background) */
> +	"",	        /* HEADER (normal) */
> +	"",         /* COMMIT_MSG (normal) */
>  };
>  
>  static int parse_diff_color_slot(const char *var, int ofs)
> @@ -51,6 +53,10 @@ static int parse_diff_color_slot(const char *var, int ofs)
>  		return DIFF_COMMIT;
>  	if (!strcasecmp(var+ofs, "whitespace"))
>  		return DIFF_WHITESPACE;
> +	if (!strcasecmp(var+ofs, "header"))
> +		return DIFF_HEADER;
> +	if (!strcasecmp(var+ofs, "message"))
> +		return DIFF_COMMIT_MSG;
>  	die("bad config variable '%s'", var);
>  }
>  
> diff --git a/diff.h b/diff.h
> index 1fc1939..dba4d5e 100644
> --- a/diff.h
> +++ b/diff.h
> @@ -192,6 +192,8 @@ enum color_diff {
>  	DIFF_FILE_NEW = 5,
>  	DIFF_COMMIT = 6,
>  	DIFF_WHITESPACE = 7,
> +	DIFF_HEADER = 8,
> +	DIFF_COMMIT_MSG = 9,
>  };
>  const char *diff_get_color(int diff_use_color, enum color_diff ix);
>  #define diff_get_color_opt(o, ix) \
> diff --git a/log-tree.c b/log-tree.c
> index 2b005a2..3bcb113 100644
> --- a/log-tree.c
> +++ b/log-tree.c
> @@ -308,9 +308,9 @@ void show_log(struct rev_info *opt, const char *sep)
>  	strbuf_init(&msgbuf, 0);
>  	if (need_8bit_cte >= 0)
>  		need_8bit_cte = has_non_ascii(opt->add_signoff);
> -	pretty_print_commit(opt->commit_format, commit, &msgbuf,
> -			    abbrev, subject, extra_headers, opt->date_mode,
> -			    need_8bit_cte);
> +	pretty_print_commit(opt->commit_format, &opt->diffopt, commit,
> +	                    &msgbuf, abbrev, subject, extra_headers,
> +	                    opt->date_mode, need_8bit_cte);
>  
>  	if (opt->add_signoff)
>  		append_signoff(&msgbuf, opt->add_signoff);
> diff --git a/pretty.c b/pretty.c
> index 30c2699..6a67cf4 100644
> --- a/pretty.c
> +++ b/pretty.c
> @@ -119,7 +119,7 @@ needquote:
>  }
>  
>  void pp_user_info(const char *what, enum cmit_fmt fmt, struct strbuf *sb,
> -		  const char *line, enum date_mode dmode,
> +		  const char *color, const char *line, enum date_mode dmode,
>  		  const char *encoding)
>  {
>  	char *date;
> @@ -146,24 +146,25 @@ void pp_user_info(const char *what, enum cmit_fmt fmt, struct strbuf *sb,
>  			name_tail--;
>  		display_name_length = name_tail - line;
>  		filler = "";
> +		strbuf_addstr(sb, color);
>  		strbuf_addstr(sb, "From: ");
>  		add_rfc2047(sb, line, display_name_length, encoding);
>  		strbuf_add(sb, name_tail, namelen - display_name_length);
>  		strbuf_addch(sb, '\n');
>  	} else {
> -		strbuf_addf(sb, "%s: %.*s%.*s\n", what,
> +		strbuf_addf(sb, "%s%s: %.*s%.*s\n", color, what,
>  			      (fmt == CMIT_FMT_FULLER) ? 4 : 0,
>  			      filler, namelen, line);
>  	}
>  	switch (fmt) {
>  	case CMIT_FMT_MEDIUM:
> -		strbuf_addf(sb, "Date:   %s\n", show_date(time, tz, dmode));
> +		strbuf_addf(sb, "%sDate:   %s\n", color, show_date(time, tz, dmode));
>  		break;
>  	case CMIT_FMT_EMAIL:
> -		strbuf_addf(sb, "Date: %s\n", show_date(time, tz, DATE_RFC2822));
> +		strbuf_addf(sb, "%sDate: %s\n", color, show_date(time, tz, DATE_RFC2822));
>  		break;
>  	case CMIT_FMT_FULLER:
> -		strbuf_addf(sb, "%sDate: %s\n", what, show_date(time, tz, dmode));
> +		strbuf_addf(sb, "%s%sDate: %s\n", color, what, show_date(time, tz, dmode));
>  		break;
>  	default:
>  		/* notin' */
> @@ -590,6 +591,7 @@ void format_commit_message(const struct commit *commit,
>  static void pp_header(enum cmit_fmt fmt,
>  		      int abbrev,
>  		      enum date_mode dmode,
> +		      const char *color,
>  		      const char *encoding,
>  		      const struct commit *commit,
>  		      const char **msg_p,
> @@ -610,6 +612,7 @@ static void pp_header(enum cmit_fmt fmt,
>  			return;
>  
>  		if (fmt == CMIT_FMT_RAW) {
> +			strbuf_addstr(sb, color);
>  			strbuf_add(sb, line, linelen);
>  			continue;
>  		}
> @@ -629,6 +632,7 @@ static void pp_header(enum cmit_fmt fmt,
>  				;
>  			/* with enough slop */
>  			strbuf_grow(sb, num * 50 + 20);
> +			strbuf_addstr(sb, color);
>  			add_merge_info(fmt, sb, commit, abbrev);
>  			parents_shown = 1;
>  		}
> @@ -640,12 +644,12 @@ static void pp_header(enum cmit_fmt fmt,
>  		 */
>  		if (!memcmp(line, "author ", 7)) {
>  			strbuf_grow(sb, linelen + 80);
> -			pp_user_info("Author", fmt, sb, line + 7, dmode, encoding);
> +			pp_user_info("Author", fmt, sb, color, line + 7, dmode, encoding);
>  		}
>  		if (!memcmp(line, "committer ", 10) &&
>  		    (fmt == CMIT_FMT_FULL || fmt == CMIT_FMT_FULLER)) {
>  			strbuf_grow(sb, linelen + 80);
> -			pp_user_info("Commit", fmt, sb, line + 10, dmode, encoding);
> +			pp_user_info("Commit", fmt, sb, color, line + 10, dmode, encoding);
>  		}
>  	}
>  }
> @@ -708,6 +712,7 @@ void pp_title_line(enum cmit_fmt fmt,
>  void pp_remainder(enum cmit_fmt fmt,
>  		  const char **msg_p,
>  		  struct strbuf *sb,
> +		  const char *color,
>  		  int indent)
>  {
>  	int first = 1;
> @@ -728,6 +733,7 @@ void pp_remainder(enum cmit_fmt fmt,
>  		first = 0;
>  
>  		strbuf_grow(sb, linelen + indent + 20);
> +		strbuf_addstr(sb, color);
>  		if (indent) {
>  			memset(sb->buf + sb->len, ' ', indent);
>  			strbuf_setlen(sb, sb->len + indent);
> @@ -737,7 +743,8 @@ void pp_remainder(enum cmit_fmt fmt,
>  	}
>  }
>  
> -void pretty_print_commit(enum cmit_fmt fmt, const struct commit *commit,
> +void pretty_print_commit(enum cmit_fmt fmt,
> +			 const struct diff_options *dopt, const struct commit *commit,
>  			 struct strbuf *sb, int abbrev,
>  			 const char *subject, const char *after_subject,
>  			 enum date_mode dmode, int need_8bit_cte)
> @@ -747,6 +754,9 @@ void pretty_print_commit(enum cmit_fmt fmt, const struct commit *commit,
>  	const char *msg = commit->buffer;
>  	char *reencoded;
>  	const char *encoding;
> +	const char *rstcol = dopt ? diff_get_color_opt(dopt, DIFF_RESET) : "";
> +	const char *hdrcol = dopt ? diff_get_color_opt(dopt, DIFF_HEADER) : "";
> +	const char *msgcol = dopt ? diff_get_color_opt(dopt, DIFF_COMMIT_MSG) : "";
>  
>  	if (fmt == CMIT_FMT_USERFORMAT) {
>  		format_commit_message(commit, user_format, sb);
> @@ -789,8 +799,9 @@ void pretty_print_commit(enum cmit_fmt fmt, const struct commit *commit,
>  		}
>  	}
>  
> -	pp_header(fmt, abbrev, dmode, encoding, commit, &msg, sb);
> +	pp_header(fmt, abbrev, dmode, hdrcol, encoding, commit, &msg, sb);
>  	if (fmt != CMIT_FMT_ONELINE && !subject) {
> +		strbuf_addstr(sb, rstcol);
>  		strbuf_addch(sb, '\n');
>  	}
>  
> @@ -811,20 +822,26 @@ void pretty_print_commit(enum cmit_fmt fmt, const struct commit *commit,
>  			      after_subject, encoding, need_8bit_cte);
>  
>  	beginning_of_body = sb->len;
> -	if (fmt != CMIT_FMT_ONELINE)
> -		pp_remainder(fmt, &msg, sb, indent);
> +	if (fmt != CMIT_FMT_ONELINE) {
> +		pp_remainder(fmt, &msg, sb, msgcol, indent);
> +		strbuf_addstr(sb, rstcol);
> +	}
>  	strbuf_rtrim(sb);
>  
>  	/* Make sure there is an EOLN for the non-oneline case */
> -	if (fmt != CMIT_FMT_ONELINE)
> +	if (fmt != CMIT_FMT_ONELINE) {
> +		strbuf_addstr(sb, rstcol);
>  		strbuf_addch(sb, '\n');
> +	}
>  
>  	/*
>  	 * The caller may append additional body text in e-mail
>  	 * format.  Make sure we did not strip the blank line
>  	 * between the header and the body.
>  	 */
> -	if (fmt == CMIT_FMT_EMAIL && sb->len <= beginning_of_body)
> +	if (fmt == CMIT_FMT_EMAIL && sb->len <= beginning_of_body) {
> +		strbuf_addstr(sb, rstcol);
>  		strbuf_addch(sb, '\n');
> +	}
>  	free(reencoded);
>  }
> -- 
> 1.5.5.1.224.g993e4.dirty
> 
> --
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

-- 
·O·  Pierre Habouzit
··O                                                madcoder@xxxxxxxxxx
OOO                                                http://www.madism.org

Attachment: pgpk9lJI811yW.pgp
Description: PGP signature


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux