Skip to content

config: move pack size limit into repo config

Joy via GitGitGadget git 3 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v3 Latest2 patches 1 replyIn review
  2. v22 patches 5 repliesSuperseded
  3. v11 patch 3 repliesSuperseded

Changes since v1 from the cover letter

================

Patches in v3 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/2repo: zero-initialize configuration valuesenvironment.c+2 -130 replies
2/2config: move pack size limit into repo configbuiltin/pack-objects.c environment.c environment.h +1 more+7 -81 reply

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v3 yet.

Read the v3 thread

Cover letter [PATCH v3 0/2] [Outreachy] config: move pack size limit into repo config

This series moves pack.packsizelimit from a standalone global variable into struct repo_config_values, as part of the ongoing effort to reduce Git's reliance on global state and make its code easier to reuse as a library.

The series includes two patches:

1. Update repo_config_values_init() to use memset() for zero-initialization, while keeping the defaults that require explicit values.
2. Move the pack size limit into repo_config_values and update the relevant code to read it from there.

Changes since v1
================

Thanks to Patrick Steinhardt for reviewing the first version and suggesting the initialization cleanup.

Following his feedback, I've:

* Added a preparatory patch to simplify how repository configuration values are initialized.
* Reworked the main commit message to explain the existing problem before describing the change.
* Removed the need to explicitly initialize the new pack size limit field to zero.

Testing
=======

I built Git and ran the relevant configuration and pack-object tests:

* make -j2 — passed.
* t1300-config.sh — 518 successful tests.
* t5300-pack-object.sh — 63 passed, 2 skipped, 0 failed.

Both test runs reported permission errors during cleanup after the tests had completed.

Joy Gundu (2):
repo: zero-initialize configuration values
config: move pack size limit into repo config

 builtin/pack-objects.c |  2 +-
 environment.c          | 19 +++----------------
 environment.h          |  3 +--
 object-file.c          |  6 ++++--
 4 files changed, 9 insertions(+), 21 deletions(-)

base-commit: 47fdf2208c5b94c8cc01c106b8f7c85efb91c926
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-2271%2FJoiejoie1%2Foutreachy%2Fglobal-state-mini-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-2271/Joiejoie1/outreachy/global-state-mini-v3
Pull-Request: https://github.com/gitgitgadget/git/pull/2271

Range-diff vs v2:

1: df93a2a86c ! 1: dc18b66976 repo: zero-initialize configuration values
@@ Metadata
## Commit message ##
repo: zero-initialize configuration values

+ When initializing struct repo_config_values, we explicitly initialize
+ several members to zero or NULL. This adds unnecessary boilerplate as
+ more configuration values are added to the structure.
+
+ Zero-initialize the entire structure with memset() instead, leaving
+ only members with non-zero defaults to be initialized individually.
+

## environment.c ##
@@ environment.c: int git_default_config(const char *var, const char *value,
cfg->has_symlinks = platform_has_symlinks();
- cfg->use_nanosec = 0;

- /* section "sparse" config values */
+- /* section "sparse" config values */
- cfg->sparse_expect_files_outside_of_patterns = 0;

/* section "branch" config values */
2: 05ae50b5da ! 2: ba34e82a0a config: move pack size limit into repo config
@@ environment.c: int git_default_config(const char *var, const char *value,
return 0;
}

+@@ environment.c: void repo_config_values_init(struct repo_config_values *cfg)
+ cfg->trust_executable_bit = 1;
+ cfg->has_symlinks = platform_has_symlinks();
+
+-
+ /* section "branch" config values */
+ cfg->branch_track = BRANCH_TRACK_REMOTE;
+ }

## environment.h ##
@@ environment.h: struct repo_config_values {

Signature · 1 line
gitgitgadget