summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Documentation/pretty-formats.txt4
-rw-r--r--pretty.c15
-rwxr-xr-xt/t4205-log-pretty-formats.sh8
3 files changed, 27 insertions, 0 deletions
diff --git a/Documentation/pretty-formats.txt b/Documentation/pretty-formats.txt
index 1ee47bd4a3..9e943fb74b 100644
--- a/Documentation/pretty-formats.txt
+++ b/Documentation/pretty-formats.txt
@@ -222,6 +222,10 @@ The placeholders are:
+
** 'tags[=<bool>]': Instead of only considering annotated tags,
consider lightweight tags as well.
+** 'abbrev=<number>': Instead of using the default number of hexadecimal digits
+ (which will vary according to the number of objects in the repository with a
+ default of 7) of the abbreviated object name, use <number> digits, or as many
+ digits as needed to form a unique object name.
** 'match=<pattern>': Only consider tags matching the given
`glob(7)` pattern, excluding the "refs/tags/" prefix.
** 'exclude=<pattern>': Do not consider tags matching the given
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)) {
diff --git a/t/t4205-log-pretty-formats.sh b/t/t4205-log-pretty-formats.sh
index d4acf8882f..35eef4c865 100755
--- a/t/t4205-log-pretty-formats.sh
+++ b/t/t4205-log-pretty-formats.sh
@@ -1010,4 +1010,12 @@ test_expect_success '%(describe:tags) vs git describe --tags' '
test_cmp expect actual
'
+test_expect_success '%(describe:abbrev=...) vs git describe --abbrev=...' '
+ test_when_finished "git tag -d tagname" &&
+ git tag -a -m tagged tagname &&
+ git describe --abbrev=15 >expect &&
+ git log -1 --format="%(describe:abbrev=15)" >actual &&
+ test_cmp expect actual
+'
+
test_done