[PATCH v2 0/3] migrate encoding settings and bubble up repository
- From
Tian Yuchen <a3205153416@gmail.com>
- Date
- Feb 28, 2026, 19:01 UTC
- Message-ID
- <20260228190201.3684705-1-a3205153416@gmail.com>
- In-Reply-To
- <20260228040727.2057192-1-a3205153416@gmail.com>
Hi everyone,
As part of the ongoing libification effort and my GSoC 2026 proposal, this series migrates commit and log encoding settings into 'struct repo_settings' and bubbles up the 'struct repository *' dependency.
Previously, 'git_commit_encoding' and 'git_log_output_encoding' were global, where core APIs implicitly rely on 'the_repository'. This series resolves this in three steps:
- Patch 1: Moves encoding configs into 'repo_settings' using lazy
-loading, safely handling CLI overrides in 'revision.c'. - Patch 2: Updates 'commit_tree()' and related APIs in 'commit.c'
to accept a repository context, passing it down the call chain. - Patch 3: Updates 'pretty_print_commit()' and 'pp_commit_easy()'.
We leverage existing contextual pointers ('diffopt->repo' and
'revs->repo') to pass the repository downwards.To maintain a clean boundary, leaf callers in 'builtin/' and top-level components (e.g., 'bundle.c') fall back to 'the_repository'.
(Though series passes the full test suite and is verified with 'S ANITIZE=address,undefined', I'm quite certain I must have inadvertently left out some parts. Therefore, this patch series is currently more of a self-archival exercise than a final submission.
For example, I might have left out some of the exsiting contextual pointers in patch 2. Will check in the following days.)
Regards,
Yuchen
Tian Yuchen (3): environment: migrate encoding settings to repo-settings commit: pass 'struct repository' to commit creation APIs pretty: pass 'struct repository' to pretty_print_commit()
builtin/am.c | 6 +++--- builtin/blame.c | 2 +- builtin/checkout.c | 4 ++-- builtin/commit-tree.c | 2 +- builtin/commit.c | 8 ++++---- builtin/history.c | 2 +- builtin/log.c | 4 ++-- builtin/mailinfo.c | 2 +- builtin/merge.c | 6 +++--- builtin/rebase.c | 2 +- builtin/reset.c | 2 +- builtin/rev-list.c | 4 ++-- builtin/shortlog.c | 4 ++-- builtin/show-branch.c | 2 +- builtin/stash.c | 12 ++++++------ bundle.c | 4 ++-- commit.c | 31 +++++++++++++++++-------------- commit.h | 6 ++++-- diff.c | 2 +- environment.c | 37 +++++++++++-------------------------- environment.h | 7 ++----- log-tree.c | 6 +++--- notes-cache.c | 4 ++-- notes-cache.h | 2 +- notes-utils.c | 2 +- pretty.c | 13 +++++++------ pretty.h | 4 ++-- range-diff.c | 10 +++++----- remote-curl.c | 3 ++- replay.c | 4 ++-- repo-settings.c | 7 +++++++ repo-settings.h | 3 +++ revision.c | 11 ++++++----- sequencer.c | 36 ++++++++++++++++++------------------ submodule.c | 2 +- 35 files changed, 128 insertions(+), 128 deletions(-)
-- 2.43.0