Subject: [PATCH 00/20] Stop using `the_repository` in "config.c"

From: Patrick Steinhardt <[email-masked]>
Date: Wed, 7 Aug 2024 08:56:43 +0200

Hi,

I found that there had been a bunch of callsites in code
not marked with `USE_THE_REPOSITORY_VARIABLE` that still implicitly
relied on `the_repository` due to calling interfaces of "config.c".
This patch series has the goal of fixing that and making the dependency
implicit. This is done by making "config.c" stop using `the_repository`
while moving its interfaces that do use it into "config.h", guarded by
the `USE_THE_REPOSITORY_VARIABLE` macro.

The series is structured as follows:

  - Patches 1 to 7 adapt "path.{c,h}" to become `the_repository`-clean.
    This is required because "config.c" relies on the "path" subsystem
    quite a lot.

  - Patches 8 and 9 introduce functions that take a `struct repository`
    where we didn't yet equivalents for the repo-less variants.

  - Patches 10 to 16 adapt various functions to take a `struct
    repository` as input.

  - Patches 17 and 18 fix up some functions that take a `struct
    repository`, but still rely on `the_repository`.

  - Patches 19 and 20 then hide config functions that rely on
    `the_repository` behind `USE_THE_REPOSITORY_VARIABLE`.

The series is built on top of `master` at 406f326d27 (The second batch,
2024-08-01) with ps/refs-wo-the-repository at 9d36dbd1ff (refs/reftable:
stop using `the_repository`, 2024-07-30) merged into it.

Thanks!

Patrick

Patrick Steinhardt (20):
  path: expose `do_git_path()` as `repo_git_pathv()`
  path: expose `do_git_common_path()` as `strbuf_git_common_pathv()`
  editor: do not rely on `the_repository` for interactive edits
  hooks: remove implicit dependency on `the_repository`
  path: stop relying on `the_repository` when reporting garbage
  path: stop relying on `the_repository` in `worktree_git_path()`
  path: hide functions using `the_repository` by default
  config: introduce missing setters that take repo as parameter
  config: expose `repo_config_clear()`
  config: pass repo to `git_config_get_index_threads()`
  config: pass repo to `git_config_get_split_index()`
  config: pass repo to `git_config_get_max_percent_split_change()`
  config: pass repo to `git_config_get_expiry()`
  config: pass repo to `git_config_get_expiry_in_days()`
  config: pass repo to `git_die_config()`
  config: pass repo to functions that rename or copy sections
  config: don't have setters depend on `the_repository`
  config: don't depend on `the_repository` with branch conditions
  global: prepare for hiding away repo-less config functions
  config: hide functions using `the_repository` by default

 add-patch.c                       |   3 +-
 builtin/am.c                      |   9 +-
 builtin/branch.c                  |   7 +-
 builtin/bugreport.c               |   2 +-
 builtin/checkout.c                |   2 +-
 builtin/clone.c                   |   2 +-
 builtin/config.c                  |  16 +-
 builtin/count-objects.c           |   2 +-
 builtin/fast-import.c             |   4 +-
 builtin/fsck.c                    |   2 +-
 builtin/gc.c                      |   8 +-
 builtin/hook.c                    |   2 +-
 builtin/merge.c                   |   2 +-
 builtin/notes.c                   |   2 +-
 builtin/rebase.c                  |   2 +-
 builtin/receive-pack.c            |  10 +-
 builtin/remote.c                  |   4 +-
 builtin/submodule--helper.c       |   2 +-
 builtin/update-index.c            |   4 +-
 builtin/worktree.c                |   6 +-
 commit.c                          |   2 +-
 compat/fsmonitor/fsm-ipc-darwin.c |   2 +
 compat/precompose_utf8.c          |   1 +
 config.c                          | 225 ++++++++---------------
 config.h                          | 285 +++++++++++++++++++++---------
 connect.c                         |   2 +
 credential.c                      |   2 +
 daemon.c                          |   2 +
 editor.c                          |  14 +-
 editor.h                          |   3 +-
 fsmonitor.c                       |   2 +
 gpg-interface.c                   |   2 +
 graph.c                           |   2 +
 hook.c                            |  21 +--
 hook.h                            |  13 +-
 imap-send.c                       |   2 +
 mailinfo.c                        |   2 +
 merge-ll.c                        |   2 +
 parallel-checkout.c               |   2 +
 path.c                            |  97 +++-------
 path.h                            | 167 +++++++++++------
 protocol.c                        |   2 +
 read-cache.c                      |  22 +--
 refs.c                            |   4 +-
 refs/packed-backend.c             |   2 +
 refs/reftable-backend.c           |   2 +
 rerere.c                          |   4 +-
 reset.c                           |   2 +-
 revision.c                        |   2 +-
 sequencer.c                       |   6 +-
 sideband.c                        |   2 +
 submodule.c                       |   2 +-
 t/helper/test-advise.c            |   2 +
 t/helper/test-config.c            |   2 +
 t/helper/test-userdiff.c          |   2 +
 trailer.c                         |   2 +
 transport.c                       |   2 +-
 versioncmp.c                      |   2 +
 worktree.c                        |   2 +-
 wt-status.c                       |  14 +-
 60 files changed, 564 insertions(+), 455 deletions(-)

-- 
2.46.0.dirty