Subject: [PATCH 0/5] Create 'feature.*' config area and some centralized config parsing

From: "Derrick Stolee via GitGitGadget" <[email-masked]>
Date: Mon, 22 Jul 2019 10:54:20 -0700 (PDT)

This is a brand-new thread to replace ds/early-access. The discussion on
that thread was very helpful [1].

With this in mind, I propose instead a set of "feature.*" config settings
that form groups of "community recommended" settings (with some caveats). In
the space below, I'll list a set of possible feature names and the implied
config options.

First, the main two categories we've discussed so far: many commits and many
files. These two feature sets are for when your repo is large in one of
these dimensions. Perhaps there are other settings to include in these?

feature.manyFiles:
    index.version = 4
    core.untrackedCache = true

feature.manyCommits:
    core.commitGraph = true
    gc.writeCommitGraph = true
    (future: fetch.writeSplitCommitGraph = true)

Note: the fetch.writeSplitCommitGraph does not exist yet, but could be
introduced in a later release to write a new commit-graph (with --split) on
fetch.

The other category that has been discussed already is that of "experimental
features that we generally think are helpful but change behavior slightly in
some cases".

feature.experimental:
    pack.useSparse = true
    merge.directoryRenames = true
    fetch.negotiationAlgorithm = skipping

Specifically, this setting is for config values we are not sure will ever be
on by default, but additional testing is needed to be sure. This is
different than a possible 'feature.preview' setting that would include
config settings that we are committed to updating the defaults in a future
release. There are many ways we can take this idea in the future (including
more additions to these categories).

Thanks, -Stolee

[1] https://public-inbox.org/git/[email-masked]/

Derrick Stolee (5):
  repo-settings: consolidate some config settings
  repo-settings: add feature.manyCommits setting
  repo-settings: parse core.untrackedCache
  repo-settings: create feature.manyFiles setting
  repo-settings: create feature.experimental setting

 Documentation/config.txt             |   2 +
 Documentation/config/core.txt        |   7 +-
 Documentation/config/feature.txt     |  42 +++++++++++
 Documentation/config/fetch.txt       |   3 +-
 Documentation/config/gc.txt          |   4 +-
 Documentation/config/index.txt       |   1 +
 Documentation/config/merge.txt       |   3 +-
 Documentation/config/pack.txt        |   3 +-
 Makefile                             |   1 +
 builtin/am.c                         |   4 +-
 builtin/gc.c                         |  13 ++--
 builtin/pack-objects.c               |   9 ++-
 builtin/update-index.c               |   7 +-
 commit-graph.c                       |   7 +-
 config.c                             |  24 ------
 fetch-negotiator.c                   |  26 ++++---
 fetch-negotiator.h                   |   5 +-
 fetch-pack.c                         |  11 ++-
 merge-recursive.c                    |  32 ++++----
 merge-recursive.h                    |   1 -
 read-cache.c                         |  31 ++++----
 repo-settings.c                      | 108 +++++++++++++++++++++++++++
 repo-settings.h                      |  29 +++++++
 repository.h                         |   3 +
 t/t1600-index.sh                     |  31 ++++++--
 t/t5552-skipping-fetch-negotiator.sh |  23 ------
 26 files changed, 303 insertions(+), 127 deletions(-)
 create mode 100644 Documentation/config/feature.txt
 create mode 100644 repo-settings.c
 create mode 100644 repo-settings.h

base-commit: 9c9b961d7eb15fb583a2a812088713a68a85f1c0
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-292%2Fderrickstolee%2Frepo-settings%2Fhead-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-292/derrickstolee/repo-settings/head-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/292
-- 
gitgitgadget