Go to file
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
Documentation parse-options: deprecate OPT_BOOLEAN 2011-09-27 17:00:04 -07:00
block-sha1
builtin Merge branch 'cb/maint-ls-files-error-report' into maint 2011-09-23 14:30:49 -07:00
compat obstack: Fix portability issues 2011-08-28 22:03:26 -07:00
contrib contrib/hooks: adapt comment about Debian install location for contrib hooks 2011-09-26 16:39:34 -07:00
git-gui
git_remote_helpers transport-helper: update ref status after push with export 2011-07-19 11:17:48 -07:00
gitk-git
gitweb Merge branch 'jn/mime-type-with-params' into maint 2011-08-16 11:41:26 -07:00
mergetools mergetools/meld: Use '--output' when available 2011-08-19 10:52:16 -07:00
perl
po
ppc
t Merge branch 'cb/maint-ls-files-error-report' into maint 2011-09-23 14:30:49 -07:00
templates templates/hooks--*: remove sample hooks without any functionality 2011-09-27 10:00:35 -07:00
vcs-svn
xdiff Merge branch 'rc/histogram-diff' 2011-09-06 11:42:58 -07:00
.gitattributes
.gitignore Revert clock-skew based attempt to optimize tag --contains traversal 2011-07-14 11:02:06 -07:00
.mailmap
COPYING
GIT-VERSION-GEN Git 1.7.7-rc3 2011-09-23 15:35:57 -07:00
INSTALL
LGPL-2.1
Makefile Merge branch 'fk/use-kwset-pickaxe-grep-f' 2011-09-02 10:00:38 -07:00
README
RelNotes Git 1.7.6.4 2011-09-23 14:43:05 -07:00
abspath.c Merge branch 'js/maint-add-path-stat-pwd' into maint 2011-08-16 11:41:27 -07:00
aclocal.m4
advice.c
advice.h
alias.c
alloc.c
archive-tar.c
archive-zip.c Merge branch 'jk/archive-tar-filter' 2011-07-19 09:45:32 -07:00
archive.c Rename git_checkattr() to git_check_attr() 2011-08-04 15:53:21 -07:00
archive.h
attr.c Merge branch 'mh/attr' 2011-08-28 21:19:12 -07:00
attr.h Rename git_checkattr() to git_check_attr() 2011-08-04 15:53:21 -07:00
base85.c
bisect.c bisect: introduce support for --no-checkout option. 2011-08-04 15:34:32 -07:00
bisect.h bisect: introduce support for --no-checkout option. 2011-08-04 15:34:32 -07:00
blob.c
blob.h
branch.c Merge branch 'ci/forbid-unwanted-current-branch-update' 2011-09-16 21:48:10 -07:00
branch.h branch --set-upstream: regression fix 2011-09-16 21:47:47 -07:00
builtin.h Revert clock-skew based attempt to optimize tag --contains traversal 2011-07-14 11:02:06 -07:00
bundle.c
bundle.h
cache-tree.c
cache-tree.h
cache.h Merge branch 'cb/maint-ls-files-error-report' into maint 2011-09-23 14:30:49 -07:00
check-builtins.sh
check-racy.c
check_bindir
color.c want_color: automatically fallback to color.ui 2011-08-19 15:51:38 -07:00
color.h want_color: automatically fallback to color.ui 2011-08-19 15:51:38 -07:00
combine-diff.c Merge branch 'jk/color-and-pager' 2011-08-28 21:19:16 -07:00
command-list.txt
commit.c Merge branch 'nd/decorate-grafts' 2011-08-28 21:22:58 -07:00
commit.h Move write_shallow_commits to fetch-pack.c 2011-08-18 11:01:18 -07:00
config.c Merge branch 'jk/maint-config-param' into maint 2011-09-11 21:53:13 -07:00
config.mak.in
configure.ac
connect.c Merge branch 'dz/connect-error-report' into maint 2011-09-11 21:53:47 -07:00
convert.c Merge branch 'tr/maint-ident-to-git-memmove' 2011-09-02 13:18:25 -07:00
convert.h
copy.c
csum-file.c Merge branch 'jc/index-pack' 2011-07-19 09:54:51 -07:00
csum-file.h
ctype.c
daemon.c
date.c
decorate.c
decorate.h
delta.h
diff-delta.c
diff-lib.c Merge branch 'jc/maint-reset-unmerged-path' into maint 2011-08-16 11:41:28 -07:00
diff-no-index.c
diff.c Merge branch 'jk/color-and-pager' 2011-08-28 21:19:16 -07:00
diff.h Merge branch 'jk/color-and-pager' 2011-08-28 21:19:16 -07:00
diffcore-break.c
diffcore-delta.c
diffcore-order.c
diffcore-pickaxe.c Use kwset in pickaxe 2011-08-20 22:33:57 -07:00
diffcore-rename.c
diffcore.h combine-diff: support format_callback 2011-08-20 23:03:06 -07:00
dir.c
dir.h
editor.c
entry.c
environment.c Merge branch 'nd/maint-clone-gitdir' 2011-08-28 21:20:28 -07:00
exec_cmd.c
exec_cmd.h
fast-import.c Merge branch 'di/fast-import-tagging' 2011-08-28 21:18:48 -07:00
fetch-pack.h
fixup-builtins
fsck.c fsck: improve committer/author check 2011-08-11 12:21:07 -07:00
fsck.h
generate-cmdlist.sh misc-sh: fix up whitespace in some other .sh files. 2011-08-05 15:04:48 -07:00
gettext.c
gettext.h
git-add--interactive.perl
git-am.sh Merge branch 'gb/maint-am-patch-format-error-message' into maint 2011-09-23 14:11:18 -07:00
git-archimport.perl
git-bisect.sh bisect: take advantage of gettextln, eval_gettextln. 2011-08-30 16:19:57 -07:00
git-compat-util.h Merge branch 'cb/maint-exec-error-report' 2011-08-17 17:25:55 -07:00
git-cvsexportcommit.perl
git-cvsimport.perl
git-cvsserver.perl
git-difftool--helper.sh difftool--helper: Make style consistent with git 2011-08-19 00:09:17 -07:00
git-difftool.perl
git-filter-branch.sh Merge branch 'js/sh-style' 2011-08-17 17:35:50 -07:00
git-instaweb.sh git-instaweb: Check that correct config file exists for (re)start 2011-06-27 09:11:41 +00:00
git-lost-found.sh
git-merge-octopus.sh
git-merge-one-file.sh
git-merge-resolve.sh
git-mergetool--lib.sh Merge branch 'maint' 2011-09-19 20:46:48 -07:00
git-mergetool.sh git-mergetool: check return value from read 2011-09-19 17:41:49 -07:00
git-parse-remote.sh
git-pull.sh Merge branch 'js/i18n-scripts' 2011-08-25 16:00:16 -07:00
git-quiltimport.sh
git-rebase--am.sh
git-rebase--interactive.sh
git-rebase--merge.sh
git-rebase.sh misc-sh: fix up whitespace in some other .sh files. 2011-08-05 15:04:48 -07:00
git-relink.perl
git-remote-testgit.py (short) documentation for the testgit remote helper 2011-09-01 15:52:02 -07:00
git-repack.sh
git-request-pull.sh
git-send-email.perl
git-sh-i18n.sh gettext: add gettextln, eval_gettextln to encode common idiom 2011-08-08 12:02:16 -07:00
git-sh-setup.sh
git-stash.sh stash: take advantage of eval_gettextln 2011-08-08 12:05:22 -07:00
git-submodule.sh Merge branch 'js/i18n-scripts' 2011-08-25 16:00:16 -07:00
git-svn.perl git-svn: teach git-svn to populate svn:mergeinfo 2011-09-13 08:12:13 +00:00
git-web--browse.sh
git.c Merge branch 'jk/pager-with-external-command' 2011-08-28 21:19:25 -07:00
git.spec.in
graph.c color: delay auto-color decision until point of use 2011-08-19 15:51:34 -07:00
graph.h
grep.c Merge branch 'fk/use-kwset-pickaxe-grep-f' 2011-09-02 10:00:38 -07:00
grep.h Use kwset in grep 2011-08-20 22:33:58 -07:00
hash.c
hash.h
help.c Merge branch 'ms/help-unknown' 2011-07-22 14:43:21 -07:00
help.h
hex.c
http-backend.c
http-fetch.c Mark http-fetch without -a as deprecated 2011-08-23 21:36:20 -07:00
http-push.c whitespace: have SP on both sides of an assignment "=" 2011-08-25 14:47:07 -07:00
http-walker.c
http.c Merge branch 'rc/maint-http-wrong-free' 2011-08-11 11:03:13 -07:00
http.h Merge branch 'jc/zlib-wrap' into maint 2011-08-16 11:23:26 -07:00
ident.c
imap-send.c
kwset.c obstack: Fix portability issues 2011-08-28 22:03:26 -07:00
kwset.h Adapt the kwset code to Git 2011-08-20 22:33:57 -07:00
levenshtein.c
levenshtein.h
list-objects.c
list-objects.h
ll-merge.c Rename git_checkattr() to git_check_attr() 2011-08-04 15:53:21 -07:00
ll-merge.h
lockfile.c
log-tree.c Merge branch 'nd/decorate-grafts' 2011-08-28 21:22:58 -07:00
log-tree.h
mailmap.c
mailmap.h
match-trees.c
merge-file.c
merge-file.h
merge-recursive.c merge-recursive: Do not look at working tree during a virtual ancestor merge 2011-09-23 15:21:01 -07:00
merge-recursive.h merge-recursive: Save D/F conflict filenames instead of unlinking them 2011-08-14 14:19:35 -07:00
name-hash.c
notes-cache.c
notes-cache.h
notes-merge.c
notes-merge.h
notes.c Do not use C++-style comments 2011-08-22 10:07:07 -07:00
notes.h
object.c
object.h
pack-check.c
pack-refs.c
pack-refs.h
pack-revindex.c
pack-revindex.h
pack-write.c
pack.h
pager.c setup_pager: set GIT_PAGER_IN_USE 2011-08-18 14:17:12 -07:00
parse-options-cb.c Merge branch 'jk/color-and-pager' 2011-08-28 21:19:16 -07:00
parse-options.c parse-options: deprecate OPT_BOOLEAN 2011-09-27 17:00:04 -07:00
parse-options.h parse-options: deprecate OPT_BOOLEAN 2011-09-27 17:00:04 -07:00
patch-delta.c
patch-ids.c
patch-ids.h
path.c read_gitfile_gently(): rename misnamed function to read_gitfile() 2011-08-22 14:04:56 -07:00
pkt-line.c
pkt-line.h
preload-index.c
pretty.c
progress.c
progress.h
quote.c ls-files: fix pathspec display on error 2011-08-11 13:04:16 -07:00
quote.h
reachable.c
reachable.h
read-cache.c Merge branch 'maint' 2011-08-25 16:00:07 -07:00
reflog-walk.c
reflog-walk.h
refs.c Merge branch 'nd/maint-clone-gitdir' into maint 2011-09-23 14:21:39 -07:00
refs.h Merge branch 'js/ref-namespaces' 2011-08-17 17:35:38 -07:00
remote-curl.c Sync with 1.7.6.2 2011-09-06 11:42:12 -07:00
remote.c
remote.h
replace_object.c
rerere.c
rerere.h
resolve-undo.c
resolve-undo.h
revision.c
revision.h
run-command.c notice error exit from pager 2011-08-01 16:21:55 -07:00
run-command.h
send-pack.h
server-info.c
setup.c Merge branch 'nd/maint-clone-gitdir' 2011-08-28 21:20:28 -07:00
sh-i18n--envsubst.c Merge branch 'js/i18n-windows' 2011-06-29 17:03:13 -07:00
sha1-array.c
sha1-array.h
sha1-lookup.c
sha1-lookup.h
sha1_file.c Merge branch 'jc/maint-clone-alternates' into maint 2011-09-23 14:27:33 -07:00
sha1_name.c
shallow.c
shell.c
shortlog.h
show-index.c
sideband.c
sideband.h
sigchain.c
sigchain.h
strbuf.c Merge branch 'jk/maint-config-param' into maint 2011-09-11 21:53:13 -07:00
strbuf.h Merge branch 'jk/maint-config-param' into maint 2011-09-11 21:53:13 -07:00
streaming.c Merge branch 'jc/streaming-filter' 2011-08-01 15:00:29 -07:00
streaming.h
string-list.c string-list: Add API to remove an item from an unsorted list 2011-08-14 14:19:35 -07:00
string-list.h string-list: Add API to remove an item from an unsorted list 2011-08-14 14:19:35 -07:00
submodule.c Merge branch 'nd/maint-clone-gitdir' into maint 2011-09-23 14:21:39 -07:00
submodule.h push: Don't push a repository with unpushed submodules 2011-08-20 23:03:52 -07:00
symlinks.c
tag.c
tag.h
tar.h
test-chmtime.c
test-ctype.c
test-date.c
test-delta.c
test-dump-cache-tree.c
test-genrandom.c
test-index-version.c
test-line-buffer.c
test-match-trees.c
test-mktemp.c
test-obj-pool.c
test-parse-options.c
test-path-utils.c test-path-utils: Add subcommand "prefix_path" 2011-08-04 15:57:18 -07:00
test-run-command.c
test-sha1.c
test-sha1.sh
test-sigchain.c
test-string-pool.c
test-subprocess.c
test-svn-fe.c
test-treap.c
thread-utils.c
thread-utils.h
trace.c
transport-helper.c transport-helper: die early on encountering deleted refs 2011-07-19 11:17:48 -07:00
transport.c Sync with 1.7.6.2 2011-09-06 11:42:12 -07:00
transport.h push: Don't push a repository with unpushed submodules 2011-08-20 23:03:52 -07:00
tree-diff.c
tree-walk.c
tree-walk.h
tree.c
tree.h
unimplemented.sh
unpack-trees.c Merge branch 'jc/diff-index-quick-exit-early' into maint 2011-08-16 11:23:25 -07:00
unpack-trees.h Merge branch 'jc/diff-index-quick-exit-early' into maint 2011-08-16 11:23:25 -07:00
upload-pack.c Sync with 1.7.6.1 2011-08-24 12:18:02 -07:00
url.c
url.h
usage.c error_routine: use parent's stderr if exec fails 2011-07-31 18:27:07 -07:00
userdiff.c Merge branch 'jk/combine-diff-binary-etc' into maint 2011-08-16 11:23:24 -07:00
userdiff.h
utf8.c
utf8.h
walker.c
walker.h
wrap-for-bin.sh
wrapper.c
write_or_die.c
ws.c Rename git_checkattr() to git_check_attr() 2011-08-04 15:53:21 -07:00
wt-status.c Merge branch 'jk/maint-1.7.2-status-ignored' into maint 2011-09-11 21:51:10 -07:00
wt-status.h
xdiff-interface.c
xdiff-interface.h
zlib.c

README

////////////////////////////////////////////////////////////////

	GIT - the stupid content tracker

////////////////////////////////////////////////////////////////

"git" can mean anything, depending on your mood.

 - random three-letter combination that is pronounceable, and not
   actually used by any common UNIX command.  The fact that it is a
   mispronunciation of "get" may or may not be relevant.
 - stupid. contemptible and despicable. simple. Take your pick from the
   dictionary of slang.
 - "global information tracker": you're in a good mood, and it actually
   works for you. Angels sing, and a light suddenly fills the room.
 - "goddamn idiotic truckload of sh*t": when it breaks

Git is a fast, scalable, distributed revision control system with an
unusually rich command set that provides both high-level operations
and full access to internals.

Git is an Open Source project covered by the GNU General Public License.
It was originally written by Linus Torvalds with help of a group of
hackers around the net. It is currently maintained by Junio C Hamano.

Please read the file INSTALL for installation instructions.

See Documentation/gittutorial.txt to get started, then see
Documentation/everyday.txt for a useful minimum set of commands, and
Documentation/git-commandname.txt for documentation of each command.
If git has been correctly installed, then the tutorial can also be
read with "man gittutorial" or "git help tutorial", and the
documentation of each command with "man git-commandname" or "git help
commandname".

CVS users may also want to read Documentation/gitcvs-migration.txt
("man gitcvs-migration" or "git help cvs-migration" if git is
installed).

Many Git online resources are accessible from http://git-scm.com/
including full documentation and Git related tools.

The user discussion and development of Git take place on the Git
mailing list -- everyone is welcome to post bug reports, feature
requests, comments and patches to git@vger.kernel.org. To subscribe
to the list, send an email with just "subscribe git" in the body to
majordomo@vger.kernel.org. The mailing list archives are available at
http://marc.theaimsgroup.com/?l=git and other archival sites.

The messages titled "A note from the maintainer", "What's in
git.git (stable)" and "What's cooking in git.git (topics)" and
the discussion following them on the mailing list give a good
reference for project status, development direction and
remaining tasks.