mbox series

[v4,0/3] Add some more options to the pretty-formats

Message ID 20211031171510.1646396-1-eschwartz@archlinux.org (mailing list archive)
Headers show
Series Add some more options to the pretty-formats | expand

Message

Eli Schwartz Oct. 31, 2021, 5:15 p.m. UTC
Renamed enum values. OPT_ -> DESCRIBE_ARG_
Doc fixups.

Eli Schwartz (3):
  pretty.c: rework describe options parsing for better extensibility
  pretty: add tag option to %(describe)
  pretty: add abbrev option to %(describe)

 Documentation/pretty-formats.txt | 16 ++++++---
 pretty.c                         | 58 ++++++++++++++++++++++++++------
 t/t4205-log-pretty-formats.sh    | 16 +++++++++
 3 files changed, 75 insertions(+), 15 deletions(-)

Range-diff against v3:
1:  55a20468d3 ! 1:  be35fee252 pretty.c: rework describe options parsing for better extensibility
    @@ pretty.c: int format_set_trailers_options(struct process_trailer_options *opts,
     -	const char *options[] = { "match", "exclude" };
     +	struct {
     +		char *name;
    -+		enum { OPT_STRING } type;
    ++		enum {
    ++			DESCRIBE_ARG_STRING,
    ++		} type;
     +	}  option[] = {
    -+		{ "exclude", OPT_STRING },
    -+		{ "match", OPT_STRING },
    ++		{ "exclude", DESCRIBE_ARG_STRING },
    ++		{ "match", DESCRIBE_ARG_STRING },
     +	};
      	const char *arg = start;
      
    @@ pretty.c: int format_set_trailers_options(struct process_trailer_options *opts,
     -				matched = options[i];
     +		for (i = 0; !found && i < ARRAY_SIZE(option); i++) {
     +			switch (option[i].type) {
    -+			case OPT_STRING:
    ++			case DESCRIBE_ARG_STRING:
     +				if (match_placeholder_arg_value(arg, option[i].name, &arg,
     +								&argval, &arglen)) {
     +					if (!arglen)
2:  c34c8a4f7f ! 2:  5830c69d4d pretty: add tag option to %(describe)
    @@ Documentation/pretty-formats.txt: The placeholders are:
      			  inconsistent when tags are added or removed at
      			  the same time.
      +
    -+** 'tags[=<BOOL>]': Instead of only considering annotated tags,
    ++** 'tags[=<bool>]': Instead of only considering annotated tags,
     +   consider lightweight tags as well.
      ** 'match=<pattern>': Only consider tags matching the given
         `glob(7)` pattern, excluding the "refs/tags/" prefix.
    @@ Documentation/pretty-formats.txt: insert an empty string unless we are traversin
      decoration format if `--decorate` was not already provided on the command
      line.
      
    -+The boolean options accept an optional value `[=<BOOL>]`. The values
    ++The boolean options accept an optional value `[=<bool>]`. The values
     +`true`, `false`, `on`, `off` etc. are all accepted. See the "boolean"
     +sub-section in "EXAMPLES" in linkgit:git-config[1]. If a boolean
     +option is given with no value, it's enabled.
    @@ Documentation/pretty-formats.txt: insert an empty string unless we are traversin
     
      ## pretty.c ##
     @@ pretty.c: static size_t parse_describe_args(const char *start, struct strvec *args)
    - {
      	struct {
      		char *name;
    --		enum { OPT_STRING } type;
    -+		enum { OPT_BOOL, OPT_STRING, } type;
    + 		enum {
    ++			DESCRIBE_ARG_BOOL,
    + 			DESCRIBE_ARG_STRING,
    + 		} type;
      	}  option[] = {
    -+		{ "tags", OPT_BOOL},
    - 		{ "exclude", OPT_STRING },
    - 		{ "match", OPT_STRING },
    ++		{ "tags", DESCRIBE_ARG_BOOL},
    + 		{ "exclude", DESCRIBE_ARG_STRING },
    + 		{ "match", DESCRIBE_ARG_STRING },
      	};
     @@ pretty.c: static size_t parse_describe_args(const char *start, struct strvec *args)
      		int found = 0;
    @@ pretty.c: static size_t parse_describe_args(const char *start, struct strvec *ar
      
      		for (i = 0; !found && i < ARRAY_SIZE(option); i++) {
      			switch (option[i].type) {
    -+			case OPT_BOOL:
    ++			case DESCRIBE_ARG_BOOL:
     +				if (match_placeholder_bool_arg(arg, option[i].name, &arg, &optval)) {
     +					if (optval)
     +						strvec_pushf(args, "--%s", option[i].name);
    @@ pretty.c: static size_t parse_describe_args(const char *start, struct strvec *ar
     +					found = 1;
     +				}
     +				break;
    - 			case OPT_STRING:
    + 			case DESCRIBE_ARG_STRING:
      				if (match_placeholder_arg_value(arg, option[i].name, &arg,
      								&argval, &arglen)) {
     
3:  b751aaf3c6 ! 3:  032513150d pretty: add abbrev option to %(describe)
    @@ Commit message
      ## Documentation/pretty-formats.txt ##
     @@ Documentation/pretty-formats.txt: The placeholders are:
      +
    - ** 'tags[=<BOOL>]': Instead of only considering annotated tags,
    + ** 'tags[=<bool>]': Instead of only considering annotated tags,
         consider lightweight tags as well.
    -+** 'abbrev=<N>': Instead of using the default number of hexadecimal digits
    ++** '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 <n> digits, or as many digits
    -+   as needed to form a unique object name.
    ++   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
     
      ## pretty.c ##
     @@ pretty.c: static size_t parse_describe_args(const char *start, struct strvec *args)
    - {
    - 	struct {
      		char *name;
    --		enum { OPT_BOOL, OPT_STRING, } type;
    -+		enum { OPT_BOOL, OPT_INTEGER, OPT_STRING, } type;
    + 		enum {
    + 			DESCRIBE_ARG_BOOL,
    ++			DESCRIBE_ARG_INTEGER,
    + 			DESCRIBE_ARG_STRING,
    + 		} type;
      	}  option[] = {
    - 		{ "tags", OPT_BOOL},
    -+		{ "abbrev", OPT_INTEGER },
    - 		{ "exclude", OPT_STRING },
    - 		{ "match", OPT_STRING },
    + 		{ "tags", DESCRIBE_ARG_BOOL},
    ++		{ "abbrev", DESCRIBE_ARG_INTEGER },
    + 		{ "exclude", DESCRIBE_ARG_STRING },
    + 		{ "match", DESCRIBE_ARG_STRING },
      	};
     @@ pretty.c: static size_t parse_describe_args(const char *start, struct strvec *args)
      					found = 1;
      				}
      				break;
    -+			case OPT_INTEGER:
    ++			case DESCRIBE_ARG_INTEGER:
     +				if (match_placeholder_arg_value(arg, option[i].name, &arg,
     +								&argval, &arglen)) {
     +					char *endptr;
    @@ pretty.c: static size_t parse_describe_args(const char *start, struct strvec *ar
     +					found = 1;
     +				}
     +				break;
    - 			case OPT_STRING:
    + 			case DESCRIBE_ARG_STRING:
      				if (match_placeholder_arg_value(arg, option[i].name, &arg,
      								&argval, &arglen)) {