Hi, this is the second version of my patch series that introduces two new config settings `init.defaultRefFormat` and `init.defaultObjectFormat` to make the default formats configurable without environment variables. Changes compared to v1: - Extend commit message to mention that we also move `repo_set_ref_storage_format()` and `repo_set_hash_algo()` into `repository_format_configure()`. - Extend commit message to explain precedence. - Fix a grammar issue. - Fix a copy/paste error in the documentation of `init.defaultRefFormat`. Thanks! Patrick Patrick Steinhardt (5): t0001: exercise initialization with ref formats more thoroughly t0001: delete repositories when object format tests finish setup: merge configuration of repository formats setup: make object format configurable via config setup: make ref storage format configurable via config Documentation/config/init.txt | 10 +++ setup.c | 101 ++++++++++++++++------- t/t0001-init.sh | 145 +++++++++++++++++++++++++++++++--- 3 files changed, 216 insertions(+), 40 deletions(-) Range-diff against v1: 1: 0d3844db32 = 1: 0d3844db32 t0001: exercise initialization with ref formats more thoroughly 2: 6b0cefef6a = 2: 6b0cefef6a t0001: delete repositories when object format tests finish 3: 16f52b75d8 ! 3: ce0fad88bb setup: merge configuration of repository formats @@ Commit message or read the config multiple times. Both of these options feel a bit unwieldy. - Merge the code into a new a new function `repository_format_configure()` - that is responsible for configuring the whole repository's format. Like - this, we can easily read the config in a single place, only. + Merge the code into a new function `repository_format_configure()` that + is responsible for configuring the whole repository's format. Like this, + we can easily read the config in a single place, only. + + Furthermore, move the calls to `repo_set_ref_storage_format()` and + `repo_set_hash_algo()` into this new function as well, such that all the + logic to configure the repository format is self-contained here. Signed-off-by: Patrick Steinhardt <ps@xxxxxx> 4: e1cdaf0f0e ! 4: 8508662062 setup: make object format configurable via config @@ Commit message "init.defaultObjectFormat", similar to "init.defaultBranch", that allows the user to configure the default object format when creating new repos. + The precedence order now is the following, where the first one wins: + + 1. The `--object-format=` switch. + + 2. The `GIT_DEFAULT_HASH` environment variable. + + 3. The `init.defaultObjectFormat` config variable. + + This matches the typical precedence order we use in Git. We typically + let the environment override the config such that the latter can easily + be overridden on an ephemeral basis, for example by scripts. + Signed-off-by: Patrick Steinhardt <ps@xxxxxx> ## Documentation/config/init.txt ## 5: a0417b7d1a ! 5: b68a841450 setup: make ref storage format configurable via config @@ Metadata ## Commit message ## setup: make ref storage format configurable via config - Similar as the preceding commit, introduce a new "init.defaultRefFormat" + Similar to the preceding commit, introduce a new "init.defaultRefFormat" config that allows the user to globally set the ref storage format used by newly created repositories. @@ Documentation/config/init.txt: endif::[] and the `GIT_DEFAULT_HASH` environment variable take precedence over this config. +`init.defaultRefFormat`:: -+ Allows overriding the default object format for new repositories. See -+ `--ref-format=` in linkgit:git-init[1]. Both the command line option -+ and the `GIT_DEFAULT_REF_FORMAT` environment variable take precedence -+ over this config. ++ Allows overriding the default ref storage format for new repositories. ++ See `--ref-format=` in linkgit:git-init[1]. Both the command line ++ option and the `GIT_DEFAULT_REF_FORMAT` environment variable take ++ precedence over this config. ## setup.c ## @@ setup.c: static void separate_git_dir(const char *git_dir, const char *git_link) -- 2.46.0.46.g406f326d27.dirty