From: Siddharth Asthana <siddharthasthana31@gmail.com>
To: git@vger.kernel.org
Cc: karthik.188@gmail.com, christian.couder@gmail.com, ps@pks.im,
gitster@pobox.com, toon@iotcl.com,
Siddharth Asthana <siddharthasthana31@gmail.com>
Subject: [PATCH v2 0/1] cat-file: add mailmap subcommand to --batch-command
Date: Sun, 29 Mar 2026 13:58:07 +0530 [thread overview]
Message-ID: <20260329082808.12609-1-siddharthasthana31@gmail.com> (raw)
In-Reply-To: <20260328203615.60402-1-siddharthasthana31@gmail.com>
git-cat-file(1)'s --batch-command works with the --use-mailmap option,
but this option needs to be set when the process is created. This means
we cannot change this option mid-operation.
At GitLab, Gitaly caches git-cat-file processes and it would be useful
if --batch-command supported toggling mailmap dynamically with existing
processes.
This patch adds a `mailmap` subcommand to --batch-command that takes
`yes` or `no` as its argument. When enabled, mailmap data is loaded from
disk on first use and kept in memory so that toggling back on does not
require reloading.
The series is based on top of 5361983c07 (The 22nd batch, 2026-03-21).
CI: https://gitlab.com/gitlab-org/git/-/pipelines/2416081861
Changes in v2:
- Replace two separate `use-mailmap` / `no-use-mailmap` zero-argument
subcommands with a single `mailmap` subcommand that takes `yes` or
`no` as its argument. This reduces the dispatch
table to one entry and the implementation to one function.
- Link to v1: https://public-inbox.org/git/a4ec7bfa-f16b-4505-9b37-d3dd137e93cb@gmail.com/T/#m5c62fb6ad0fbcc99a706dba4c78b66359c247acd
Thanks,
Siddharth
---
Siddharth Asthana (1):
cat-file: add mailmap subcommand to --batch-command
Documentation/git-cat-file.adoc | 7 +++++
builtin/cat-file.c | 30 ++++++++++++++++++---
t/t4203-mailmap.sh | 48 +++++++++++++++++++++++++++++++++
3 files changed, 81 insertions(+), 4 deletions(-)
Range-diff versus v1:
1: 39f40e9cb7 ! 1: 936ca27419 cat-file: add use-mailmap/no-use-mailmap to --batch-command
@@ Metadata
Author: Siddharth Asthana <siddharthasthana31@gmail.com>
## Commit message ##
- cat-file: add use-mailmap/no-use-mailmap to --batch-command
+ cat-file: add mailmap subcommand to --batch-command
git-cat-file(1)'s --batch-command works with the --use-mailmap option,
but this option needs to be set when the process is created. This means
@@ Commit message
if --batch-command supported toggling mailmap dynamically with existing
processes.
- Add `use-mailmap` and `no-use-mailmap` as new subcommands to
- --batch-command. `use-mailmap` enables the mailmap mechanism for
- subsequent `contents` and `info` commands, lazily loading the mailmap
- data from disk on first invocation. `no-use-mailmap` disables it but
- keeps the data in memory so re-enabling doesn't require reloading.
-
- The subcommand names mirror the existing --use-mailmap/--no-use-mailmap
- CLI options to keep the interface consistent.
+ Add a `mailmap` subcommand to --batch-command that takes a single
+ argument: `yes` to enable mailmap and `no` to disable it. When enabled,
+ mailmap data is loaded from disk on first use and kept in memory so that
+ toggling back on does not require reloading.
+ Suggested-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Siddharth Asthana <siddharthasthana31@gmail.com>
@@ Documentation/git-cat-file.adoc: flush::
is used, no output will come until a `flush` is issued. When `--buffer`
is not used, commands are flushed each time without issuing `flush`.
+
-+use-mailmap::
-+ Enable mailmap for subsequent `contents` and `info` commands. If the
-+ mailmap has not been loaded yet, it is read from disk at this point.
-+
-+no-use-mailmap::
-+ Disable mailmap for subsequent `contents` and `info` commands. The
-+ mailmap data is kept in memory so that a later `use-mailmap` command
-+ does not need to reload it from disk.
++mailmap <yes|no>::
++ Enable or disable mailmap for subsequent `contents` and `info`
++ commands. When `yes` is given, mailmap data is loaded from disk on
++ first use and kept in memory; passing `yes` again does not reload it.
++ When `no` is given, mailmap is disabled but the data stays in memory
++ so that a later `mailmap yes` does not need to reload it from disk.
--
@@ builtin/cat-file.c: static void parse_cmd_info(struct batch_options *opt,
batch_one_object(line, output, opt, data);
}
-+static void parse_cmd_use_mailmap(struct batch_options *opt UNUSED,
-+ const char *line UNUSED,
-+ struct strbuf *output UNUSED,
-+ struct expand_data *data UNUSED)
++static void parse_cmd_mailmap(struct batch_options *opt UNUSED,
++ const char *line,
++ struct strbuf *output UNUSED,
++ struct expand_data *data UNUSED)
+{
-+ if (!mailmap_loaded) {
-+ read_mailmap(the_repository, &mailmap);
-+ mailmap_loaded = 1;
++ if (!strcmp(line, "yes")) {
++ if (!mailmap_loaded) {
++ read_mailmap(the_repository, &mailmap);
++ mailmap_loaded = 1;
++ }
++ use_mailmap = 1;
++ } else if (!strcmp(line, "no")) {
++ use_mailmap = 0;
++ } else {
++ die(_("mailmap: unknown argument '%s', expected 'yes' or 'no'"), line);
+ }
-+ use_mailmap = 1;
-+}
-+
-+static void parse_cmd_disable_mailmap(struct batch_options *opt UNUSED,
-+ const char *line UNUSED,
-+ struct strbuf *output UNUSED,
-+ struct expand_data *data UNUSED)
-+{
-+ use_mailmap = 0;
+}
@@ builtin/cat-file.c: static const struct parse_cmd {
+ { "contents", parse_cmd_contents, 1 },
+ { "info", parse_cmd_info, 1 },
+ { "flush", NULL, 0 },
-+ { "use-mailmap", parse_cmd_use_mailmap, 0 },
-+ { "no-use-mailmap", parse_cmd_disable_mailmap, 0 },
++ { "mailmap", parse_cmd_mailmap, 1 },
};
@@ t/t4203-mailmap.sh: test_expect_success 'git cat-file --batch-command returns co
-+test_expect_success 'git cat-file --batch-command use-mailmap enables mailmap mid-stream' '
++test_expect_success 'git cat-file --batch-command mailmap yes enables mailmap mid-stream' '
+ ...
-+ printf "info HEAD\nuse-mailmap\ninfo HEAD\n" | git cat-file --batch-command >actual &&
++ printf "info HEAD\nmailmap yes\ninfo HEAD\n" | git cat-file --batch-command >actual &&
-+test_expect_success 'git cat-file --batch-command no-use-mailmap disables mailmap mid-stream' '
++test_expect_success 'git cat-file --batch-command mailmap no disables mailmap mid-stream' '
+ ...
-+ printf "use-mailmap\ninfo HEAD\nno-use-mailmap\ninfo HEAD\n" | git cat-file --batch-command >actual &&
++ printf "mailmap yes\ninfo HEAD\nmailmap no\ninfo HEAD\n" | git cat-file --batch-command >actual &&
-+test_expect_success 'git cat-file --batch-command use-mailmap works in --buffer mode' '
++test_expect_success 'git cat-file --batch-command mailmap works in --buffer mode' '
+ ...
-+ printf "use-mailmap\ninfo HEAD\nno-use-mailmap\ninfo HEAD\nflush\n" | git cat-file --batch-command --buffer >actual &&
++ printf "mailmap yes\ninfo HEAD\nmailmap no\ninfo HEAD\nflush\n" | git cat-file --batch-command --buffer >actual &&
base-commit: 5361983c075154725be47b65cca9a2421789e410
--
2.51.0
next prev parent reply other threads:[~2026-03-29 8:28 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-28 20:36 [PATCH v1 1/1] cat-file: add use-mailmap/no-use-mailmap to --batch-command Siddharth Asthana
2026-03-29 0:50 ` Junio C Hamano
2026-03-29 7:25 ` Siddharth Asthana
2026-03-29 20:55 ` Junio C Hamano
2026-03-29 8:28 ` Siddharth Asthana [this message]
2026-03-29 8:28 ` [PATCH v2 1/1] cat-file: add mailmap subcommand " Siddharth Asthana
2026-03-30 2:12 ` Junio C Hamano
2026-03-31 1:40 ` Siddharth Asthana
2026-03-31 3:41 ` Junio C Hamano
2026-03-30 9:44 ` Karthik Nayak
2026-03-31 1:42 ` Siddharth Asthana
2026-03-30 10:37 ` Patrick Steinhardt
2026-03-30 14:53 ` Junio C Hamano
2026-03-31 1:43 ` Siddharth Asthana
2026-03-31 17:11 ` Jean-Noël AVILA
2026-03-31 17:49 ` Junio C Hamano
2026-04-01 10:11 ` Jean-Noël Avila
2026-03-31 12:11 ` [PATCH v3 0/1] " Siddharth Asthana
2026-03-31 12:11 ` [PATCH v3 1/1] " Siddharth Asthana
2026-03-31 19:21 ` Junio C Hamano
2026-04-10 18:29 ` Junio C Hamano
2026-04-15 15:09 ` [PATCH v4 0/1] " Siddharth Asthana
2026-04-15 15:09 ` [PATCH v4 1/1] " Siddharth Asthana
2026-04-15 18:28 ` Junio C Hamano
2026-04-16 3:08 ` Siddharth Asthana
2026-04-16 3:32 ` [PATCH v5 0/1] " Siddharth Asthana
2026-04-16 3:32 ` [PATCH v5 1/1] " Siddharth Asthana
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=20260329082808.12609-1-siddharthasthana31@gmail.com \
--to=siddharthasthana31@gmail.com \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=karthik.188@gmail.com \
--cc=ps@pks.im \
--cc=toon@iotcl.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox