From: Patrick Steinhardt <ps@pks.im>
To: git@vger.kernel.org
Cc: Calvin Wan <calvinwan@google.com>
Subject: [PATCH 00/21] environment: guard reliance on `the_repository`
Date: Thu, 29 Aug 2024 11:38:19 +0200 [thread overview]
Message-ID: <cover.1724923648.git.ps@pks.im> (raw)
Hi,
this patch series is the next part in the epic to get rid of
`the_repository`. This time around I focussed on the environment
subsystem, which relies on `the_repository` both implicitly and
explicitly.
The series is structured as follows:
- Patches 1 to 6 moves functions that belong to the repository
subsystem.
- Patches 7 and 8 adapt the config subsystem to stop depending on the
`the_repository` again, which had to be added by the preceding
patches.
- Patches 9 to 11 move various functionality that is misplaced and
that depends on `the_repository`.
- Patches 12 and 13 guard functionality that relies on global state
in the environment subsystem via `USE_THE_REPOSITORY_VARIBABLE`.
- Patches 14 to 21 demonstrate how to get rid of global config
variables part of the environment subsystem for a subset of them.
Overall, I think that our reliance on global variables is broken
because those variables may or may not point to the actual config of
a specific repository we currently hold. They may not even hold
state of `the_repository`, but might've been changed by subsequent
logic where we parse another repository's config.
I'm a bit unhappy that I wasn't able to adapt `is_bare_repository()` to
take a `struct repository` yet, and as a consequence a bunch of code
needs to declare `USE_THE_REPOSITORY_VARIBABLE` again. But it depends on
another global variable `is_bare_repository_cfg` which is being modified
quite heavily in multiple subsystems, and the resulting semantics are...
confusing. I guess we'll need another biggish patch series to clean up
this mess by making the setup subsystem not rely on such global state
anymore.
The series is built on top of 17d4b10aea (The tenth batch, 2024-08-28).
It merges with `next` rather cleanish, except for a single merge
conflict with headers.
Thanks!
Patrick
Patrick Steinhardt (21):
environment: make `get_git_dir()` accept a repository
environment: make `get_git_common_dir()` accept a repository
environment: make `get_object_directory()` accept a repository
environment: make `get_index_file()` accept a repository
environment: make `get_graft_file()` accept a repository
environment: make `get_git_work_tree()` accept a repository
config: document `read_early_config()` and `read_very_early_config()`
config: make dependency on repo in `read_early_config()` explicit
environment: move `odb_mkstemp()` into object layer
environment: make `get_git_namespace()` self-contained
environment: move `set_git_dir()` and related into setup layer
environment: reorder header to split out `the_repository`-free section
environment: guard state depending on a repository
repo-settings: split out declarations into a standalone header
branch: stop modifying `log_all_ref_updates` variable
refs: stop modifying global `log_all_ref_updates` variable
repo-settings: track defaults close to `struct repo_settings`
environment: stop storing "core.logAllRefUpdates" globally
environment: stop storing "core.preferSymlinkRefs" globally
environment: stop storing "core.warnAmbiguousRefs" globally
environment: stop storing "core.notesRef" globally
alias.c | 6 +-
apply.c | 2 +-
branch.c | 5 +-
builtin/am.c | 13 +-
builtin/blame.c | 2 +-
builtin/checkout.c | 4 +-
builtin/commit-graph.c | 4 +-
builtin/commit.c | 12 +-
builtin/config.c | 4 +-
builtin/count-objects.c | 2 +-
builtin/difftool.c | 8 +-
builtin/fsmonitor--daemon.c | 6 +-
builtin/gc.c | 2 +-
builtin/init-db.c | 4 +-
builtin/merge.c | 17 +--
builtin/multi-pack-index.c | 2 +-
builtin/notes.c | 22 ++--
builtin/pack-objects.c | 2 +-
builtin/prune.c | 8 +-
builtin/repack.c | 7 +-
builtin/replace.c | 2 +-
builtin/reset.c | 4 +-
builtin/rev-parse.c | 9 +-
builtin/stash.c | 16 +--
builtin/submodule--helper.c | 2 +-
builtin/update-index.c | 4 +-
builtin/worktree.c | 4 +-
builtin/write-tree.c | 3 +-
bulk-checkin.c | 4 +-
bundle-uri.c | 1 +
cache-tree.c | 3 +-
commit.c | 4 +-
config.c | 42 +------
config.h | 13 +-
dir.c | 2 +-
environment.c | 237 +++++-------------------------------
environment.h | 142 ++++++++++-----------
fetch-pack.c | 2 +-
fsmonitor.c | 2 +-
help.c | 2 +-
http-backend.c | 2 +-
name-hash.c | 3 +
notes.c | 21 ++--
notes.h | 3 +-
object-file.c | 37 +++++-
object-name.c | 4 +-
object-store-ll.h | 15 +++
pack-write.c | 2 +-
packfile.c | 2 +-
pager.c | 7 +-
path.c | 2 +
pathspec.c | 4 +-
preload-index.c | 3 +
prompt.c | 2 +
prune-packed.c | 4 +-
read-cache.c | 5 +-
ref-filter.c | 2 +-
refs.c | 7 +-
refs.h | 4 +-
refs/files-backend.c | 31 +++--
refs/reftable-backend.c | 22 ++--
repo-settings.c | 35 +++++-
repo-settings.h | 75 ++++++++++++
repository.c | 40 ++++++
repository.h | 58 ++-------
server-info.c | 3 +-
setup.c | 152 +++++++++++++++++++----
setup.h | 5 +-
sparse-index.c | 2 +
statinfo.c | 2 +
submodule.c | 2 +-
t/helper/test-config.c | 3 +-
t/helper/test-path-utils.c | 2 +
tmp-objdir.c | 7 +-
trace.c | 8 +-
trace2/tr2_cfg.c | 4 +-
transport-helper.c | 2 +-
tree-diff.c | 3 +
userdiff.c | 2 +
worktree.c | 12 +-
wt-status.c | 2 +-
81 files changed, 677 insertions(+), 554 deletions(-)
create mode 100644 repo-settings.h
--
2.46.0.421.g159f2d50e7.dirty
next reply other threads:[~2024-08-29 9:38 UTC|newest]
Thread overview: 92+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-29 9:38 Patrick Steinhardt [this message]
2024-08-29 9:38 ` [PATCH 01/21] environment: make `get_git_dir()` accept a repository Patrick Steinhardt
2024-08-29 20:15 ` Justin Tobler
2024-08-30 7:42 ` Patrick Steinhardt
2024-08-29 9:38 ` [PATCH 02/21] environment: make `get_git_common_dir()` " Patrick Steinhardt
2024-08-29 9:38 ` [PATCH 03/21] environment: make `get_object_directory()` " Patrick Steinhardt
2024-08-29 9:38 ` [PATCH 04/21] environment: make `get_index_file()` " Patrick Steinhardt
2024-08-29 9:38 ` [PATCH 05/21] environment: make `get_graft_file()` " Patrick Steinhardt
2024-08-29 9:38 ` [PATCH 06/21] environment: make `get_git_work_tree()` " Patrick Steinhardt
2024-08-29 9:38 ` [PATCH 07/21] config: document `read_early_config()` and `read_very_early_config()` Patrick Steinhardt
2024-08-29 9:38 ` [PATCH 08/21] config: make dependency on repo in `read_early_config()` explicit Patrick Steinhardt
2024-08-29 9:38 ` [PATCH 09/21] environment: move `odb_mkstemp()` into object layer Patrick Steinhardt
2024-08-29 9:38 ` [PATCH 10/21] environment: make `get_git_namespace()` self-contained Patrick Steinhardt
2024-08-29 9:38 ` [PATCH 11/21] environment: move `set_git_dir()` and related into setup layer Patrick Steinhardt
2024-08-29 9:39 ` [PATCH 12/21] environment: reorder header to split out `the_repository`-free section Patrick Steinhardt
2024-08-29 9:39 ` [PATCH 13/21] environment: guard state depending on a repository Patrick Steinhardt
2024-08-29 9:39 ` [PATCH 14/21] repo-settings: split out declarations into a standalone header Patrick Steinhardt
2024-08-29 9:39 ` [PATCH 15/21] branch: stop modifying `log_all_ref_updates` variable Patrick Steinhardt
2024-08-29 9:39 ` [PATCH 16/21] refs: stop modifying global " Patrick Steinhardt
2024-08-29 9:39 ` [PATCH 17/21] repo-settings: track defaults close to `struct repo_settings` Patrick Steinhardt
2024-08-29 9:39 ` [PATCH 18/21] environment: stop storing "core.logAllRefUpdates" globally Patrick Steinhardt
2024-08-29 9:39 ` [PATCH 19/21] environment: stop storing "core.preferSymlinkRefs" globally Patrick Steinhardt
2024-08-29 9:39 ` [PATCH 20/21] environment: stop storing "core.warnAmbiguousRefs" globally Patrick Steinhardt
2024-08-29 9:39 ` [PATCH 21/21] environment: stop storing "core.notesRef" globally Patrick Steinhardt
2024-08-29 19:59 ` [PATCH 00/21] environment: guard reliance on `the_repository` Junio C Hamano
2024-08-30 6:58 ` Patrick Steinhardt
2024-08-30 16:32 ` Junio C Hamano
2024-09-02 9:29 ` Patrick Steinhardt
2024-08-30 9:08 ` [PATCH v2 " Patrick Steinhardt
2024-08-30 9:08 ` [PATCH v2 01/21] environment: make `get_git_dir()` accept a repository Patrick Steinhardt
2024-09-11 21:12 ` karthik nayak
2024-09-12 11:17 ` Patrick Steinhardt
2024-08-30 9:09 ` [PATCH v2 02/21] environment: make `get_git_common_dir()` " Patrick Steinhardt
2024-08-30 9:09 ` [PATCH v2 03/21] environment: make `get_object_directory()` " Patrick Steinhardt
2024-08-30 9:09 ` [PATCH v2 04/21] environment: make `get_index_file()` " Patrick Steinhardt
2024-08-30 9:09 ` [PATCH v2 05/21] environment: make `get_graft_file()` " Patrick Steinhardt
2024-08-30 9:09 ` [PATCH v2 06/21] environment: make `get_git_work_tree()` " Patrick Steinhardt
2024-09-11 15:15 ` Justin Tobler
2024-09-12 11:16 ` Patrick Steinhardt
2024-08-30 9:09 ` [PATCH v2 07/21] config: document `read_early_config()` and `read_very_early_config()` Patrick Steinhardt
2024-09-11 15:59 ` Justin Tobler
2024-09-12 11:17 ` Patrick Steinhardt
2024-08-30 9:09 ` [PATCH v2 08/21] config: make dependency on repo in `read_early_config()` explicit Patrick Steinhardt
2024-09-04 1:46 ` James Liu
2024-09-04 7:14 ` Patrick Steinhardt
2024-08-30 9:09 ` [PATCH v2 09/21] environment: move `odb_mkstemp()` into object layer Patrick Steinhardt
2024-09-11 21:26 ` karthik nayak
2024-09-12 11:17 ` Patrick Steinhardt
2024-08-30 9:09 ` [PATCH v2 10/21] environment: make `get_git_namespace()` self-contained Patrick Steinhardt
2024-09-11 16:21 ` Justin Tobler
2024-08-30 9:09 ` [PATCH v2 11/21] environment: move `set_git_dir()` and related into setup layer Patrick Steinhardt
2024-08-30 9:09 ` [PATCH v2 12/21] environment: reorder header to split out `the_repository`-free section Patrick Steinhardt
2024-08-30 9:09 ` [PATCH v2 13/21] environment: guard state depending on a repository Patrick Steinhardt
2024-08-30 9:09 ` [PATCH v2 14/21] repo-settings: split out declarations into a standalone header Patrick Steinhardt
2024-08-30 9:09 ` [PATCH v2 15/21] repo-settings: track defaults close to `struct repo_settings` Patrick Steinhardt
2024-08-30 9:09 ` [PATCH v2 16/21] branch: stop modifying `log_all_ref_updates` variable Patrick Steinhardt
2024-09-11 17:14 ` Justin Tobler
2024-09-12 11:17 ` Patrick Steinhardt
2024-08-30 9:09 ` [PATCH v2 17/21] refs: stop modifying global " Patrick Steinhardt
2024-08-30 9:09 ` [PATCH v2 18/21] environment: stop storing "core.logAllRefUpdates" globally Patrick Steinhardt
2024-09-12 11:10 ` karthik nayak
2024-08-30 9:09 ` [PATCH v2 19/21] environment: stop storing "core.preferSymlinkRefs" globally Patrick Steinhardt
2024-08-30 9:09 ` [PATCH v2 20/21] environment: stop storing "core.warnAmbiguousRefs" globally Patrick Steinhardt
2024-09-04 2:10 ` James Liu
2024-08-30 9:10 ` [PATCH v2 21/21] environment: stop storing "core.notesRef" globally Patrick Steinhardt
2024-09-04 2:12 ` [PATCH v2 00/21] environment: guard reliance on `the_repository` James Liu
2024-09-04 7:14 ` Patrick Steinhardt
2024-09-12 11:14 ` karthik nayak
2024-09-12 11:17 ` Patrick Steinhardt
2024-09-12 11:29 ` [PATCH v3 " Patrick Steinhardt
2024-09-12 11:29 ` [PATCH v3 01/21] environment: make `get_git_dir()` accept a repository Patrick Steinhardt
2024-09-12 11:29 ` [PATCH v3 02/21] environment: make `get_git_common_dir()` " Patrick Steinhardt
2024-09-12 11:29 ` [PATCH v3 03/21] environment: make `get_object_directory()` " Patrick Steinhardt
2024-09-12 11:29 ` [PATCH v3 04/21] environment: make `get_index_file()` " Patrick Steinhardt
2024-09-12 11:29 ` [PATCH v3 05/21] environment: make `get_graft_file()` " Patrick Steinhardt
2024-09-12 11:29 ` [PATCH v3 06/21] environment: make `get_git_work_tree()` " Patrick Steinhardt
2024-09-12 11:29 ` [PATCH v3 07/21] config: document `read_early_config()` and `read_very_early_config()` Patrick Steinhardt
2024-09-12 11:29 ` [PATCH v3 08/21] config: make dependency on repo in `read_early_config()` explicit Patrick Steinhardt
2024-09-12 11:29 ` [PATCH v3 09/21] environment: move object database functions into object layer Patrick Steinhardt
2024-09-12 11:29 ` [PATCH v3 10/21] environment: make `get_git_namespace()` self-contained Patrick Steinhardt
2024-09-12 11:29 ` [PATCH v3 11/21] environment: move `set_git_dir()` and related into setup layer Patrick Steinhardt
2024-09-12 11:29 ` [PATCH v3 12/21] environment: reorder header to split out `the_repository`-free section Patrick Steinhardt
2024-09-12 11:30 ` [PATCH v3 13/21] environment: guard state depending on a repository Patrick Steinhardt
2024-09-12 11:30 ` [PATCH v3 14/21] repo-settings: split out declarations into a standalone header Patrick Steinhardt
2024-09-12 11:30 ` [PATCH v3 15/21] repo-settings: track defaults close to `struct repo_settings` Patrick Steinhardt
2024-09-12 11:30 ` [PATCH v3 16/21] branch: stop modifying `log_all_ref_updates` variable Patrick Steinhardt
2024-09-12 11:30 ` [PATCH v3 17/21] refs: stop modifying global " Patrick Steinhardt
2024-09-12 11:30 ` [PATCH v3 18/21] environment: stop storing "core.logAllRefUpdates" globally Patrick Steinhardt
2024-09-12 11:30 ` [PATCH v3 19/21] environment: stop storing "core.preferSymlinkRefs" globally Patrick Steinhardt
2024-09-12 11:30 ` [PATCH v3 20/21] environment: stop storing "core.warnAmbiguousRefs" globally Patrick Steinhardt
2024-09-12 11:30 ` [PATCH v3 21/21] environment: stop storing "core.notesRef" globally Patrick Steinhardt
2024-09-12 20:40 ` [PATCH v3 00/21] environment: guard reliance on `the_repository` Junio C Hamano
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cover.1724923648.git.ps@pks.im \
--to=ps@pks.im \
--cc=calvinwan@google.com \
--cc=git@vger.kernel.org \
/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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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 NNTP newsgroup(s).