Skip to content

Commit 2fc4679

Browse files
committed
SoC-2026: tweak the global state idea as per Phillip's suggestion
See: https://lore.kernel.org/git/CAP8UFD2Q7gctwzGOe+rbgdXZSbDbV0dmM-cx4qt_d8nKi88=HA@mail.gmail.com/T/#t
1 parent fe56a9b commit 2fc4679

File tree

1 file changed

+29
-22
lines changed

1 file changed

+29
-22
lines changed

SoC-2026-Ideas.md

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -33,28 +33,35 @@ the same.
3333

3434
This project focuses on modernizing Git's environment handling by refactoring
3535
the `environment.c` code to reduce global state. The goal is to move environment
36-
variables and configuration from global scope into more appropriate local
37-
contexts, primarily into the `struct repository` / `struct repository_settings`
38-
structure. This architectural improvement will make the codebase more
39-
maintainable and potentially enable better multi-repository handling in the
40-
future.
41-
42-
The project involves careful refactoring of Git's core environment
43-
handling code, requiring strong C programming skills and attention to
44-
detail. Design discussions on the mailing list to find the best way to
45-
refactor some variables will likely happen.
46-
47-
The contributor will identify global variables that can be moved to
48-
local scope, implement the necessary structural changes, and ensure
49-
all affected code paths continue to work correctly. This includes
50-
updating tests, fixing any regressions, and documenting the
51-
architectural changes.
52-
53-
**Getting started:** Build Git from source, study the `environment.c` file
54-
and its global variables, understand how `struct repository` and
55-
`struct repository_settings` work, and submit a micro-patch to demonstrate
56-
familiarity with the codebase. Review recent mailing list discussions about
57-
reducing global state.
36+
variables and configuration from global scope into more appropriate local contexts.
37+
This architectural improvement will make the codebase more maintainable and
38+
potentially enable better multi-repository handling in the future.
39+
40+
> Note: While `struct repository` / `struct repository_settings` may seem like a
41+
> natural target for this refactoring, contributors should be cautious about moving
42+
> settings there. `struct repository_setting`s` was originally designed to hold
43+
> config settings that are lazily parsed. Moving eagerly parsed config settings
44+
> into that struct can cause Git to die in unexpected places when lazy parsing
45+
> fails on an invalid config setting. Any such move requires careful analysis
46+
> and should not be done as a blanket approach.
47+
48+
The project involves careful refactoring of Git's core environment handling code,
49+
requiring strong C programming skills and attention to detail. Design discussions
50+
on the mailing list to find the best way to refactor individual variables will
51+
likely happen.
52+
53+
The contributor will identify global variables that can be moved to local scope,
54+
implement the necessary structural changes, and ensure all affected code paths
55+
continue to work correctly. This includes updating tests, fixing any regressions,
56+
and documenting the architectural changes.
57+
58+
**Getting started**: Build Git from source, study the `environment.c` file and its
59+
global variables, and understand how `struct repository` and `struct repository_settings`
60+
work. For a concrete example of the kind of work this project involves, review
61+
[Bello Caleb Olamide's Outreachy project](https://lore.kernel.org/all/48821a3848bef25c13038be8377ad73e7c17a924.1771258573.git.belkid98@gmail.com/)
62+
to get a sense of the approach and subtleties involved. Submit a micro-patch
63+
to demonstrate familiarity with the codebase, and review recent mailing
64+
list discussions about reducing global state.
5865

5966
_Expected Project Size_: 90 or 175 hours or 350 hours
6067

0 commit comments

Comments
 (0)