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é

Reply via email to