parse_opt_ref_sorting: always use with NONEG flag
authorJeff King <peff@peff.net>
Wed, 20 Mar 2019 20:22:15 +0000 (16:22 -0400)
committerJunio C Hamano <gitster@pobox.com>
Thu, 21 Mar 2019 03:03:35 +0000 (12:03 +0900)
commit95be717cd5a5d4956a5152210176e598cf49ec75
tree31818e4c171801707212006b7856a0d6a089de76
parent9a1180fc304ad9831641e5788e9c8d3dfc10ccdd
parse_opt_ref_sorting: always use with NONEG flag

The "--sort" parameter of for-each-ref, etc, does not handle negation,
and instead returns an error to the parse-options code. But neither
piece of code prints anything for the user, which may leave them
confused:

  $ git for-each-ref --no-sort
  $ echo $?
  129

As the comment in the callback function notes, this probably should
clear the list, which would make it consistent with other list-like
options (i.e., anything that uses OPT_STRING_LIST currently).
Unfortunately that's a bit tricky due to the way the ref-filter code
works. But in the meantime, let's at least make the error a little less
confusing:

  - switch to using PARSE_OPT_NONEG in the option definition, which will
    cause the options code to produce a useful message

  - since this was cut-and-pasted to four different spots, let's define
    a single OPT_REF_SORT() macro that we can use everywhere

  - the callback can use BUG_ON_OPT_NEG() to make sure the correct flags
    are used (incidentally, this also satisfies -Wunused-parameters,
    since we're now looking at "unset")

  - expand the comment into a NEEDSWORK to make it clear that the
    direction is right, but the details need to be worked out

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/branch.c
builtin/for-each-ref.c
builtin/ls-remote.c
builtin/tag.c
ref-filter.c
ref-filter.h