aboutsummaryrefslogtreecommitdiffstats
path: root/pretty.c
diff options
context:
space:
mode:
authorEli Schwartz <eschwartz@archlinux.org>2021-10-31 13:15:10 -0400
committerJunio C Hamano <gitster@pobox.com>2021-11-01 10:34:36 -0700
commiteccd97d0b02a87db0b0e828dd4f0b441c5462a9c (patch)
tree0703d2deb74c613e1f74636a13c6e8ae67ebeaa7 /pretty.c
parent1d517ceab98fd5c3c1a8fb6ef575b44c31ea7a9e (diff)
downloadgit-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.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/pretty.c b/pretty.c
index 52741fa0a9..d5a34eff91 100644
--- a/pretty.c
+++ b/pretty.c
@@ -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)) {