Changes since v2: - Rebase, affects only patch 5. - Add patch 7 for documenting negative options on their own line. - Add preparatory patch 6. - Add bonus patch 8. subtree: disallow --no-{help,quiet,debug,branch,message} t1502, docs: disallow --no-help t1502: move optionspec help output to a file t1502: test option negation parse-options: show negatability of options in short help parse-options: factor out usage_indent() and usage_padding() parse-options: no --[no-]no-... parse-options: simplify usage_padding() Documentation/git-rev-parse.txt | 10 +-- contrib/subtree/git-subtree.sh | 10 +-- contrib/subtree/t/t7900-subtree.sh | 2 +- parse-options.c | 70 ++++++++++----- t/t0040-parse-options.sh | 44 +++++----- t/t1502-rev-parse-parseopt.sh | 131 ++++++++++++----------------- t/t1502/.gitattributes | 1 + t/t1502/optionspec-neg | 8 ++ t/t1502/optionspec-neg.help | 12 +++ t/t1502/optionspec.help | 36 ++++++++ 10 files changed, 199 insertions(+), 125 deletions(-) create mode 100644 t/t1502/.gitattributes create mode 100644 t/t1502/optionspec-neg create mode 100644 t/t1502/optionspec-neg.help create mode 100755 t/t1502/optionspec.help Range-Diff gegen v2: 1: 26c03bd70c = 1: ee280b3484 subtree: disallow --no-{help,quiet,debug,branch,message} 2: ad9e7d1393 = 2: 556e79ce55 t1502, docs: disallow --no-help 3: 1bb68a4a40 = 3: 274e65ec1c t1502: move optionspec help output to a file 4: 47ab167d1c = 4: 89b0455305 t1502: test option negation 5: 961c5dfcf7 ! 5: 7cd3abcff7 parse-options: show negatability of options in short help @@ t/t0040-parse-options.sh: usage: test-tool parse-options <options> + set file to <file> String options -- -s, --string <string> -+ -s, --[no-]string <string> - get a string +- -s, --string <string> get a string - --string2 <str> get another string - --st <st> get another string (pervert ordering) ++ -s, --[no-]string <string> ++ get a string + --[no-]string2 <str> get another string + --[no-]st <st> get another string (pervert ordering) -o <str> get another string + --longhelp help text of this entry + spans multiple lines - --list <str> add str to list + --[no-]list <str> add str to list @@ t/t1502/optionspec.help: usage: some-command [options] <args>... An option group Header -C[...] option C with an optional argument - -d, --data[=...] short and long option with an optional argument -+ -d, --[no-]data[=...] -+ short and long option with an optional argument ++ -d, --[no-]data[=...] short and long option with an optional argument Argument hints -B <arg> short option required argument @@ t/t1502/optionspec.help: usage: some-command [options] <args>... + --[no-]pair <key=value> + with an equals sign in the hint + --[no-]aswitch help te=t contains? fl*g characters!` -+ --[no-]bswitch <hint> -+ hint has trailing tab character ++ --[no-]bswitch <hint> hint has trailing tab character + --[no-]cswitch switch has trailing tab character -+ --[no-]short-hint <a> -+ with a one symbol hint ++ --[no-]short-hint <a> with a one symbol hint Extras - --extra1 line above used to cause a segfault but no longer does -: ---------- > 6: 46dcdb902d parse-options: factor out usage_indent() and usage_padding() -: ---------- > 7: fdeca0d6d2 parse-options: no --[no-]no-... -: ---------- > 8: 08b2d1e861 parse-options: simplify usage_padding() -- 2.41.0