Skip to content

Convert diff opt parser to parse_options()

Nguyễn Thái Ngọc Duy git 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 Latest15 of 75 patches 2 repliesIn review

15 of 75 patches are in this archive. The cover letter announces 75.

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/75parse-options.h: remove extern on function prototypesparse-options.h+30 -300 replies
2/75parse-options: add one-shot modeparse-options.c parse-options.h+33 -70 replies
3/75parse-options: allow keep-unknown + stop-at-non-opt combinationparse-options.c+0 -30 replies
4/75parse-options: disable option abbreviation with PARSE_OPT_KEEP_UNKNOWNparse-options.c t/t7800-difftool.sh+4 -30 replies
5/75parse-options: add OPT_BITOP()parse-options.c parse-options.h+12 -00 replies
6/75parse-options: stop abusing 'callback' for lowlevel callbacksbuiltin/blame.c builtin/merge.c builtin/update-index.c +3 more+32 -130 replies
7/75parse-options: avoid magic return codesbuiltin/merge.c builtin/update-index.c parse-options-cb.c +2 more+68 -460 replies
8/75parse-options: allow ll_callback with OPTION_CALLBACKbuiltin/merge.c builtin/update-index.c parse-options-cb.c +2 more+51 -220 replies
9/75diff.h: keep forward struct declarations sorteddiff.h+6 -60 replies
10/75diff.h: avoid bit fields in struct diff_flagsdiff.h+33 -331 reply
11/75diff.c: prepare to use parse_options() for parsingdiff.c diff.h+29 -00 replies
12/75diff.c: convert -u|-p|--patchdiff.c+8 -20 replies
73/75range-diff: use parse_options() instead of diff_opt_parse()builtin/range-diff.c+6 -200 replies
74/75diff --no-index: use parse_options() instead of diff_opt_parse()builtin/diff.c diff-no-index.c diff.h +1 more+35 -411 reply
75/75am: avoid diff_opt_parse()builtin/am.c diff.c diff.h+10 -20 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.

Read the v1 thread

Cover letter [PATCH 00/75] Convert diff opt parser to parse_options()

This is a sneak peek of converting diff_opt_parse() to 'struct option'. The end game is builtin commands can just add diff options to their 'struct option[]' array, do parse_options() like usual and have diff parsing for free.

Besides simplifying the parsing code, there are also more benefits of using struct option, e.g. tab completion and "git cmd -h".

I'm not sending full series because it's looong, the middle is not that interesting, and I would need to wait for sb/diff-color-moved-config-option-fixup (and Brian's --literally too, probably) to land before sending something mergeable. But main patches are sent here for review.

This is of course just the beginning. Once revision.c parser is converted, diff_opt_parse() will be killed off, more commands can take use diff option array directly. And perhaps the diff option array will be split up into smaller ones to give callers more control what's part of the command.

Nguyễn Thái Ngọc Duy (75):
parse-options.h: remove extern on function prototypes
parse-options: add one-shot mode
parse-options: allow keep-unknown + stop-at-non-opt combination
parse-options: disable option abbreviation with PARSE_OPT_KEEP_UNKNOWN
parse-options: add OPT_BITOP()
parse-options: stop abusing 'callback' for lowlevel callbacks
parse-options: avoid magic return codes
parse-options: allow ll_callback with OPTION_CALLBACK diff.h: keep forward struct declarations sorted
diff.h: avoid bit fields in struct diff_flags
diff.c: prepare to use parse_options() for parsing

  diff.c: convert -u|-p|--patch
  diff.c: convert -U|--unified
  diff.c: convert -W|--[no-]function-context
  diff.c: convert --raw
  diff.c: convert --patch-with-raw
  diff.c: convert --numstat and --shortstat
  diff.c: convert --dirstat and friends
  diff.c: convert --check
  diff.c: convert --summary
  diff.c: convert --patch-with-stat
  diff.c: convert --name-only
  diff.c: convert --name-status
  diff.c: convert -s|--no-patch
  diff.c: convert --stat*
  diff.c: convert --[no-]compact-summary
  diff.c: convert --output-*
  diff.c: convert -B|--break-rewrites
  diff.c: convert -M|--find-renames
  diff.c: convert -D|--irreversible-delete
  diff.c: convert -C|--find-copies

diff.c: convert --find-copies-harder
diff.c: convert --no-renames|--[no--rename-empty diff.c: convert --relative
diff.c: convert --[no-]minimal
diff.c: convert --ignore-some-changes
diff.c: convert --[no-]indent-heuristic
diff.c: convert --patience
diff.c: convert --histogram
diff.c: convert --diff-algorithm
diff.c: convert --anchored
diff.c: convert --binary
diff.c: convert --full-index
diff.c: convert -a|--text
diff.c: convert -R
diff.c: convert --[no-]follow
diff.c: convert --[no-]color
diff.c: convert --word-diff
diff.c: convert --word-diff-regex
diff.c: convert --color-words
diff.c: convert --exit-code
diff.c: convert --quiet
diff.c: convert --ext-diff
diff.c: convert --textconv
diff.c: convert --ignore-submodules
diff.c: convert --submodule
diff.c: convert --ws-error-highlight
diff.c: convert --ita-[in]visible-in-index
diff.c: convert -z
diff.c: convert -l
diff.c: convert -S|-G
diff.c: convert --pickaxe-all|--pickaxe-regex
diff.c: convert -O
diff.c: convert --find-object
diff.c: convert --diff-filter
diff.c: convert --[no-]abbrev
diff.c: convert --[src|dst]-prefix
diff.c: convert --line-prefix
diff.c: convert --no-prefix
diff.c: convert --inter-hunk-context
diff.c: convert --color-moved
diff.c: convert --color-moved-ws
range-diff: use parse_options() instead of diff_opt_parse() diff --no-index: use parse_options() instead of diff_opt_parse()
am: avoid diff_opt_parse()

 Documentation/diff-options.txt |   24 +-
 builtin/am.c                   |    4 +-
 builtin/blame.c                |    2 +-
 builtin/diff.c                 |   21 +-
 builtin/merge.c                |    9 +-
 builtin/range-diff.c           |   26 +-
 builtin/update-index.c         |   41 +-
 diff-no-index.c                |   49 +-
 diff.c                         | 1132 ++++++++++++++++++++------------
 diff.h                         |   85 +--
 parse-options-cb.c             |   11 +-
 parse-options.c                |  152 +++--
 parse-options.h                |  116 ++--
 t/t4053-diff-no-index.sh       |    3 +-
 t/t7800-difftool.sh            |    4 +-
 15 files changed, 1051 insertions(+), 628 deletions(-)
Signature · 1 line
2.20.0.482.g66447595a7