diff options
author | Eli Schwartz <eschwartz@archlinux.org> | 2021-10-31 13:15:10 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2021-11-01 10:34:36 -0700 |
commit | eccd97d0b02a87db0b0e828dd4f0b441c5462a9c (patch) | |
tree | 0703d2deb74c613e1f74636a13c6e8ae67ebeaa7 /pretty.c | |
parent | 1d517ceab98fd5c3c1a8fb6ef575b44c31ea7a9e (diff) | |
download | git-eccd97d0b02a87db0b0e828dd4f0b441c5462a9c.tar.gz |
pretty: add abbrev option to %(describe)
The %(describe) placeholder by default, like `git describe`, uses a
seven-character abbreviated commit object name. This may not be
sufficient to fully describe all commits in a given repository,
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 <eschwartz@archlinux.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'pretty.c')
-rw-r--r-- | pretty.c | 15 |
1 files changed, 15 insertions, 0 deletions
@@ -1220,10 +1220,12 @@ static size_t parse_describe_args(const char *start, struct strvec *args) char *name; enum { DESCRIBE_ARG_BOOL, + DESCRIBE_ARG_INTEGER, DESCRIBE_ARG_STRING, } type; } option[] = { { "tags", DESCRIBE_ARG_BOOL}, + { "abbrev", DESCRIBE_ARG_INTEGER }, { "exclude", DESCRIBE_ARG_STRING }, { "match", DESCRIBE_ARG_STRING }, }; @@ -1247,6 +1249,19 @@ static size_t parse_describe_args(const char *start, struct strvec *args) found = 1; } break; + case DESCRIBE_ARG_INTEGER: + if (match_placeholder_arg_value(arg, option[i].name, &arg, + &argval, &arglen)) { + char *endptr; + if (!arglen) + return 0; + strtol(argval, &endptr, 10); + if (endptr - argval != arglen) + return 0; + strvec_pushf(args, "--%s=%.*s", option[i].name, (int)arglen, argval); + found = 1; + } + break; case DESCRIBE_ARG_STRING: if (match_placeholder_arg_value(arg, option[i].name, &arg, &argval, &arglen)) { |