Am 12.02.2019 um 02:22 schrieb brian m. carlson:
> diff --git a/builtin/get-tar-commit-id.c b/builtin/get-tar-commit-id.c
> index 2706fcfaf2..2760549e91 100644
> --- a/builtin/get-tar-commit-id.c
> +++ b/builtin/get-tar-commit-id.c
> @@ -5,6 +5,7 @@
> #include "commit.h"
> #include "tar.h"
> #include "builtin.h"
> +#include "strbuf.h"
> #include "quote.h"
>
> static const char builtin_get_tar_commit_id_usage[] =
> @@ -21,6 +22,8 @@ int cmd_get_tar_commit_id(int argc, const char **argv,
> const char *prefix)
> char *content = buffer + RECORDSIZE;
> const char *comment;
> ssize_t n;
> + char *hdrprefix;
> + int ret;
>
> if (argc != 1)
> usage(builtin_get_tar_commit_id_usage);
> @@ -32,10 +35,14 @@ int cmd_get_tar_commit_id(int argc, const char **argv,
> const char *prefix)
> die_errno("git get-tar-commit-id: EOF before reading tar
> header");
> if (header->typeflag[0] != 'g')
> return 1;
> - if (!skip_prefix(content, "52 comment=", &comment))
> +
> + hdrprefix = xstrfmt("%zu comment=", the_hash_algo->hexsz + strlen("
> comment=") + 2 + 1);
> + ret = skip_prefix(content, hdrprefix, &comment);
> + free(hdrprefix);
> + if (!ret)
> return 1;
>
> - if (write_in_full(1, comment, 41) < 0)
> + if (write_in_full(1, comment, the_hash_algo->hexsz + 1) < 0)
> die_errno("git get-tar-commit-id: write error");
>
> return 0;
That command currently prints the pax comment in tar archives if it
looks like a SHA1 hash based on its length. It should continue to do
so, and _also_ show longer hashes. Your change makes it _only_ show
those longer hashes.
So it could check for all known valid hash lengths in turn, or accept
any payload length between 40 and the_hash_algo->hexsz, or loosen up
totally and show comments of any length.
René