On Mon, Jul 1, 2019 at 10:32 PM Derrick Stolee via GitGitGadget <gitgitgadget@xxxxxxxxx> wrote: > @@ -601,3 +602,22 @@ core.abbrev:: > in your repository, which hopefully is enough for > abbreviated object names to stay unique for some time. > The minimum length is 4. > + > +core.featureAdoptionRate:: > + Set an integer value on a scale from 0 to 10 describing your > + desire to adopt new performance features. Defaults to 0. As > + the value increases, features are enabled by changing the > + default values of other config settings. If a config variable > + is specified explicitly, the explicit value will override these > + defaults: This is because I'd like to keep core.* from growing too big (it's already big), hard to read, search and maintain. Perhaps this should belong to a separate group? Something like tuning.something or defaults.something. > +If the value is at least 3, then the following defaults are modified. > +These represent relatively new features that have existed for multiple > +major releases, and may present performance benefits. These benefits > +depend on the amount and kind of data in your repo and how you use it. Then instead of numeric values, maybe the user should write some sort description about the repo and we optimize for that, similar to gcc -Os optimized for size, -Ofast for compiler speed (-O<n> is all about execution speed). We could write, for example, tuning.commitHistory = {small, medium, large} and tuning.worktree = {small, large, medium} and maybe tuning.refSize and use that to optimize. We can still have different optimization levels (probably just "none", "recommended" vs "aggressive" where agressive enables most new stuff), -- Duy