git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCHv3] git-log --format: Add %B tag with %B(x) option

From
Junio C Hamano <gitster@pobox.com>
Date
Sep 22, 2009, 19:41 UTC
Message-ID
<7vfxaercma.fsf@alter.siamese.dyndns.org>
In-Reply-To
<1253354304-13117-1-git-send-email-heipei@hackvalue.de>
Johannes Gilger <heipei@hackvalue.de> writes:
Show 49 quoted lines
> Since one can simply use spaces to indent any other --pretty field we
> should have an option to do that with the body too.
>
> Also the %B flag strips the trailing newlines, to enable more compact
> display.
>
> Signed-off-by: Johannes Gilger <heipei@hackvalue.de>
> ---
> Changes to PATCHv2:
> - Make %B() strict: Only nonnegative integers are allowed between the brackets, 
>   everything else yields the placemark itself as output to indicate a wrong 
>   argument. This also goes for an empty argument.
>
>  Documentation/pretty-formats.txt |    2 ++
>  pretty.c                         |   29 ++++++++++++++++++++++++-----
>  2 files changed, 26 insertions(+), 5 deletions(-)
>
> diff --git a/Documentation/pretty-formats.txt b/Documentation/pretty-formats.txt
> index 2a845b1..533bc5e 100644
> --- a/Documentation/pretty-formats.txt
> +++ b/Documentation/pretty-formats.txt
> @@ -733,7 +737,20 @@ static size_t format_commit_item(struct strbuf *sb, const char *placeholder,
>  		format_sanitized_subject(sb, msg + c->subject_off);
>  		return 1;
>  	case 'b':	/* body */
> -		strbuf_addstr(sb, msg + c->body_off);
> +		strbuf_addstr(sb, body);
> +		return 1;
> +	case 'B':	/* body without trailing newline */
> +		if (end) {
> +			char *endp = NULL;
> +			int indent = strtol(placeholder + 2, &endp, 10);
> +			if (placeholder + 2 == endp || *endp != ')' || indent < 0)
> +				return 0;
> +			pp_remainder(CMIT_FMT_MEDIUM, &body, sb, indent);
> +			strbuf_rtrim(sb);
> +			return end - placeholder + 1;
> +		}
> +		strbuf_addstr(sb, body);
> +		strbuf_rtrim(sb);
>  		return 1;
>  	}
>  	return 0;	/* unknown placeholder */
> @@ -875,6 +892,8 @@ void pp_remainder(enum cmit_fmt fmt,
>  		}
>  		first = 0;
>  
> +		if (indent < 0)
> +			indent = 0;

I'd move this check to the caller; other than that and some other small style issues I think this round is Ok.

Show 5 quoted lines
>  		strbuf_grow(sb, linelen + indent + 20);
>  		if (indent) {
>  			memset(sb->buf + sb->len, ' ', indent);
> -- 
> 1.6.5.rc1.20.geb7d9
Previous: Johannes GilgerNext: Johannes Gilger
Message 6 of 18 in “git-log --format: Add %B tag with %B(x) option”
  1. git-log --format: Add %B tag with %B(x) optionJohannes Gilger, Sep 17, 2009
  2. Junio C HamanoSep 17, 2009
  3. [PATCHv2] git-log --format: Add %B tag with %B(x) optionJohannes Gilger, Sep 18, 2009
  4. Junio C HamanoSep 18, 2009
  5. [PATCHv3] git-log --format: Add %B tag with %B(x) optionJohannes Gilger, Sep 19, 2009
  6. Junio C HamanoSep 22, 2009
  7. [PATCHv4] git-log --format: Add %B tag with %B(n) optionJohannes Gilger, Sep 22, 2009
  8. 0/3 Add a pretty format to rewrapping/indenting commit messagesJohannes Schindelin, Sep 23, 2009
  9. 1/3 print_wrapped_text(): allow hard newlinesJohannes Schindelin, Sep 23, 2009
  10. 2/3 Add strbuf_add_wrapped_text() to utf8.[ch]Johannes Schindelin, Sep 23, 2009
  11. 3/3 Add "%w" to pretty formats, which rewraps the commit messageJohannes Schindelin, Sep 23, 2009
  12. Johannes GilgerSep 23, 2009
  13. Junio C HamanoSep 23, 2009
  14. Junio C HamanoOct 5, 2009
  15. Linus TorvaldsSep 24, 2009
  16. Johannes SchindelinSep 24, 2009
  17. Johannes SchindelinSep 25, 2009
  18. Junio C HamanoOct 10, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.