git@vger.kernel.org list mirror (unofficial, one of many)
 help / color / mirror / code / Atom feed
From: "Derrick Stolee via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Johannes.Schindelin@gmx.de, peff@peff.net,
	Junio C Hamano <gitster@pobox.com>
Subject: [PATCH v3 0/3] [RFC] Create 'core.featureAdoptionRate' setting to update config defaults
Date: Mon, 01 Jul 2019 07:29:08 -0700 (PDT)	[thread overview]
Message-ID: <pull.254.v3.git.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.254.v2.git.gitgitgadget@gmail.com>

Here is a second run at this RFC, which aims to create a "meta" config
setting that automatically turns on other settings according to a user's
willingness to trade new Git behavior or new feature risk for performance
benefits. The new name for the setting is "core.featureAdoptionRate" and is
an integer scale from 0 to 10. There will be multiple "categories" of
settings, and the intention is to allow more granular levels as necessary.

The first category is "3 or higher" which means that the user is willing to
adopt features that have been tested in multiple major releases. The
settings to include here are core.commitGraph=true,
gc.writeCommitGraph=true, and index.version=4.

The second category is "5 or higher" which means the user is willing to
adopt features that have not been out for multiple major releases. The
setting included here is pack.useSparse=true.

In the future, I would add a "7 or higher" setting which means the user is
willing to have a change of behavior in exchange for performance benefits.
The two settings to place here are 'status.aheadBehind=false' and
'fetch.showForcedUpdates=false'. Instead of including these settings in the
current series, I've submitted them independently for full review [1, 2].

Hopefully this direction is amenable to allow "early adopters" gain access
to new performance features even if they are not necessary reading every
line of the release notes.

Thanks, -Stolee

[1] https://public-inbox.org/git/pull.272.git.gitgitgadget@gmail.com/

[2] https://public-inbox.org/git/pull.273.git.gitgitgadget@gmail.com/

Derrick Stolee (3):
  repo-settings: create core.featureAdoptionRate setting
  repo-settings: use index.version=4 by default
  repo-settings: pack.useSparse=true

 Documentation/config/core.txt  | 34 +++++++++++++++++++-
 Documentation/config/gc.txt    |  4 +--
 Documentation/config/index.txt |  2 ++
 Documentation/config/pack.txt  |  3 +-
 Makefile                       |  1 +
 builtin/gc.c                   |  6 ++--
 builtin/pack-objects.c         |  9 +++---
 commit-graph.c                 |  7 ++--
 read-cache.c                   | 12 ++++---
 repo-settings.c                | 58 ++++++++++++++++++++++++++++++++++
 repo-settings.h                | 15 +++++++++
 repository.h                   |  3 ++
 t/t1600-index.sh               | 34 +++++++++++++++++---
 13 files changed, 164 insertions(+), 24 deletions(-)
 create mode 100644 repo-settings.c
 create mode 100644 repo-settings.h


base-commit: aa25c82427ae70aebf3b8f970f2afd54e9a2a8c6
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-254%2Fderrickstolee%2Fconfig-large%2Fupstream-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-254/derrickstolee/config-large/upstream-v3
Pull-Request: https://github.com/gitgitgadget/git/pull/254

Range-diff vs v2:

 1:  bdaee3ea9d ! 1:  13b9e71b38 repo-settings: create core.featureAdoptionRate setting
     @@ -71,8 +71,9 @@
      ++
      +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 present significant performance benefits. They do
     -+not modify the user-facing output of porcelain commands.
     ++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.
     ++The settings do not modify the user-facing output of porcelain commands.
      ++
      +* `core.commitGraph=true` enables reading commit-graph files.
      ++
     @@ -236,8 +237,8 @@
      +#define REPO_SETTINGS_H
      +
      +struct repo_settings {
     -+	char core_commit_graph;
     -+	char gc_write_commit_graph;
     ++	int core_commit_graph;
     ++	int gc_write_commit_graph;
      +};
      +
      +struct repository;
 2:  02c89415fe ! 2:  4fe896e423 repo-settings: use index.version=4 by default
     @@ -6,6 +6,12 @@
          This means the index could be compressed using version 4. Set this as
          a default when core.featureAdoptionRate is at least three.
      
     +    Since the index version is written to a file, this is an excellent
     +    opportunity to test that the config settings are working correctly
     +    with the different precedence rules. Adapt a test from t1600-index.sh
     +    to verify the version is set properly with different values of
     +    index.version config, core.featureAdoptionRate, and GIT_INDEX_VERSION.
     +
          Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
      
       diff --git a/Documentation/config/core.txt b/Documentation/config/core.txt
     @@ -108,9 +114,60 @@
       +++ b/repo-settings.h
      @@
       struct repo_settings {
     - 	char core_commit_graph;
     - 	char gc_write_commit_graph;
     + 	int core_commit_graph;
     + 	int gc_write_commit_graph;
      +	int index_version;
       };
       
       struct repository;
     +
     + diff --git a/t/t1600-index.sh b/t/t1600-index.sh
     + --- a/t/t1600-index.sh
     + +++ b/t/t1600-index.sh
     +@@
     + 	)
     + '
     + 
     +-test_expect_success 'GIT_INDEX_VERSION takes precedence over config' '
     ++test_index_version () {
     ++	INDEX_VERSION_CONFIG=$1 &&
     ++	REPO_ADOPTION_RATE=$2 &&
     ++	ENV_VAR_VERSION=$3
     ++	EXPECTED_OUTPUT_VERSION=$4 &&
     + 	(
     + 		rm -f .git/index &&
     +-		GIT_INDEX_VERSION=4 &&
     +-		export GIT_INDEX_VERSION &&
     +-		git config --add index.version 2 &&
     ++		rm -f .git/config &&
     ++		if test "$INDEX_VERSION_CONFIG" -ne 0
     ++		then
     ++			git config --add index.version $INDEX_VERSION_CONFIG
     ++		fi &&
     ++		if test "$REPO_ADOPTION_RATE" -ne 0
     ++		then
     ++			git config --add core.featureAdoptionRate $REPO_ADOPTION_RATE
     ++		fi &&
     ++		if test "$ENV_VAR_VERSION" -ne 0
     ++		then
     ++			GIT_INDEX_VERSION=$ENV_VAR_VERSION &&
     ++			export GIT_INDEX_VERSION
     ++		else
     ++			unset GIT_INDEX_VERSION
     ++		fi &&
     + 		git add a 2>&1 &&
     +-		echo 4 >expect &&
     ++		echo $EXPECTED_OUTPUT_VERSION >expect &&
     + 		test-tool index-version <.git/index >actual &&
     + 		test_cmp expect actual
     + 	)
     ++}
     ++
     ++test_expect_success 'index version config precedence' '
     ++	test_index_version 2 0 4 4 &&
     ++	test_index_version 2 3 0 2 &&
     ++	test_index_version 0 3 0 4 &&
     ++	test_index_version 0 3 2 2
     + '
     + 
     + test_done
 3:  5bba9062f4 ! 3:  d080065a92 repo-settings: pack.useSparse=true
     @@ -117,9 +117,9 @@
       +++ b/repo-settings.h
      @@
       struct repo_settings {
     - 	char core_commit_graph;
     - 	char gc_write_commit_graph;
     -+	char pack_use_sparse;
     + 	int core_commit_graph;
     + 	int gc_write_commit_graph;
     ++	int pack_use_sparse;
       	int index_version;
       };
       

-- 
gitgitgadget

  parent reply	other threads:[~2019-07-01 14:29 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-03 20:18 [PATCH 00/11] [RFC] Create 'core.size=large' " Derrick Stolee via GitGitGadget
2019-06-03 20:18 ` [PATCH 01/11] repo-settings: create repo.size=large setting Derrick Stolee via GitGitGadget
2019-06-03 20:42   ` Jeff Hostetler
2019-06-03 20:18 ` [PATCH 02/11] repo-settings: use index.version=4 by default Derrick Stolee via GitGitGadget
2019-06-03 20:18 ` [PATCH 03/11] repo-settings: pack.useSparse=true Derrick Stolee via GitGitGadget
2019-06-03 20:18 ` [PATCH 04/11] status: add status.aheadbehind setting Jeff Hostetler via GitGitGadget
2019-06-03 20:18 ` [PATCH 05/11] status: add warning when a/b calculation takes too long for long/normal format Jeff Hostetler via GitGitGadget
2019-06-03 20:18 ` [PATCH 07/11] repo-settings: status.aheadBehind=false Derrick Stolee via GitGitGadget
2019-06-03 20:18 ` [PATCH 06/11] status: ignore status.aheadbehind in porcelain formats Jeff Hostetler via GitGitGadget
2019-06-03 20:18 ` [PATCH 08/11] fetch: add --[no-]show-forced-updates argument Derrick Stolee via GitGitGadget
2019-06-03 20:18 ` [PATCH 10/11] pull: add --[no-]show-forced-updates passthrough to fetch Derrick Stolee via GitGitGadget
2019-06-03 20:18 ` [PATCH 09/11] fetch: warn about forced updates after branch list Derrick Stolee via GitGitGadget
2019-06-03 20:18 ` [PATCH 11/11] repo-settings: fetch.showForcedUpdates=false Derrick Stolee via GitGitGadget
2019-06-03 20:55 ` [PATCH 00/11] [RFC] Create 'core.size=large' setting to update config defaults Derrick Stolee
2019-06-04 14:43 ` Johannes Schindelin
2019-06-04 14:56   ` Derrick Stolee
2019-06-05 20:39 ` Junio C Hamano
2019-06-06 12:23   ` Derrick Stolee
2019-06-06 16:07     ` Junio C Hamano
2019-06-19 15:11 ` [PATCH v2 0/3] [RFC] Create 'core.featureAdoptionRate' " Derrick Stolee via GitGitGadget
2019-06-19 15:12   ` [PATCH v2 1/3] repo-settings: create core.featureAdoptionRate setting Derrick Stolee via GitGitGadget
2019-06-28 20:50     ` Junio C Hamano
2019-06-28 21:08       ` Derrick Stolee
2019-06-28 21:42     ` Junio C Hamano
2019-06-29  1:43       ` Derrick Stolee
2019-06-30 18:35         ` Carlo Arenas
2019-07-01 12:45           ` Derrick Stolee
2019-07-02 10:47     ` Ævar Arnfjörð Bjarmason
2019-07-02 11:09       ` Duy Nguyen
2019-07-02 14:54         ` Derrick Stolee
2019-07-02 16:59         ` Junio C Hamano
2019-06-19 15:12   ` [PATCH v2 2/3] repo-settings: use index.version=4 by default Derrick Stolee via GitGitGadget
2019-06-19 15:12   ` [PATCH v2 3/3] repo-settings: pack.useSparse=true Derrick Stolee via GitGitGadget
2019-07-01 14:29   ` Derrick Stolee via GitGitGadget [this message]
2019-07-01 14:29     ` [PATCH v3 1/3] repo-settings: create core.featureAdoptionRate setting Derrick Stolee via GitGitGadget
2019-07-01 23:27       ` Carlo Arenas
2019-07-02  9:20       ` Duy Nguyen
2019-07-02 10:53         ` Ævar Arnfjörð Bjarmason
2019-07-04 22:47         ` Jakub Narebski
2019-07-01 14:29     ` [PATCH v3 2/3] repo-settings: use index.version=4 by default Derrick Stolee via GitGitGadget
2019-07-01 14:29     ` [PATCH v3 3/3] repo-settings: pack.useSparse=true Derrick Stolee via GitGitGadget
2019-07-08 19:22     ` [PATCH v3 0/3] [RFC] Create 'core.featureAdoptionRate' setting to update config defaults Derrick Stolee
2019-07-09 18:55       ` Taylor Blau
2019-07-09 19:21       ` Junio C Hamano
2019-07-09 19:45         ` Derrick Stolee
2019-07-09 22:05           ` Junio C Hamano
2019-07-22 12:10             ` Derrick Stolee
2019-07-11 21:54       ` Jakub Narebski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=pull.254.v3.git.gitgitgadget@gmail.com \
    --to=gitgitgadget@gmail.com \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=peff@peff.net \
    --subject='Re: [PATCH v3 0/3] [RFC] Create '\''core.featureAdoptionRate'\'' setting to update config defaults' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Code repositories for project(s) associated with this inbox:

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).