Re: [PATCH v2 4/4] cat-file: add mailmap support
- From
Johannes Schindelin <johannes.schindelin@gmx.de>
- Date
- Jul 8, 2022, 11:53 UTC
- Message-ID
- <p3n4547s-6134-n4p9-97n5-so696qssr5n2@tzk.qr>
- In-Reply-To
- <20220707161554.6900-5-siddharthasthana31@gmail.com>
Hi Siddarth,
On Thu, 7 Jul 2022, Siddharth Asthana wrote:
Show 12 quoted lines
> diff --git a/builtin/cat-file.c b/builtin/cat-file.c
> index 50cf38999d..6dc750a367 100644
> --- a/builtin/cat-file.c
> +++ b/builtin/cat-file.c
> @@ -36,6 +37,19 @@ struct batch_options {
>
> static const char *force_path;
>
> +static struct string_list mailmap = STRING_LIST_INIT_NODUP;
> +static int use_mailmap;
> +
> +char *replace_idents_using_mailmap(char *object_buf, size_t *size)Here, we declare the `size` parameter as a pointer to a `size_t`.
Show 18 quoted lines
> +{
> + struct strbuf sb = STRBUF_INIT;
> + strbuf_attach(&sb, object_buf, *size, *size + 1);
> + const char *headers[] = { "author ", "committer ", "tagger ", NULL };
> + apply_mailmap_to_header(&sb, headers, &mailmap);
> + *size = sb.len;
> + return strbuf_detach(&sb, NULL);
> +}
> +
> static int filter_object(const char *path, unsigned mode,
> const struct object_id *oid,
> char **buf, unsigned long *size)
> @@ -152,6 +166,9 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name,
> if (!buf)
> die("Cannot read object %s", obj_name);
>
> + if (use_mailmap)
> + buf = replace_idents_using_mailmap(buf, &size);But here, we are once more bitten by Git's usage of last century's data types: the `size` variable is of type `unsigned long`.
Now, you are probably developing this patch on 64-bit Linux or macOS, where it just so happens that `size_t` is idempotent to `unsigned long`.
But that is not the case on 32-bit Linux nor on Windows, and therefore the build fails with this patch. I need this to get the build to pass:
-- snipsnap -- From 237c783705b30ed4bcce81aeb860dc7e152fc8bf Mon Sep 17 00:00:00 2001 From: Johannes Schindelin <johannes.schindelin@gmx.de> Date: Fri, 8 Jul 2022 13:47:52 +0200 Subject: [PATCH] fixup??? cat-file: add mailmap support
This is needed whenever `unsigned long` is different from `size_t`, e.g. on 32-bit Linux and on Windows.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> --- builtin/cat-file.c | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-)
diff --git a/builtin/cat-file.c b/builtin/cat-file.c index ac852087a74..baa6aca53ce 100644 --- a/builtin/cat-file.c +++ b/builtin/cat-file.c @@ -185,8 +185,13 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name, if (!buf) die("Cannot read object %s", obj_name); - if (use_mailmap) - buf = replace_idents_using_mailmap(buf, &size); + if (use_mailmap) { + size_t s; + + buf = replace_idents_using_mailmap(buf, &s); + + size = cast_size_t_to_ulong(s); + } /* otherwise just spit out the data */ break; @@ -222,8 +227,13 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name, buf = read_object_with_reference(the_repository, &oid, exp_type_id, &size, NULL); - if (use_mailmap) - buf = replace_idents_using_mailmap(buf, &size); + if (use_mailmap) { + size_t s; + + buf = replace_idents_using_mailmap(buf, &s); + + size = cast_size_t_to_ulong(s); + } break; } default: @@ -392,8 +402,13 @@ static void print_object_or_die(struct batch_options *opt, struct expand_data *d contents = read_object_file(oid, &type, &size); - if (use_mailmap) - contents = replace_idents_using_mailmap(contents, &size); + if (use_mailmap) { + size_t s; + + contents = replace_idents_using_mailmap(contents, &s); + + size = cast_size_t_to_ulong(s); + } if (!contents) die("object %s disappeared", oid_to_hex(oid)); -- 2.37.0.windows.1