All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eli Schwartz <eschwartz@archlinux.org>
To: git@vger.kernel.org
Cc: "René Scharfe" <l.s.r@web.de>
Subject: [PATCH 2/3] pretty: add tag option to %(describe)
Date: Sat, 23 Oct 2021 21:42:55 -0400	[thread overview]
Message-ID: <20211024014256.3569322-3-eschwartz@archlinux.org> (raw)
In-Reply-To: <20211024014256.3569322-1-eschwartz@archlinux.org>

The %(describe) placeholder by default, like `git describe`, only
supports annotated tags. However, some people do use lightweight tags
for releases, and would like to describe those anyway. The command line
tool has an option to support this.

Teach the placeholder to support this as well.

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
---
 Documentation/pretty-formats.txt | 11 ++++++-----
 pretty.c                         | 23 +++++++++++++++++++----
 t/t4205-log-pretty-formats.sh    |  8 ++++++++
 3 files changed, 33 insertions(+), 9 deletions(-)

diff --git a/Documentation/pretty-formats.txt b/Documentation/pretty-formats.txt
index ef6bd420ae..14107ac191 100644
--- a/Documentation/pretty-formats.txt
+++ b/Documentation/pretty-formats.txt
@@ -220,6 +220,7 @@ The placeholders are:
 			  inconsistent when tags are added or removed at
 			  the same time.
 +
+** 'tags[=<BOOL>]': Also consider lightweight tags.
 ** 'match=<pattern>': Only consider tags matching the given
    `glob(7)` pattern, excluding the "refs/tags/" prefix.
 ** 'exclude=<pattern>': Do not consider tags matching the given
@@ -273,11 +274,6 @@ endif::git-rev-list[]
 			  If any option is provided multiple times the
 			  last occurrence wins.
 +
-The boolean options accept an optional value `[=<BOOL>]`. The values
-`true`, `false`, `on`, `off` etc. are all accepted. See the "boolean"
-sub-section in "EXAMPLES" in linkgit:git-config[1]. If a boolean
-option is given with no value, it's enabled.
-+
 ** 'key=<K>': only show trailers with specified key. Matching is done
    case-insensitively and trailing colon is optional. If option is
    given multiple times trailer lines matching any of the keys are
@@ -313,6 +309,11 @@ insert an empty string unless we are traversing reflog entries (e.g., by
 decoration format if `--decorate` was not already provided on the command
 line.
 
+The boolean options accept an optional value `[=<BOOL>]`. The values
+`true`, `false`, `on`, `off` etc. are all accepted. See the "boolean"
+sub-section in "EXAMPLES" in linkgit:git-config[1]. If a boolean
+option is given with no value, it's enabled.
+
 If you add a `+` (plus sign) after '%' of a placeholder, a line-feed
 is inserted immediately before the expansion if and only if the
 placeholder expands to a non-empty string.
diff --git a/pretty.c b/pretty.c
index 9db2c65538..3a41bedf1a 100644
--- a/pretty.c
+++ b/pretty.c
@@ -1216,28 +1216,43 @@ int format_set_trailers_options(struct process_trailer_options *opts,
 
 static size_t parse_describe_args(const char *start, struct strvec *args)
 {
+	const char *options[] = { "tags" };
 	const char *option_arguments[] = { "match", "exclude" };
 	const char *arg = start;
 
 	for (;;) {
 		const char *matched = NULL;
-		const char *argval;
+		const char *argval = NULL;
 		size_t arglen = 0;
+		int optval = 0;
 		int i;
 
 		for (i = 0; i < ARRAY_SIZE(option_arguments); i++) {
 			if (match_placeholder_arg_value(arg, option_arguments[i], &arg,
 							&argval, &arglen)) {
 				matched = option_arguments[i];
+				if (!arglen)
+					return 0;
 				break;
 			}
 		}
+		if (!matched)
+			for (i = 0; i < ARRAY_SIZE(options); i++) {
+				if (match_placeholder_bool_arg(arg, options[i], &arg,
+								&optval)) {
+					matched = options[i];
+					break;
+				}
+			}
 		if (!matched)
 			break;
 
-		if (!arglen)
-			return 0;
-		strvec_pushf(args, "--%s=%.*s", matched, (int)arglen, argval);
+
+		if (argval) {
+			strvec_pushf(args, "--%s=%.*s", matched, (int)arglen, argval);
+		} else if (optval) {
+			strvec_pushf(args, "--%s", matched);
+		}
 	}
 	return arg - start;
 }
diff --git a/t/t4205-log-pretty-formats.sh b/t/t4205-log-pretty-formats.sh
index 5865daa8f8..d4acf8882f 100755
--- a/t/t4205-log-pretty-formats.sh
+++ b/t/t4205-log-pretty-formats.sh
@@ -1002,4 +1002,12 @@ test_expect_success '%(describe:exclude=...) vs git describe --exclude ...' '
 	test_cmp expect actual
 '
 
+test_expect_success '%(describe:tags) vs git describe --tags' '
+	test_when_finished "git tag -d tagname" &&
+	git tag tagname &&
+	git describe --tags >expect &&
+	git log -1 --format="%(describe:tags)" >actual &&
+	test_cmp expect actual
+'
+
 test_done
-- 
2.33.1


  parent reply	other threads:[~2021-10-24  1:51 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-24  1:42 [PATCH 0/3] Add some more options to the pretty-formats Eli Schwartz
2021-10-24  1:42 ` [PATCH 1/3] pretty.c: rename describe options variable to more descriptive name Eli Schwartz
2021-10-24  4:31   ` Junio C Hamano
2021-10-24 15:37     ` Eli Schwartz
2021-10-24  1:42 ` Eli Schwartz [this message]
2021-10-24  4:57   ` [PATCH 2/3] pretty: add tag option to %(describe) Junio C Hamano
2021-10-24 15:38     ` Eli Schwartz
2021-10-24  1:42 ` [PATCH 3/3] pretty: add abbrev " Eli Schwartz
2021-10-24  5:15   ` Junio C Hamano
2021-10-24 15:43     ` Eli Schwartz
2021-10-26  1:34 ` [PATCH v2 0/3] Add some more options to the pretty-formats Eli Schwartz
2021-10-26  1:34   ` [PATCH v2 1/3] pretty.c: rework describe options parsing for better extensibility Eli Schwartz
2021-10-26  5:18     ` Eric Sunshine
2021-10-26 20:05       ` Eli Schwartz
2021-10-26  1:34   ` [PATCH v2 2/3] pretty: add tag option to %(describe) Eli Schwartz
2021-10-26  5:25     ` Eric Sunshine
2021-10-26 20:06       ` Eli Schwartz
2021-10-26  1:34   ` [PATCH v2 3/3] pretty: add abbrev " Eli Schwartz
2021-10-26  5:36     ` Eric Sunshine
2021-10-26 12:06     ` Đoàn Trần Công Danh
2021-10-26 17:28       ` Eric Sunshine
2021-10-26 19:12       ` Eli Schwartz
2021-10-27  8:05         ` Carlo Arenas
2021-11-03 23:20         ` Johannes Schindelin
2021-11-04  9:29           ` Johannes Schindelin
2021-11-07 12:39           ` Eli Schwartz
2021-10-29 18:45   ` [PATCH v3 0/3] Add some more options to the pretty-formats Eli Schwartz
2021-10-29 18:45     ` [PATCH v3 1/3] pretty.c: rework describe options parsing for better extensibility Eli Schwartz
2021-10-29 20:11       ` Junio C Hamano
2021-10-29 21:06         ` Eli Schwartz
2021-10-29 21:34           ` Junio C Hamano
2021-10-29 18:45     ` [PATCH v3 2/3] pretty: add tag option to %(describe) Eli Schwartz
2021-10-29 20:18       ` Junio C Hamano
2021-10-29 21:14         ` Eli Schwartz
2021-10-29 21:46           ` Junio C Hamano
2021-10-29 21:28         ` Junio C Hamano
2021-10-29 21:44           ` Eli Schwartz
2021-10-29 18:45     ` [PATCH v3 3/3] pretty: add abbrev " Eli Schwartz
2021-10-29 18:51       ` Eric Sunshine
2021-10-29 19:04         ` Eli Schwartz
2021-10-31 17:15     ` [PATCH v4 0/3] Add some more options to the pretty-formats Eli Schwartz
2021-10-31 17:15       ` [PATCH v4 1/3] pretty.c: rework describe options parsing for better extensibility Eli Schwartz
2021-10-31 17:15       ` [PATCH v4 2/3] pretty: add tag option to %(describe) Eli Schwartz
2021-10-31 18:07         ` Junio C Hamano
2021-10-31 18:58           ` Eli Schwartz
2021-10-31 17:15       ` [PATCH v4 3/3] pretty: add abbrev " Eli Schwartz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20211024014256.3569322-3-eschwartz@archlinux.org \
    --to=eschwartz@archlinux.org \
    --cc=git@vger.kernel.org \
    --cc=l.s.r@web.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.