git-commit-vandalism/builtin
Taylor Blau eeaa24b990 builtin/config: introduce --default
For some use cases, callers of the `git-config(1)` builtin would like to
fallback to default values when the variable asked for does not exist.
In addition, users would like to use existing type specifiers to ensure
that values are parsed correctly when they do exist in the
configuration.

For example, to fetch a value without a type specifier and fallback to
`$fallback`, the following is required:

  $ git config core.foo || echo "$fallback"

This is fine for most values, but can be tricky for difficult-to-express
`$fallback`'s, like ANSI color codes.

This motivates `--get-color`, which is a one-off exception to the normal
type specifier rules wherein a user specifies both the configuration
variable and an optional fallback. Both are formatted according to their
type specifier, which eases the burden on the user to ensure that values
are correctly formatted.

This commit (and those following it in this series) aim to eventually
replace `--get-color` with a consistent alternative. By introducing
`--default`, we allow the `--get-color` action to be promoted to a
`--type=color` type specifier, retaining the "fallback" behavior via the
`--default` flag introduced in this commit.

For example, we aim to replace:

  $ git config --get-color variable [default] [...]

with:

  $ git config --default default --type=color variable [...]

Values filled by `--default` behave exactly as if they were present in
the affected configuration file; they will be parsed by type specifiers
without the knowledge that they are not themselves present in the
configuration.

Specifically, this means that the following will work:

  $ git config --int --default 1M does.not.exist
  1048576

In subsequent commits, we will offer `--type=color`, which (in
conjunction with `--default`) will be sufficient to replace
`--get-color`.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-04-23 22:51:38 +09:00
..
add.c Merge branch 'ma/skip-writing-unchanged-index' 2018-03-21 11:30:10 -07:00
am.c Merge branch 'nd/rebase-show-current-patch' 2018-03-06 14:54:02 -08:00
annotate.c
apply.c apply: move lockfile into apply_state 2017-10-06 10:07:18 +09:00
archive.c correct error messages for NULL packet_read_line() 2018-02-08 12:37:30 -08:00
bisect--helper.c bisect: mention "view" as an alternative to "visualize" 2017-11-13 10:51:14 +09:00
blame.c blame: tighten command line parser 2018-02-07 12:41:36 -08:00
branch.c completion: use __gitcomp_builtin in _git_branch 2018-02-09 10:24:50 -08:00
bundle.c
cat-file.c Merge branch 'bw/c-plus-plus' 2018-03-06 14:54:07 -08:00
check-attr.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
check-ignore.c check-ignore: fix mix of directories and other file types 2018-02-12 13:09:35 -08:00
check-mailmap.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
check-ref-format.c Merge branch 'jc/check-ref-format-oor' into maint 2017-11-15 12:04:57 +09:00
checkout-index.c parse-options: let OPT__FORCE take optional flags argument 2018-02-09 10:24:50 -08:00
checkout.c Merge branch 'nd/parseopt-completion' 2018-03-14 12:01:07 -07:00
clean.c completion: use __gitcomp_builtin in _git_clean 2018-02-09 10:24:50 -08:00
clone.c Merge branch 'jk/abort-clone-with-existing-dest' into maint 2018-02-15 15:18:13 -08:00
column.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
commit-tree.c commit: convert commit_tree* to object_id 2018-01-30 10:42:36 -08:00
commit.c Merge branch 'ma/skip-writing-unchanged-index' 2018-03-21 11:30:10 -07:00
config.c builtin/config: introduce --default 2018-04-23 22:51:38 +09:00
count-objects.c pack: move open_pack_index(), parse_pack_index() 2017-08-23 15:12:06 -07:00
credential.c
describe.c Merge branch 'sb/describe-blob' 2018-02-27 10:33:57 -08:00
diff-files.c submodule: remove gitmodules_config 2017-08-03 13:11:02 -07:00
diff-index.c Merge branch 'ma/builtin-unleak' 2017-10-07 16:27:55 +09:00
diff-tree.c object: rename function 'typename' to 'type_name' 2018-02-14 13:10:05 -08:00
diff.c Switch empty tree and blob lookups to use hash abstraction 2017-11-13 13:20:44 +09:00
difftool.c read-cache: leave lock in right state in write_locked_index() 2017-10-07 10:20:56 +09:00
fast-export.c object: rename function 'typename' to 'type_name' 2018-02-14 13:10:05 -08:00
fetch-pack.c fetch: inherit filter-spec from partial clone 2017-12-08 09:58:52 -08:00
fetch.c Merge branch 'nd/parseopt-completion' 2018-03-14 12:01:07 -07:00
fmt-merge-msg.c Merge branch 'rs/fmt-merge-msg-string-leak-fix' 2017-12-27 11:16:23 -08:00
for-each-ref.c provide --color option for all ref-filter users 2017-10-04 11:35:29 +09:00
fsck.c Merge branch 'bw/c-plus-plus' 2018-03-06 14:54:07 -08:00
gc.c Merge branch 'nd/parseopt-completion' 2018-03-14 12:01:07 -07:00
get-tar-commit-id.c distinguish error versus short read from read_in_full() 2017-09-27 15:45:24 +09:00
grep.c Merge branch 'nd/parseopt-completion' 2018-03-14 12:01:07 -07:00
hash-object.c sha1_file: rename hash_sha1_file_literally 2018-01-30 10:42:36 -08:00
help.c help: rename 'new' variables 2018-02-22 10:08:05 -08:00
index-pack.c index-pack: support checking objects but not links 2018-03-15 10:16:24 -07:00
init-db.c init-db: rename 'template' variables 2018-02-22 10:08:05 -08:00
interpret-trailers.c Merge branch 'jk/trailers-parse' 2017-08-26 22:55:04 -07:00
log.c format-patch: reduce patch diffstat width to 72 2018-02-02 10:40:34 -08:00
ls-files.c Merge branch 'bp/fsmonitor' 2017-11-21 14:07:50 +09:00
ls-remote.c completion: use __gitcomp_builtin in _git_ls_remote 2018-02-09 10:24:51 -08:00
ls-tree.c Merge branch 'bw/config-h' 2017-06-24 14:28:41 -07:00
mailinfo.c
mailsplit.c
merge-base.c Merge branch 'ma/reduce-heads-leakfix' 2017-11-15 12:14:32 +09:00
merge-file.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
merge-index.c
merge-ours.c Merge branch 'bw/diff-opt-impl-to-bitfields' 2017-11-09 14:31:27 +09:00
merge-recursive.c
merge-tree.c tree-walk: convert fill_tree_descriptor() to object_id 2017-08-14 12:38:54 -07:00
merge.c Merge branch 'ma/skip-writing-unchanged-index' 2018-03-21 11:30:10 -07:00
mktag.c sha1_file: convert write_sha1_file to object_id 2018-01-30 10:42:36 -08:00
mktree.c Merge branch 'bw/c-plus-plus' 2018-03-06 14:54:07 -08:00
mv.c Merge branch 'ma/skip-writing-unchanged-index' 2018-03-21 11:30:10 -07:00
name-rev.c Merge branch 'mg/timestamp-t-fix' into maint 2017-10-18 14:19:09 +09:00
notes.c Merge branch 'nd/parseopt-completion' 2018-03-14 12:01:07 -07:00
pack-objects.c Merge branch 'nd/object-allocation-comments' 2018-03-14 12:01:06 -07:00
pack-redundant.c pack-redundant: rename 'new' variables 2018-02-22 10:08:05 -08:00
pack-refs.c
patch-id.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
prune-packed.c Merge branch 'jt/packmigrate' 2017-08-26 22:55:09 -07:00
prune.c Merge branch 'bw/c-plus-plus' 2018-03-06 14:54:07 -08:00
pull.c Merge branch 'nd/parseopt-completion' 2018-03-14 12:01:07 -07:00
push.c completion: use __gitcomp_builtin in _git_push 2018-02-09 10:24:52 -08:00
read-tree.c submodule: remove gitmodules_config 2017-08-03 13:11:02 -07:00
rebase--helper.c Merge branch 'gs/rebase-allow-empty-message' 2018-02-21 12:45:04 -08:00
receive-pack.c sha1_file: convert write_sha1_file to object_id 2018-01-30 10:42:36 -08:00
reflog.c Merge branch 'nd/object-allocation-comments' 2018-03-14 12:01:06 -07:00
remote-ext.c consistently use "fallthrough" comments in switches 2017-09-22 12:49:57 +09:00
remote-fd.c
remote.c Merge branch 'nd/parseopt-completion' 2018-03-14 12:01:07 -07:00
repack.c gc: do not repack promisor packfiles 2017-12-08 09:52:42 -08:00
replace.c Merge branch 'nd/parseopt-completion' 2018-03-14 12:01:07 -07:00
rerere.c avoid "write_in_full(fd, buf, len) != len" pattern 2017-09-14 15:17:59 +09:00
reset.c Merge branch 'tg/reset-hard-show-head-with-pretty' 2018-02-15 14:55:45 -08:00
rev-list.c Merge branch 'rj/warning-uninitialized-fix' 2018-03-21 11:30:15 -07:00
rev-parse.c Merge branch 'bw/c-plus-plus' 2018-03-06 14:54:07 -08:00
revert.c sequencer: improve config handling 2017-12-13 11:15:14 -08:00
rm.c Merge branch 'ma/skip-writing-unchanged-index' 2018-03-21 11:30:10 -07:00
send-pack.c Merge branch 'ma/parse-maybe-bool' 2017-08-22 10:29:03 -07:00
shortlog.c shortlog: skip format/parse roundtrip for internal traversal 2017-09-09 01:57:03 +09:00
show-branch.c Merge branch 'ot/pretty' 2017-12-27 11:16:29 -08:00
show-ref.c refs: convert peel_ref to struct object_id 2017-10-16 11:05:51 +09:00
stripspace.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
submodule--helper.c Merge branch 'pc/submodule-helper' 2018-03-28 11:04:25 -07:00
symbolic-ref.c refs: rename constant REF_NODEREF to REF_NO_DEREF 2017-11-06 10:31:08 +09:00
tag.c Merge branch 'nd/parseopt-completion' 2018-03-14 12:01:07 -07:00
unpack-file.c Merge branch 'jk/write-in-full-fix' 2017-09-25 15:24:06 +09:00
unpack-objects.c Merge branch 'nd/object-allocation-comments' 2018-03-14 12:01:06 -07:00
update-index.c Merge branch 'bp/fsmonitor' 2017-11-21 14:07:50 +09:00
update-ref.c refs: rename constant REF_NODEREF to REF_NO_DEREF 2017-11-06 10:31:08 +09:00
update-server-info.c parse-options: let OPT__FORCE take optional flags argument 2018-02-09 10:24:50 -08:00
upload-archive.c
var.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
verify-commit.c object: rename function 'typename' to 'type_name' 2018-02-14 13:10:05 -08:00
verify-pack.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
verify-tag.c Merge branch 'jk/ref-filter-colors' 2017-08-11 13:26:58 -07:00
worktree.c Merge branch 'nd/parseopt-completion' 2018-03-14 12:01:07 -07:00
write-tree.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00