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

[PATCH 2/4] oneline: print newline after decorations if flag provided

From
John Cai via GitGitGadget <gitgitgadget@gmail.com>
Date
Oct 29, 2021, 21:15 UTC
Message-ID
<54530e1e009f7bbebb3be1c7710f766112a492fb.1635542128.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.1065.git.1635542128.gitgitgadget@gmail.com>
From: John Cai <johncai86@gmail.com>
* log-tree.c: pass in format, oneline, abbrev so format_decorations can
  print a newline with an indentation.
* log-tree.h: adding parameters in header file
* pretty.c: pass in arguments format, oneline to format_decorations call
  but these don't get used in this context
Signed-off-by: John Cai <johncai86@gmail.com>
---
 log-tree.c | 20 ++++++++++++++++----
 log-tree.h |  7 +++++--
 pretty.c   |  4 ++--
 3 files changed, 23 insertions(+), 8 deletions(-)
diff --git a/log-tree.c b/log-tree.c
index 644893fd8cf..d2f1eeeebf5 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -285,6 +285,9 @@ static void show_name(struct strbuf *sb, const struct name_decoration *decoratio
 void format_decorations_extended(struct strbuf *sb,
 			const struct commit *commit,
 			int use_color,
+			int format,
+			int abbrev_len,
+			int newline,
 			const char *prefix,
 			const char *separator,
 			const char *suffix)
@@ -333,11 +336,16 @@ void format_decorations_extended(struct strbuf *sb,
 	strbuf_addstr(sb, color_commit);
 	strbuf_addstr(sb, suffix);
 	strbuf_addstr(sb, color_reset);
+	if ((format == CMIT_FMT_ONELINE) && newline == 1) {
+		strbuf_addstr(sb, "\n");
+		strbuf_addchars(sb, ' ', abbrev_len);
+	}
 }
 
 void show_decorations(struct rev_info *opt, struct commit *commit)
 {
 	struct strbuf sb = STRBUF_INIT;
+	int newline = 0;
 
 	if (opt->sources) {
 		char **slot = revision_sources_peek(opt->sources, commit);
@@ -347,7 +355,11 @@ void show_decorations(struct rev_info *opt, struct commit *commit)
 	}
 	if (!opt->show_decorations)
 		return;
-	format_decorations(&sb, commit, opt->diffopt.use_color);
+
+	if (opt->newlineafter == NEWLINEAFTER_DECORATIONS)
+		newline = 1;
+
+	format_decorations(&sb, commit, opt->diffopt.use_color, opt->commit_format, opt->abbrev, newline);
 	fputs(sb.buf, opt->diffopt.file);
 	strbuf_release(&sb);
 }
@@ -623,6 +635,7 @@ void show_log(struct rev_info *opt)
 	int abbrev_commit = opt->abbrev_commit ? opt->abbrev : the_hash_algo->hexsz;
 	const char *extra_headers = opt->extra_headers;
 	struct pretty_print_context ctx = {0};
+	char hex[GIT_MAX_HEXSZ + 1];
 
 	opt->loginfo = NULL;
 	if (!opt->verbose_header) {
@@ -692,9 +705,8 @@ void show_log(struct rev_info *opt)
 
 		if (!opt->graph)
 			put_revision_mark(opt, commit);
-		fputs(find_unique_abbrev(&commit->object.oid,
-					 abbrev_commit),
-		      opt->diffopt.file);
+		opt->abbrev = find_unique_abbrev_r(hex, &commit->object.oid, abbrev_commit);
+		fputs(hex, opt->diffopt.file);
 		if (opt->print_parents)
 			show_parents(commit, abbrev_commit, opt->diffopt.file);
 		if (opt->children.name)
diff --git a/log-tree.h b/log-tree.h
index e7e4641cf83..a401e659d4c 100644
--- a/log-tree.h
+++ b/log-tree.h
@@ -19,11 +19,14 @@ int log_tree_commit(struct rev_info *, struct commit *);
 void show_log(struct rev_info *opt);
 void format_decorations_extended(struct strbuf *sb, const struct commit *commit,
 			     int use_color,
+			     int format,
+			     int abbrev_len,
+			     int newline,
 			     const char *prefix,
 			     const char *separator,
 			     const char *suffix);
-#define format_decorations(strbuf, commit, color) \
-			     format_decorations_extended((strbuf), (commit), (color), " (", ", ", ")")
+#define format_decorations(strbuf, commit, color, format, abbrev_len, newline) \
+			     format_decorations_extended((strbuf), (commit), (color), (format), (abbrev_len), (newline), " (", ", ", ")")
 void show_decorations(struct rev_info *opt, struct commit *commit);
 void log_write_email_headers(struct rev_info *opt, struct commit *commit,
 			     const char **extra_headers_p,
diff --git a/pretty.c b/pretty.c
index fe95107ae5a..98144deac5c 100644
--- a/pretty.c
+++ b/pretty.c
@@ -1385,10 +1385,10 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
 		strbuf_addstr(sb, get_revision_mark(NULL, commit));
 		return 1;
 	case 'd':
-		format_decorations(sb, commit, c->auto_color);
+		format_decorations(sb, commit, c->auto_color, c->pretty_ctx->fmt, 0, 0);
 		return 1;
 	case 'D':
-		format_decorations_extended(sb, commit, c->auto_color, "", ", ", "");
+		format_decorations_extended(sb, commit, c->auto_color, c->pretty_ctx->fmt, 0, 0, "", ", ", "");
 		return 1;
 	case 'S':		/* tag/branch like --source */
 		if (!(c->pretty_ctx->rev && c->pretty_ctx->rev->sources))
-- 
gitgitgadget
Previous: John Cai via GitGitGadgetNext: John Cai via GitGitGadget
Message 3 of 7 in “Flag to add a newline after decorations for --oneline log output”
  1. 0/4 Flag to add a newline after decorations for --oneline log outputJohn Cai via GitGitGadget, Oct 29, 2021
  2. 1/4 oneline: parse --newlineafter flagJohn Cai via GitGitGadget, Oct 29, 2021
  3. 2/4 oneline: print newline after decorations if flag providedJohn Cai via GitGitGadget, Oct 29, 2021
  4. 3/4 oneline: test for --newlineafter featureJohn Cai via GitGitGadget, Oct 29, 2021
  5. 4/4 doc: add docs for newlineafter flagJohn Cai via GitGitGadget, Oct 29, 2021
  6. Christian CouderNov 12, 2021
  7. John CaiNov 21, 2021

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.