[PATCH 0/7] setup: enforce repo passed to `create_repository()` has no state
- From
Patrick Steinhardt <ps@pks.im>
- Date
- Sep 24, 2026, 09:19 UTC
- Message-ID
- <20260924-pks-create-repository-stateless-v1-0-11499557cf31@pks.im>
Hi,
when creating a new repository via `create_repository()` we pass in a repository. This repository is acting as an in/out parameter: the caller expects that it will be fully configured after the call, but the function itself also uses some information from the passed-in repository to figure out how exactly we want to create it.
This interface is quite confusing, as it's not obvious at all what configuration of the repository is relevant. We have thus over a couple of patch series reduced the use of the parameter as in/out parameter. So now, the only piece of info that is still being propagated via the repo is "core.sharedRepository".
This patch series cleans up that last remaining part so that the repo becomes purely an out-parameter. To ensure that this is the case we also start to `repo_clear()` it as a first step.
Besides simplifying the interface, the intent is also to go further into the direction of unifying repository initialization in a follow-up patch series.
The series is built on top of 0f8e75abeb (Revert "Merge branch 'en/no-amend-during-conflicts'", 2026-09-23) with ps/odb-alternates-at-creation at d1019ac894 (odb/source: remove the ability to write alternates, 2026-09-10) merged into it.
Thanks!
Patrick
---
Patrick Steinhardt (7):
path: drop useless `safe_create_leading_directories_1()`
path: introduce `safe_create_leading_directories_no_share_const()`
builtin/init: refactor messy creation of leading directories
builtin/init: move handling of "core.sharedRepository" into "setup.c"
builtin/clone: don't apply "core.sharedRepository" to leading dirs
repository: adapt `repo_clear()` to fully reset the repository
setup: enforce that passed-in repo does not carry relevant statebuiltin/clone.c | 4 ++-- builtin/init-db.c | 15 ++------------- path.c | 13 ++++++------- path.h | 1 + repository.c | 37 ++++++++++++++++++------------------- repository.h | 2 +- setup.c | 6 ++++++ t/t1301-shared-repo.sh | 42 ++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 78 insertions(+), 42 deletions(-)
--- base-commit: 6b6fe25b12e5324f2fdaf8c73816b9d2207e9404 change-id: 20260916-pks-create-repository-stateless-f0ca03cca689