From patchwork Sun Oct 24 01:42:54 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eli Schwartz X-Patchwork-Id: 12579957 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C3563C433EF for ; Sun, 24 Oct 2021 01:51:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9D8DE60F48 for ; Sun, 24 Oct 2021 01:51:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231290AbhJXBxb (ORCPT ); Sat, 23 Oct 2021 21:53:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36198 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229767AbhJXBx3 (ORCPT ); Sat, 23 Oct 2021 21:53:29 -0400 X-Greylist: delayed 477 seconds by postgrey-1.37 at lindbergh.monkeyblade.net; Sat, 23 Oct 2021 18:51:09 PDT Received: from mail.archlinux.org (mail.archlinux.org [IPv6:2a01:4f9:c010:3052::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 58AFFC061764 for ; Sat, 23 Oct 2021 18:51:07 -0700 (PDT) From: Eli Schwartz DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=archlinux.org; s=dkim-rsa; t=1635039787; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=lPGLKZsQwrMnmPymYt5VqYX/5Jxz0RfNCkZHHuTf7Yc=; b=BbJlsLuPSKDlAth7qFq/1cqjjD1/ku68BelWvT9OLIAFCrcsvasaCm9EfZG3YWS+ooOgCH kFd05qwMLZENQ+cI/rwogzBJhQNU4me9ESnHlUlQcTBc6eBQxZAfHGZgSnOgboNShWaAS6 r+g4Vn3tPz4+GFLVRAKojiWP/6cNlBqSIVCejh2HM2YKJsWRygRon33CkFb4AZUhU2X36C 6cFpRBqFEM78fBOkLnESU5AFdKs1xXewJmB9izqPjvaMILYavRS0mdocO0eDibDVcpWvah LwG9Bv5pjpM28bYdnD0sLxcn//HO1BDc0Duk1mmxdWgzyCeSdGY0kNK0eh+hRA187IUTbq tT/Vc7p3ZJ+wNTvciTwpUkPEhfqeF5PR5pdEbsjUxU9X5b1DN0kYTZ+L3ctI2isfsLus6Z cB3hAr1/7mN1+wpfg+r0DoWSG3uzLKiYrGPW/j/z9eJ7qiq9YiKcQWQ4lbY3ZvM35LJ0JX I4ZygmVVs/qpZoI8iKKNS8aaiFQ1tuEdtSi09ERo2On/b20j8EsQjmFi5rcZf3BUkenDY9 fi/Cd6QhWdVQesQpjwWHlU0RmvIuAAwqCNBhxSBGkmcjPU2gzUnZiz7NrFciru8E7k8uk4 xtmwyCTkyAejveEUyr6hT4JI30n43vtgpchD3p+9l0cZo6bEXbLyM= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=archlinux.org; s=dkim-ed25519; t=1635039787; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=lPGLKZsQwrMnmPymYt5VqYX/5Jxz0RfNCkZHHuTf7Yc=; b=O+2xtgl9Xhi5DbopJdjjwc6S/UkodudFysiTo/aTaFKogCDlzlS1jGvCQPu1uGO9gpPVRG 43KgbLvDLKHPr4Cw== To: git@vger.kernel.org Cc: =?utf-8?q?Ren=C3=A9_Scharfe?= Subject: [PATCH 1/3] pretty.c: rename describe options variable to more descriptive name Date: Sat, 23 Oct 2021 21:42:54 -0400 Message-Id: <20211024014256.3569322-2-eschwartz@archlinux.org> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211024014256.3569322-1-eschwartz@archlinux.org> References: <20211024014256.3569322-1-eschwartz@archlinux.org> MIME-Version: 1.0 Authentication-Results: mail.archlinux.org; auth=pass smtp.auth=eschwartz smtp.mailfrom=eschwartz@archlinux.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org It contains option arguments, not options. We would like to add option support here too. Signed-off-by: Eli Schwartz --- pretty.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pretty.c b/pretty.c index 73b5ead509..9db2c65538 100644 --- a/pretty.c +++ b/pretty.c @@ -1216,7 +1216,7 @@ 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[] = { "match", "exclude" }; + const char *option_arguments[] = { "match", "exclude" }; const char *arg = start; for (;;) { @@ -1225,10 +1225,10 @@ static size_t parse_describe_args(const char *start, struct strvec *args) size_t arglen = 0; int i; - for (i = 0; i < ARRAY_SIZE(options); i++) { - if (match_placeholder_arg_value(arg, options[i], &arg, + for (i = 0; i < ARRAY_SIZE(option_arguments); i++) { + if (match_placeholder_arg_value(arg, option_arguments[i], &arg, &argval, &arglen)) { - matched = options[i]; + matched = option_arguments[i]; break; } } From patchwork Sun Oct 24 01:42:55 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eli Schwartz X-Patchwork-Id: 12579963 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EC510C4332F for ; Sun, 24 Oct 2021 01:51:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CBF9060F48 for ; Sun, 24 Oct 2021 01:51:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230149AbhJXBxc (ORCPT ); Sat, 23 Oct 2021 21:53:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36204 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230263AbhJXBxa (ORCPT ); Sat, 23 Oct 2021 21:53:30 -0400 Received: from mail.archlinux.org (mail.archlinux.org [IPv6:2a01:4f9:c010:3052::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 18854C061767 for ; Sat, 23 Oct 2021 18:51:07 -0700 (PDT) From: Eli Schwartz DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=archlinux.org; s=dkim-ed25519; t=1635039788; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=aUg3Lve2pZsGu4Pq6OkjIwYeQbOuLiADNaWLFP/We6s=; b=N25vlTuunyoioBb6mQQrNXzxqACYf2ERt+Q59aKDvjbrDZnrbcdOWVZG7i2ILWCo6PGree lylaO0v1YCfGHkBQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=archlinux.org; s=dkim-rsa; t=1635039788; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=aUg3Lve2pZsGu4Pq6OkjIwYeQbOuLiADNaWLFP/We6s=; b=PHcWpfnHH2iPQgKREDJ/z1mdUw45ZjmXwikCuAM5iKs9+9jWHVpt8CqMP25bmmjlr4yf+n UjjHXqPJcp/fya5BblFAVV2GbFXMpBeATcXlDdE1Y0gGddJknMWC4kQ0e20epUVEA87qD5 FO+/LQ23Zg1rbp1AkjQMqSgxkh0ciCGxMFwd/tEeqdhPtCl+KGt//4J5DeghY14eB6KPEE XnWSHWrOO1lHEYzpuIsnvVxgh3vATgqbqeM0O2CKYzUAFQkyN9q8kB7Phs53CCAhGWAwhC dEj+y2FRshyL8WMMgF+eqpXR5t/bhW7VPEjAAoHh9uo49fZUb03sxt0ELd0UUysy5ka3Da 5r5XkHJyxUvCuQ8+1MzDHxdX4tRQ5n83gphnFw28vDW7Wwa0WSS+bRCCARn5jROv36hrku HszexOY9606DR+MBSJHcC1Zpt7Nq9DaU1+LJkoNPsPXGyTzHHCH5dZQVVR80CJugYfhIRF c9EI/3H0ZygmLO6Zh8L+tPL8zPPxGGee0YGrQ8squAAFq+1DhCUKu/fQzsfuQTR9b+wpzR oarY0XhDgnm4e2HnmN6WBf6vlAMwIJPrD9feG9BDAdkNyBWNLdfnS5ITVw2UbJV4+o25T/ Cag6b6n0YEtaPrOzQqh7LJXdQj6Sbw8q5Vwq9yYv82uy3BLefcL3Y= To: git@vger.kernel.org Cc: =?utf-8?q?Ren=C3=A9_Scharfe?= Subject: [PATCH 2/3] pretty: add tag option to %(describe) Date: Sat, 23 Oct 2021 21:42:55 -0400 Message-Id: <20211024014256.3569322-3-eschwartz@archlinux.org> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211024014256.3569322-1-eschwartz@archlinux.org> References: <20211024014256.3569322-1-eschwartz@archlinux.org> MIME-Version: 1.0 Authentication-Results: mail.archlinux.org; auth=pass smtp.auth=eschwartz smtp.mailfrom=eschwartz@archlinux.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.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 --- 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[=]': Also consider lightweight tags. ** 'match=': Only consider tags matching the given `glob(7)` pattern, excluding the "refs/tags/" prefix. ** 'exclude=': 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 `[=]`. 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=': 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 `[=]`. 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 From patchwork Sun Oct 24 01:42:56 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eli Schwartz X-Patchwork-Id: 12579961 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id DC1EBC433FE for ; Sun, 24 Oct 2021 01:51:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id BB6C860F5D for ; Sun, 24 Oct 2021 01:51:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231406AbhJXBxc (ORCPT ); Sat, 23 Oct 2021 21:53:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36202 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230149AbhJXBx3 (ORCPT ); Sat, 23 Oct 2021 21:53:29 -0400 Received: from mail.archlinux.org (mail.archlinux.org [IPv6:2a01:4f9:c010:3052::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1D156C061348 for ; Sat, 23 Oct 2021 18:51:07 -0700 (PDT) From: Eli Schwartz DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=archlinux.org; s=dkim-rsa; t=1635039789; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=+zvUx/pvXDtGvEIPj1TmAF7TBkvn8/o9R7wNj40BXPI=; b=xTp+ZdEh60jZLvBqD8UIvGn4L58MWQA688HCiYtuOUGMqWgD67DDSBbKStFf5DHGRi6nU+ m/P6z5zn3XSqGv3aH8VIe5kY65Rbhxi6J+G6PYgQVj41svk7Pbm7qm3+Cgc3NT1wbC/Qic 4GVf6gGsVlcJoGRt0N9XUsXtecoPglmD6PP3wYGDmDORenL1SZsqBU/kiKL1op9Dr09yy9 xxM3Pu0z+YckDQ78Wt/IkI5OOh07W3S0so1UzQiCdIv+a9Ogy1MWBgSaTg9tpo3mNc96RA ZqX/AMOj5pFKzMSappCm1HWMk/ykHNyWa4H+iyTJfxKgpeQ0XMCP0SEH/dG6ykuHkvrWcr OiP87Qo6+SN8aV8QyOYrrFYPOjEAEBYVI4FO05+YqPhQywnpiDKgS9srPwlAoUSFerFo/r wiAm+JA7nvc0L46/0/UFYuRK/qb01xF5o4MH+K6Ck7MlymxI5UryVSimXKdanmg23byJrg /VoYoCrNbTlDnxbTziWh7Yi18QfaENz8V7VFPZMgEj3ah4nSBemRtqUxR+AqSywdye9oGj 7I8xqDd/g+gMETYW/jZ2SNeSR621vl0F8Ahazz4pqmww5NHaazWgS4prV3cfteQJVAOWga ZeHRIcQdxDUlxeGQCMF3HBHNaSaBiPQWCVBFabbp/m7ELcbHaUEl4= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=archlinux.org; s=dkim-ed25519; t=1635039789; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=+zvUx/pvXDtGvEIPj1TmAF7TBkvn8/o9R7wNj40BXPI=; b=GObaaHA/y06d599kMlqN5hEg5vS0tLk+fJ9Jg6CbaO7181qr0ZNMbhL3QhH6b6dWJXGsKz sjYzU+cg3JLQTZBg== To: git@vger.kernel.org Cc: =?utf-8?q?Ren=C3=A9_Scharfe?= Subject: [PATCH 3/3] pretty: add abbrev option to %(describe) Date: Sat, 23 Oct 2021 21:42:56 -0400 Message-Id: <20211024014256.3569322-4-eschwartz@archlinux.org> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211024014256.3569322-1-eschwartz@archlinux.org> References: <20211024014256.3569322-1-eschwartz@archlinux.org> MIME-Version: 1.0 Authentication-Results: mail.archlinux.org; auth=pass smtp.auth=eschwartz smtp.mailfrom=eschwartz@archlinux.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org The %(describe) placeholder by default, like `git describe`, uses a seven-character abbreviated commit hash. This may not be sufficient to fully describe all git repos, resulting in a placeholder replacement changing its length because the repository grew in size. This could cause the output of git-archive to change. Add the --abbrev option to `git describe` to the placeholder interface in order to provide tools to the user for fine-tuning project defaults and ensure reproducible archives. One alternative would be to just always specify --abbrev=40 but this may be a bit too biased... Signed-off-by: Eli Schwartz --- Documentation/pretty-formats.txt | 4 ++++ pretty.c | 2 +- t/t4205-log-pretty-formats.sh | 8 ++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Documentation/pretty-formats.txt b/Documentation/pretty-formats.txt index 14107ac191..317c1382b5 100644 --- a/Documentation/pretty-formats.txt +++ b/Documentation/pretty-formats.txt @@ -221,6 +221,10 @@ The placeholders are: the same time. + ** 'tags[=]': Also consider lightweight tags. +** 'abbrev=': Instead of using the default number of hexadecimal digits + (which will vary according to the number of objects in the repository with a + default of 7) of the abbreviated object name, use digits, or as many digits + as needed to form a unique object name. ** 'match=': Only consider tags matching the given `glob(7)` pattern, excluding the "refs/tags/" prefix. ** 'exclude=': Do not consider tags matching the given diff --git a/pretty.c b/pretty.c index 3a41bedf1a..a092457274 100644 --- a/pretty.c +++ b/pretty.c @@ -1217,7 +1217,7 @@ 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 *option_arguments[] = { "match", "exclude", "abbrev" }; const char *arg = start; for (;;) { diff --git a/t/t4205-log-pretty-formats.sh b/t/t4205-log-pretty-formats.sh index d4acf8882f..35eef4c865 100755 --- a/t/t4205-log-pretty-formats.sh +++ b/t/t4205-log-pretty-formats.sh @@ -1010,4 +1010,12 @@ test_expect_success '%(describe:tags) vs git describe --tags' ' test_cmp expect actual ' +test_expect_success '%(describe:abbrev=...) vs git describe --abbrev=...' ' + test_when_finished "git tag -d tagname" && + git tag -a -m tagged tagname && + git describe --abbrev=15 >expect && + git log -1 --format="%(describe:abbrev=15)" >actual && + test_cmp expect actual +' + test_done