git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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

From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Date
Dec 27, 2018, 16:25 UTC
Message-ID
<20181227162536.15895-1-pclouds@gmail.com>

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(-)
-- 
2.20.0.482.g66447595a7
Next: Nguyễn Thái Ngọc Duy
Message 1 of 18 in “Convert diff opt parser to parse_options()”
  1. 00/75 Convert diff opt parser to parse_options()Nguyễn Thái Ngọc Duy, Dec 27, 2018
  2. 01/75 parse-options.h: remove extern on function prototypesNguyễn Thái Ngọc Duy, Dec 27, 2018
  3. 02/75 parse-options: add one-shot modeNguyễn Thái Ngọc Duy, Dec 27, 2018
  4. 04/75 parse-options: disable option abbreviation with PARSE_OPT_KEEP_UNKNOWNNguyễn Thái Ngọc Duy, Dec 27, 2018
  5. 03/75 parse-options: allow keep-unknown + stop-at-non-opt combinationNguyễn Thái Ngọc Duy, Dec 27, 2018
  6. 05/75 parse-options: add OPT_BITOP()Nguyễn Thái Ngọc Duy, Dec 27, 2018
  7. 07/75 parse-options: avoid magic return codesNguyễn Thái Ngọc Duy, Dec 27, 2018
  8. 06/75 parse-options: stop abusing 'callback' for lowlevel callbacksNguyễn Thái Ngọc Duy, Dec 27, 2018
  9. 08/75 parse-options: allow ll_callback with OPTION_CALLBACKNguyễn Thái Ngọc Duy, Dec 27, 2018
  10. 11/75 diff.c: prepare to use parse_options() for parsingNguyễn Thái Ngọc Duy, Dec 27, 2018
  11. 74/75 diff --no-index: use parse_options() instead of diff_opt_parse()Nguyễn Thái Ngọc Duy, Dec 27, 2018
  12. Eric SunshineDec 27, 2018
  13. 10/75 diff.h: avoid bit fields in struct diff_flagsNguyễn Thái Ngọc Duy, Dec 27, 2018
  14. Stefan BellerJan 9, 2019
  15. 75/75 am: avoid diff_opt_parse()Nguyễn Thái Ngọc Duy, Dec 27, 2018
  16. 73/75 range-diff: use parse_options() instead of diff_opt_parse()Nguyễn Thái Ngọc Duy, Dec 27, 2018
  17. 09/75 diff.h: keep forward struct declarations sortedNguyễn Thái Ngọc Duy, Dec 27, 2018
  18. 12/75 diff.c: convert -u|-p|--patchNguyễn Thái Ngọc Duy, Dec 27, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.