git-commit-vandalism/Documentation/technical
Junio C Hamano b04ba2bb42 parse-options: deprecate OPT_BOOLEAN
It is natural to expect that an option defined with OPT_BOOLEAN() could be
used in this way:

	int option = -1; /* unspecified */

	struct option options[] = {
		OPT_BOOLEAN(0, "option", &option, "set option"),
                OPT_END()
	};
	parse_options(ac, av, prefix, options, usage, 0);

        if (option < 0)
        	... do the default thing ...
	else if (!option)
		... --no-option was given ...
	else
		... --option was given ...

to easily tell three cases apart:

 - There is no mention of the `--option` on the command line;
 - The variable is positively set with `--option`; or
 - The variable is explicitly negated with `--no-option`.

Unfortunately, this is not the case. OPT_BOOLEAN() increments the variable
every time `--option` is given, and resets it to zero when `--no-option`
is given.

As a first step to remedy this, introduce a true boolean OPT_BOOL(), and
rename OPT_BOOLEAN() to OPT_COUNTUP(). To help transitioning, OPT_BOOLEAN
and OPTION_BOOLEAN are defined as deprecated synonyms to OPT_COUNTUP and
OPTION_COUNTUP respectively.

This is what db7244b (parse-options new features., 2007-11-07) from four
years ago started by marking OPTION_BOOLEAN as "INCR would have been a
better name".

Some existing users do depend on the count-up semantics; for example,
users of OPT__VERBOSE() could use it to raise the verbosity level with
repeated use of `-v` on the command line, but they probably should be
rewritten to use OPT__VERBOSITY() instead these days.  I suspect that some
users of OPT__FORCE() may also use it to implement different level of
forcibleness but I didn't check.

On top of this patch, here are the remaining clean-up tasks that other
people can help:

 - Look at each hit in "git grep -e OPT_BOOLEAN"; trace all uses of the
   value that is set to the underlying variable, and if it can proven that
   the variable is only used as a boolean, replace it with OPT_BOOL(). If
   the caller does depend on the count-up semantics, replace it with
   OPT_COUNTUP() instead.

 - Same for OPTION_BOOLEAN; replace it with OPTION_SET_INT and arrange to
   set 1 to the variable for a true boolean, and otherwise replace it with
   OPTION_COUNTUP.

 - Look at each hit in "git grep -e OPT__VERBOSE -e OPT__QUIET" and see if
   they can be replaced with OPT__VERBOSITY().

I'll follow this message up with a separate patch as an example.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2011-09-27 17:00:04 -07:00
..
.gitignore
api-allocation-growing.txt
api-builtin.txt add gitignore entry to description about how to write a builtin 2011-08-03 11:44:23 -07:00
api-decorate.txt
api-diff.txt Documentation/technical/api-diff.txt: correct name of diff_unmerge() 2011-05-26 14:50:24 -07:00
api-directory-listing.txt
api-gitattributes.txt Rename git_checkattr() to git_check_attr() 2011-08-04 15:53:21 -07:00
api-grep.txt
api-hash.txt
api-history-graph.txt
api-in-core-index.txt
api-index-skel.txt
api-index.sh
api-lockfile.txt
api-merge.txt
api-object-access.txt
api-parse-options.txt parse-options: deprecate OPT_BOOLEAN 2011-09-27 17:00:04 -07:00
api-quote.txt
api-ref-iteration.txt add technical documentation about ref iteration 2011-08-22 15:01:14 -07:00
api-remote.txt
api-revision-walking.txt
api-run-command.txt
api-setup.txt
api-sigchain.txt Fix typos in the documentation 2011-01-04 11:23:42 -08:00
api-strbuf.txt
api-string-list.txt string-list: Add API to remove an item from an unsorted list 2011-08-14 14:19:35 -07:00
api-tree-walking.txt
api-xdiff-interface.txt
index-format.txt Documentation: clarify the invalidated tree entry format 2011-07-31 18:23:49 -07:00
pack-format.txt
pack-heuristics.txt
pack-protocol.txt Document the underlying protocol used by shallow repositories and --depth commands. 2011-06-08 18:08:21 -07:00
protocol-capabilities.txt
protocol-common.txt
racy-git.txt
send-pack-pipeline.txt
shallow.txt
trivial-merge.txt