Repository navigation
fix(deps): update all non-major dependencies - #73
Merged
Merged
Conversation
renovate
Bot
force-pushed
the
renovate/all-minor-patch
branch
from
October 1, 2026 11:43
f58ccad to
58b70b9
Compare
renovate
Bot
force-pushed
the
renovate/all-minor-patch
branch
3 times, most recently
from
October 14, 2026 23:08
8346f5b to
e6df590
Compare
renovate
Bot
force-pushed
the
renovate/all-minor-patch
branch
from
October 20, 2026 13:33
e6df590 to
a47f7f0
Compare
renovate
Bot
force-pushed
the
renovate/all-minor-patch
branch
from
October 22, 2026 21:16
a47f7f0 to
ca7e7a5
Compare
cmeister2
approved these changes
Oct 23, 2026
|
🎉 This PR is included in version 1.0.8 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
This PR body was truncated due to platform limits.
This PR contains the following updates:
0.87.0→0.90.00.29.0→0.30.0Release Notes
GitoxideLabs/gitoxide (gix)
v0.90.0: gix v0.90.0Compare Source
New Features (BREAKING)
add worktree locking and a lock override that preserves changes
Expose
Worktree::set_lock(Option<&BStr>)andworktree::Proxy::set_lock()so callers can protect linked worktrees from pruning, moving, or removal,
including when their checkout is offline. Implement file handling in
gix_worktree::set_lock(): preserve byte-oriented reasons, append Git'strailing newline when needed, and make unlocking idempotent. Reject the
main worktree in the porcelain and avoid writing through lock-file symlinks.
Previously
Force::OverrideLockalso discarded local changes and initializedsubmodules. Add
Force::OverrideLockKeepChangesto bypass just the lock check,retaining status and submodule validation. This expands an exhaustive public
enum, so adapt the Tix caller in the same commit; existing CLI force levels
retain their behavior.
Git reference:
v2.56.0-116-g6de20f6092(
6de20f6092dcf9bdb1c8efe03db4b70c82b423dd),builtin/worktree.clock/unlock/removal,
wrapper.cnewline encoding, andt/t2403-worktree-move.sh. Git'sworktree remove -ffbypasses both lock andcleanliness checks; the new mode deliberately permits bypassing only the lock.
exposes a pre-existing unresolved
with_fetch_optionslink in clone docs.Test
one-pass deletion leaves files while default retries finish.
Performance
Reverted (BREAKING)
max-performance-safefeaturegixalways useszlib-rs, so the safe bundle no longer differs frommax-performance. Makemax-performanceown the default cache setup andupdate defaults, cache tests, and developer commands. Downstream users of
the removed name must select
max-performanceinstead.New Features
add
Submodule::resolved_url()for cloningDefinitely went through the tests quickly, besides the usual
'make it a shell script', but poked the URL resolution and Windows
special cases.
Some of the newly added drive-prefix tests are truly from another world,
and I don't think I could ever have written those, for better or worse.
Relative submodule URLs in
.gitmodulesrefer to the superproject'supstream, even when that upstream uses
ssh://,git://, or SCP syntax.Passing the existing
Submodule::url()result directly to a clone treats./and../entries as local paths instead.Document
url()as the raw configured accessor and addresolved_url()for cloning or fetching. Port Git's byte-oriented
relative_url()rulesfrom
remote.c, select the current branch's remote or the default remote,and fall back to the superproject itself when the selected URL is missing.
Make local paths absolute so the result does not depend on the caller's
working directory. Honor configuration overrides as initialized URLs,
avoiding a second remote-relative resolution of local URLs written by
git submodule init.Validate transport and local URLs, traversal errors, default-remote
selection, initialized overrides, unborn and bare repositories, and
non-UTF-8 local paths in disposable repositories. Compare resolution with
git submodule init; include native-separator coverage for Windows.expose selected global attribute paths
Allow callers that retain detached diff results to track the attribute files
selected by the repository. Reuse the existing resolver so permissions,
configuration interpolation, fallback paths, and precedence stay consistent
with the attribute stack.
Return selected paths even when files are missing so their later creation can
invalidate cached results. Per-directory attributes and
info/attributesremain separate because their locations are already known to the caller.
provide safe interrupt setup and handle
SIGHUPApplications that only need the shared cancellation flag should not have to
supply an unsafe signal callback. Add
interrupt::init_handler_default()as asafe entry point while preserving the callback and grace policy of an existing
registration, including when a UI runs inside the
gixcommand.Treat Unix
SIGHUPlike the other termination signals so long-running work canobserve cancellation and callers can restore terminal state before exiting.
It previously bypassed the shared flag and terminated immediately. Repeated
signals retain the existing forced-termination policy.
Exercise all supported termination signals and nested safe registration in
isolated subprocesses. Four interrupt tests pass with the feature enabled and
two pass without it.
add
Remote::default_branch()to learn the default branch of a remote without connecting to it.git cloneandgit remote set-headrecord the default branch of a remote in the symbolic referencerefs/remotes/<name>/HEAD, which points to the remote-tracking branch of that branch, likerefs/remotes/origin/main. Since Git 2.48,git fetchalso creates it if it's missing.make repository paths absolute without reloading
Went through the tests quite quickly, thinking their are deep and thorough
as usual.
Relative repository paths depend on the process current directory. Changing it
after opening a repository can redirect checkout validation, Git-link handling,
HEAD and object reads, or index persistence away from the intended repository.
Add
Repository::make_paths_absolute()to anchor the selected Git directory,common directory, worktree, index, and object database to the CWD captured at
opening. Unlike
reload(), this keeps runtime configuration, reference namespaces,and in-memory objects. Join paths lexically so missing worktrees remain supported
and destination symlinks are still rejected. Leave existing clones unchanged,
avoid partial updates on failure, and make repeated calls a no-op.
Recreate relative reference and object stores through their existing APIs.
Reset caches carrying relative index paths or store-specific pack IDs while
preserving outstanding snapshots.
Use an anchored repository view for initial checkout, and anchor global attribute
paths before optional-file metadata checks. Document the interpolation helper
and its captured-directory behavior.
Cover CWD changes, main and linked worktrees, bare repositories, missing checkouts,
index overrides, retained runtime state, idempotence, and failed reconstruction.
Include a Windows-only test for rejecting unresolved drive-relative index paths
without partially updating the repository.
separate linked worktree registration from checkout
Skipped over the tests, knowing they are very detailed
can be trusted by now.
Add
Repository::prepare_add_worktree()with consuming checkout and explicitpersistence. Persisted repositories can run their initial checkout later, even
after their checkout directory is removed, while failed unpersisted checkouts
roll back their owned data.
Bug Fixes
create SHA-256 repositories for
object_hash: Nonein SHA-256-only buildsPreviously a SHA-1 repository was created that the same build couldn't open.
Now
Nonefalls back to the build's default object format.respect section trust for filesystem path protections
GHSA-q54r-jf2p-rfr2 reports that path-protection configuration did not
respect the section filter used for security-relevant settings. Use the
filter for
core.protectHFS,core.protectNTFS, andgitoxide.core.protectWindows, including the latter's early read for thereference store. Keep platform defaults and boolean error handling intact.
Read-only fixtures exercise local and worktree configuration, full and
reduced trust, custom filters, trusted API overrides, and malformed
values in strict and lenient mode. Before the fix, reduced-trust settings
replaced the defaults and a rejected malformed Windows setting prevented
opening. Validation also exercises representative path names.
Git baseline: the local Git reference identifies itself as
v2.56.GIT.Its
t/t1014-read-tree-confusing.shandread-cache.c:verify_path_internalcover filesystem-specific path protections. Git's ownership policy in
setup.c:ensure_valid_ownershiprejects dubious ownership, whereasgixsupports reduced trust by filtering configuration.
match Git clone reference handling and preserve offline defaults
The prior CI run failed
check-modebecausemake_clone_refs.shhad ashebang without its executable bit. Its ARM32 tests also ran Git 2.47.3,
which rejects
clone --revision; the matrix mistook that unsupportedoption for a clone failure and disagreed with successful
gixclones.Mark the fixture executable and detect revision support from
git clone -h.Skip only revision baselines on older Git, retaining all 72 other cases
and the independent
gixrevision tests. Modern Git still exercises all81 baseline cases. Capture help despite its expected nonzero exit status.
match Git clone reference handling and preserve offline defaults
gixclones recorded remoteHEADas a direct object ID, losing thebranch relationship needed by later fetches and
Remote::default_branch().Bare clones also used the ordinary remote-tracking layout, while detached
remote heads and custom destinations selected different references from
git clone.Match Git's clone orchestration and reference selection:
refs/heads/*, without a default persistedfetch refspec, tracking
HEAD, or branch upstream configuration. Keepexplicit refspecs persistent and use
WithWorktreeplusfetch_only()for ordinary clones without a checkout.
detached
HEAD, preferringinit.defaultBranch, thenmaster, then thefirst matching branch by name. Record the selected branch's first mapped
peer before updating local
HEAD, including overwriting a branch namedHEAD; omit trackingHEADwhen the selected target is excluded.HEAD, and align shallow selection, tag policy, initial packed-referencereflogs, and persisted revision configuration with Git. Preserve the
reference directory required for repository discovery.
Preserve fetch-source identity when deriving an offline default branch.
Recognize
refs/heads/sources and exactheads/<name>sources, includingan exact source whose mapping was deduplicated against a glob. Return
Nonefor sources whose branch cannot be identified offline, count allambiguous mappings, and share reverse mapping with upstream-branch lookup.
Consult Git's
builtin/clone.candremote.c, and add deterministicGit-produced baselines for 27 cases in normal, no-checkout, and bare modes.
Compare complete references, relevant configuration, reflog IDs, checkout
contents, shallow boundaries, and success or failure with installed Git.
Keep source fixtures read-only and read their existing refs through
gix.Update API docs, CLI help and update printing, and affected clone/fetch tests.
Known difference: replacing a direct branch named
HEADwith the trackingsymref logs a null old object ID in
gix-ref; Git logs the resolved target.The baseline test explicitly checks this exception. Replacement-only custom
refspecs remain a
gixextension rather than being compared with Git'ssupplementary clone mappings.
resolve linked worktree submodules in their private Git directory
Git stores each linked superproject's submodule repositories under
.git/worktrees/<id>/modules/<name>, separately from the main worktree's.git/modules/<name>repositories. Usingcommon_dir()forSubmodule::git_dir()could open the main worktree's submodule beforeinitialization or after deinitialization of the linked submodule.
Derive the path from the superproject's
git_dir()instead. Preserve namevalidation and the precedence of an existing submodule
.gitfile.Cover initial checkout, initialization, and deinitialization using Git to
populate a disposable linked worktree created by
gix. Check that the mainsubmodule remains populated and that linked repository state and opening
follow its own lifecycle.
honor replacement refs and bypass stale commit graphs
Enable standard replacement refs by default and honor
core.useReplaceRefswith the same polarity as Git. The presence of
GIT_NO_REPLACE_OBJECTSdisables them regardless of its value.
Commit graphs contain original parent links, so skip them while object
replacements are active, including when a caller forces or supplies a
cache. Per-handle raw reads can still use the graph. Document the corrected
opening and graph behavior.
The regression first failed on the original code, then passed for ordinary
open/discovery in bare and non-bare repositories, reopening after a graft,
configuration and environment disablement, explicit raw reads, supplied
and forced graphs, merge-base, and graph removal. All 503
gixintegrationtests passed; the regression also passed with only
revision,sha1enabled.Native rebuilt
gix logandtix showmatch Git across two grafts in bothrepository kinds with pre-existing raw graphs.
Commit Statistics
Commit Details
view details
b8ef9ea)6260a55)Commit::short_id()doctest (75ca154)object_hash: Nonein SHA-256-only builds (521b3b2)36aaf51)7a22948)0a49d46)779b6c0)86d5fa6)38beb4d)7439578)8c513c5)Submodule::resolved_url()for cloning (41cb46f)a6f95af)SIGHUP(840faa0)7540f69)ad0202e)1cc509b)aa7eaea)Remote::default_branch()to learn the default branch of a remote without connecting to it. (2ddcae4)eae2fef)31185ff)79f3880)862e9c3)ca9eb08)2d8dcc4)core.longpathswhen initializing linked-submodule fixtures (7edbf02)6d1b686)54234a6)2711f6a)1b6d8da)max-performance-safefeature (7467af0)b94cd79)32a27be)e3b7670)5fccccf)v0.89.0: gix v0.89.0Compare Source
Reverted (BREAKING)
replace
fswithgix-fsgix-fsalready provides the filesystem helpers and recursive walkers.Keeping their duplicate implementation in
gix-featuresadds unnecessaryfilesystem dependencies to the foundational feature crate.
Remove the
fsmodule and thewalkdirandfs-read-dirfeatures. Migrateworkspace callers to
gix_fs, move traversal requests togix-fs/walkdir,and update the manifests, lockfile, traversal documentation, and feature
check script together.
Changed (BREAKING)
use
gix::Resultthroughout the public APIThe error migration left public
gixmethods, iterators, callbacks, andconfiguration validators returning a mixture of exceptions, I/O errors,
custom error enums, and even the rejected input itself. Callers still had
to adapt these separately despite the common
gix::Errorboundary.Use the crate-level
Resultthroughout APIs defined bygix, includingfallible configuration inputs and owned
TryFromimplementations. Keepunderlying causes, classifications, and diagnostic metadata available
through
gix::Error. Configuration adapters accept arbitrary caller errorswithout panicking or losing their causes. Object kind conversions report
validation errors. Re-exported plumbing APIs and error types required by
external traits retain their existing contracts.
Adapt
gitoxide-coreandgix-tixcallers in the same breaking change,removing explicit conversions that became identities.
New Features
remove linked worktrees safely
Expose safe linked-worktree removal through
gix, using thegix-worktreeremoval plumbing. Validate the selected worktree, inspect dirty and locked
states, and preserve the checkout unless the requested removal policy permits
deleting it.
Enable removal through
worktree-mutationand report progress and cleanupoutcomes to callers. Keep branch deletion explicit, adding compare-and-swap
branch removal for callers that have already inspected a target so concurrent
branch changes are not lost. Cover porcelain removal behavior and conditional
branch deletion in disposable repositories.
add and check out linked worktrees
Expose
Repository::add_worktree()for existing local branches and detachedcommits. Prepare the links, initialize
HEADand its reflog, check outthe commit, and write the index, rolling back created files on failure or
interruption.
Inherit worktree configuration and common attributes before checkout. Enumerate
the main and linked repositories consistently so additions and branch deletion
protect branches checked out or reserved by bisect and rebase, while matching
Git's default namespace behavior.
Support
worktree.useRelativePathswith its repository-format upgrade andextensions.relativeWorktreesvalidation. Compare behavior with Git forbare parents, separate Git directories, moved relative links, configuration
inheritance, invalid destinations, and rollback.
Format already-registered worktree destinations with
Path::display().Bug Fixes
honor section trust when merging submodule overrides
A report describes reduced-trust repository configuration overriding
submodule settings, including command-valued updates. Apply the repository's
existing configurable section filter for worktree, index, and HEAD module
sources, and retain each copied section's origin metadata.
Keep trusted API overrides usable and restrict module enumeration to the
original module definitions. The regressions first reproduced both the trust
bypass and lost provenance, then covered custom filters and every source.
Git reference:
setup.c::ensure_valid_ownership,submodule-config.c, andbuiltin/submodule--helper.catd38352cd43ab9745686d697872408bc3249a153fdistinguish shared module definitions from trusted local overrides.
read the target reflog when a symbolic ref has no log
Reflog specifications such as
refs/symref@{0}failed when the symbolicreference had no log of its own, even though its final target had one.
Follow symbolic references only when their own reflog is absent, retaining
precedence of an existing log. Reuse the reference-following helper for
chained references, cycle detection, and missing-ref errors.
The regression compares indexed and dated queries, chained references,
and existing-log precedence against isolated Git invocations in a
disposable repository.
Git reference:
/Users/byron/dev/github.com/git/git,refs.c::repo_dwim_log()prefers a reference's own log, then its resolvedtarget's log. Runtime comparisons used Git 2.54.0 (Apple Git-157).
resolve
HEADtracking branches through the current branchRepository::rev_parse_single()rejectedHEAD@{upstream},HEAD@{u},and
HEAD@{push}because it looked for tracking configuration onHEADinstead of the currently checked out branch.
Follow
HEADbefore looking up tracking configuration, reusing the existingsymbolic-reference resolution helper and retaining missing-ref errors.
The regression compares all three tracking aliases with their implicit
forms and isolated Git invocations in a disposable repository.
Git reference:
/Users/byron/dev/github.com/git/git,remote.c::repo_branch_get()treatsHEADas the current branch.Runtime comparisons used Git 2.54.0 (Apple Git-157).
match equivalent Windows paths when removing worktrees
The Windows fast-test job failed in Tix associated-branch cleanup:
C:\Users\RUNNER~1\...\topicwas reported as not registered eventhough Git had created the worktree. Git can record the long-name path,
while callers retain a short-name or verbatim path for the same directory.
The shared-base removal resolver only compared path components after
symlink resolution, which does not expand Windows short names.
After the existing component comparison fails on Windows, compare
canonical paths when both exist. Apply this at the shared equality helper
used for target selection and backlink validation. Keep the original
comparison and missing-path behavior so absent or inaccessible checkouts
can still be unregistered. Add a Windows regression that registers a
worktree with Git and removes it via its canonical path, and document
equivalent path selection.
don't apply the caller's
GIT_INDEX_FILEorGIT_WORK_TREEto a new clonepreserve caller locations in native error adapters
Passing a
#[track_caller]constructor directly tomap_err()recordsthe
FnOnceshim incoreas the caller. Useor_error()for nativeerror adapters in
gix,gix-actor, andgix-configso diagnostics recordthe adapter and use the usual exception formatting, including with
tree-error.Keep
Error::from_boxed()inside a closure for boxed trait-object errors,which
ResultExtdoes not accept. Add a regression for invalid branchmerge references and document when constructors still require closures.
anchor worktree removal paths to the repository CWD
A repository opened through a relative path retains the CWD that gives its
paths meaning. Changing the process CWD before worktree removal made exact
lookup and suffix disambiguation resolve registrations against the wrong
location. Registration scans, lock checks, and reopening a selected worktree
also depended on the process CWD.
Resolve registered checkout paths with
repo.current_dir(). Anchor proxyprivate Git directories and reopened common directories to that captured
CWD, so enumeration, lookup by ID, locks, status, and removal keep using the
original repository. Keep caller-supplied relative targets relative to the
current process CWD. Document that proxy paths are now absolute.
Extend the isolated relative-path removal test with a CWD change and lock
checks, and cover absolute lookup, ambiguous suffix disambiguation, repository
inspection, and main-worktree protection from both main and linked handles.
The new CWD cases failed before the fix.
Commit Statistics
Commit Details
view details
HEADtracking branches through the current branch (ab83e97)5146c90)794eeef)c2f1925)1d7bac7)c860df3)fswithgix-fs(cf1ba49)9272d45)49885cd)ac6e89f)9289a4c)80f4b03)d2d078f)95043b9)GIT_INDEX_FILEorGIT_WORK_TREEto a new clone (90bdb18)f819565)1c25831)6723b31)6c12f2d)20b201b)gix::Resultthroughout the public API (9a5777e)acf906f)fe2018f)a5e4378)3f6fcda)06b0098)d9f7c85)ed1f6dd)eec2e3a)5fb3dcf)v0.88.0: gix v0.88.0Compare Source
Bug Fixes (BREAKING)
preserve causes across fallible conversions
Rubber stamp, looked at diff. This is a cleanup commit.
There is going to be considerable cleanup done later as well.
Parsers and adapters discarded encoding, integer, date, signature, and
object-access failures when replacing them with context. Preserve their
concrete causes so classification and downcasting keep working after
conversion to
gix::Erroror an I/O error.Return
Exnfrom fallible path, command-line, gitdir, and pack-entryconversions where necessary, and adapt their consumers in the same change.
Packed-ref and reflog errors retain their parser sources and input details;
reflog recovery reports the actual recovery failure. Loose-object verification
now propagates lookup and enumeration failures instead of treating every
lookup error as retryable or silently skipping failed enumeration.
Remove unnecessary UTF-8 conversions for ASCII suffixes and check span bounds
before narrowing. Parsers that only return
()explicitly destructure it.No production
map_err()closure still discards a wildcard-bound error.Also preserve causes in formatting-only CLI and commit-graph adapters, where
stringification previously lost checksum corruption classifications.
locate
vi/vimin Git's core directory on Windows; changeRepository::editor() -> Option<gix_command::Prepare>On Windows, Git's bundled
vimay not be available through PATH. Resolve thedefault editor in Git's core directory first and retain the bare command as
fallback.
New Features (BREAKING)
return the local branches actually deleted
Callers that needed to know whether branch deletion removed anything had
to look up each reference separately. That duplicated reference reads and
could report stale existence information by the time deletion took its
locks.
Return sorted, deduplicated full names from the committed reference edits
whose previous values were observed under lock. Missing branches are
excluded while their stale local configuration is still removed. Expose
the same list as
deletedindelete::Error::Cleanupso callers can recoverit when only configuration cleanup fails; retain
referencesas the fullrequested batch.
The success value changes from
()toVec<FullName>, andCleanupgainsa
deletedfield. Strengthen the existing tests for loose, packed, danglingsymbolic, duplicate, missing, empty, and linked-worktree branch requests.
Changed (BREAKING)
remove redundant error aliases
rubberstamp
The crate-by-crate migration retained operation-specific error aliases to
limit downstream churn. With the migration complete, those names only hide
the shared error types and keep otherwise empty API namespaces alive.
Use the underlying
gix_errortypes directly throughout the workspace,including indirect aliases, renamed exports, test helpers, and the URL fuzz
target. Remove namespaces and files that only held forwarding aliases, and
update documentation and migration guidance to use the canonical types.
Adjust the source locations recorded in error snapshots after deleting the
alias declarations.
Keep
gix::{Error, Exn}andgix::erroras the central facade, along withunrenamed canonical re-exports, required associated types, concrete errors,
and aliases that add structure. Preserve each
Exnparameter, conditionalerror alternative, error message, and source chain. Include all downstream
adaptations in this breaking change so the stack remains buildable.
consolidate public API failures under gix::Error
rubberstamp
raise MSRV to Rust 1.88
The newly published
dua-core3.3 release used by linked-worktree removalrequires Rust 1.88, so raise every workspace crate and the advertised badge
together.
Keep the MSRV checks buildable by selecting the latest
sysinfoandrusqliterelease lines that support Rust 1.88.
New Features
add
Repository::config_path()Callers with a repository currently have to select local and worktree
configuration paths themselves before falling back to
gix::config_path().Expose that selection on
Repository, using its common directory forSource::Local, its Git directory forSource::Worktree, and its openingoptions with the existing resolver for global sources.
Keep the worktree path available even when
extensions.worktreeConfigisdisabled, so callers can locate and prepare that physical file. Preserve
the existing errors for disabled sources and sources without a file.
Git reference:
builtin/config.candDocumentation/git-config.adocinthe local Git checkout at
1630431f326e15fcde608827b5ff38422528eb59.The executable baseline was Git 2.50.1 (Apple Git-155).
expose standalone configuration paths with
config_path()Callers need to locate a configuration file before starting a
config_mut()transaction so they can inspect it, prepare its parentdirectory, or load it themselves.
Extract the existing path selection into
gix::config_path(source, options)and use it fromconfig_mut(). Preserve source and environmentpermissions, explicit path overrides, and current-directory anchoring.
Path lookup succeeds without existing parent directories or valid
configuration contents, and does not acquire a transaction lock or
evaluate transaction settings.
Git reference:
v2.55.0-782-g1630431f32,config.cfunctionsgit_system_config()andgit_global_config_paths(), plus the global andsystem override tests in
t/t1300-config.sh. The shared resolver retainsthe existing source-specific path and override behavior.
add standalone
config_mut()transactionsCallers can load global configuration with
gix::config(), but editingone physical file previously required a repository. Add a sibling that
accepts
config::Sourceandopen::Optionsand returns the existingconfig::FileTransaction.Share source-path resolution and
core.configLockTimeoutparsing withconfiguration loading and repository transactions. Honor source and
environment permissions, preserve source metadata, and keep physical
edits lossless without persisting includes or runtime overrides.
Global files use normal filesystem permissions; missing files can be
created on commit when their parent directory already exists.
allow presetting system configuration paths
Callers that already know the Git-installation and system configuration files
can now provide both paths through
gix::open::Options. The paths flow throughrepository opening and standalone configuration loading, while the existing
source permissions continue to decide whether each file is read.
Preset paths replace path discovery, but must not bypass Git's explicit
GIT_CONFIG_NOSYSTEMswitch. Read the permitted environment value once beforeselecting Git-installation and system sources, preserving the behavior already
implemented by
gix_config::Source::storage_location().add
worktreeProxy::is_prunable()+ fixExpose
worktree::Proxy::is_prunable()with Git-compatible semantics: lockedworktrees are retained, while unreadable
gitdirfiles and missing checkouttargets are prunable. Treat any filesystem entry at
lockedas a lock,including symlinks.
When opening a proxy as a repository, use the common directory already known
by its parent instead of relying on the linked worktree’s optional
commondirfile. This prevents incomplete administration from being mistaken for a
standalone repository and keeps
HEADaccess routed through the repository refstore for backend compatibility.
Fetch can consequently inspect linked-worktree heads without failing for missing
checkouts, locks, or missing and malformed
commondirfiles.edit physical configuration files atomically with
Repository::config_file_mut()Add
Repository::config_file_mut()as a transaction over one physicalconfiguration file. It acquires a symlink-aware lock before reading, parses
without expanding includes, preserves formatting and existing permissions, and
resolves relative paths against the opening CWD.
Lock acquisition honors the discoverable core.configLockTimeout key
with Git-compatible parsing and a 1000 ms default. New files also honor
core.sharedRepository after the process umask, including named, boolean,
compatibility, and explicit octal modes.
Committing only writes the file atomically. Repository state changes through
an explicit full reload, which retains normal Git-compatible validation and
rebuilds include- and bootstrap-dependent state without a second partial-refresh
path.
add
Repository::committer_or_set_fallback()Applications that configure
gitoxide.committer.*Fallbackunconditionally canoverride a complete
user.*identity because these keys resolve first.Add
Repository::committer_or_set_fallback()so callers can provide alast-resort identity without changing normal configured-user behavior. Keep the
generic helper as a wrapper, and document and test the precedence.
Bug Fixes
propagate failed fetch ancestry checks
Looked at this in detail to understand how error handling improvements
were made. It all makes sense, and teaches me to... not ignore or
skip over errors, ever, it's basically a bug unless there is a test
that proves it's not a bug.
Fetch ref updates discarded commit decoding and traversal setup errors,
treating any such failure as permission to force the update. A malformed
local or remote commit could therefore overwrite a ref without a force
refspec. Traversal errors were also ignored when looking for the ancestor.
Propagate those failures with their original causes and context. Check
object kinds explicitly to retain the existing behavior for non-commit
targets without mistaking corruption for an object-kind mismatch.
Keep rust workspace tests inside disposable repositories and isolated environments
Direct Git launches inherited repository selectors and user configuration even
when tests supplied a fixture working directory. Tests of default-environment
APIs and local Git transports also shared the runner's environment. A few
journey tests wrote beneath source directories or used the source checkout as
the repository under test.
Use the shared
gix-testtoolsGit command builder for subprocess setup, isolatedrepository options for fixtures, and isolated child processes where the real
environment-reading API must be exercised. Scope CWD changes, copy the fixture
used by an object-write test, and run shell journeys through
jtt run. Keepjourney worktrees and example output within their disposable sandboxes and
replace the attributes checkout test with a representative fixture repository.
Prompt examples also run in isolated children and must build successfully; the
old tests could ignore build failures and execute stale cached binaries.
The affected Rust crate suites, internal test-tool build, and
max-purejourneysuite pass from a source copy without Git metadata. Signing and Git-daemon
checks use only disposable keys, repositories, and local sockets.
find bundled signature programs on Windows
Git for Windows makes its bundled
gpg,gpgsm, andssh-keygenavailableby prepending installation directories to
PATH. Gitoxide can run outside thatprepared environment, so bare defaults may not resolve.
Use
gix_path::env::installation_program()for unconfigured defaults on Windowsand retain the bare name as fallback. Explicit configuration and non-Windows
behavior stay unchanged.
interpolate signature verifier program paths
Git treats
gpg.*.programvalues as pathnames and expands a leading tildebefore launching the verifier. Signing already did this, but verification kept
the raw configured string, which fails with direct program invocation.
Resolve OpenPGP, X.509, and SSH verifier programs through the existing
trusted-path handling while preserving defaults and the legacy
gpg.programfallback.
normalize safe-directory paths before trust checks
Windows canonicalization can produce verbatim paths with a
\\?\prefix whileincluded configuration metadata uses an ordinary drive path. Comparing those
representations directly prevents an explicitly safe config file from being
promoted to full trust, including after repository reloads.
Canonicalize both the path under test and configured safe-directory paths
through the filesystem before exact or wildcard comparison. Retain the existing
lexical realpath fallback for missing paths.
make identity fallbacks true last-resort values
gitoxide.{author,committer}.*Fallbackshared its configuration slot with thecorresponding environment overrides. This placed application fallbacks before
user.*, while also placingGIT_{AUTHOR,COMMITTER}_*after role-specificconfiguration.
Store environment overrides under
author.*andcommitter.*, then resolveexplicit fallback keys only after
user.*. This matches Git precedence and letsapplications configure fallbacks without replacing a valid user identity.
Commit Statistics
Commit Details
view details
worktreeProxy::is_prunable()+ fix (0af2f91)6356013)dcf08a4)0b2a5c4)9d0329a)gixAPI boundaries (ba2c7f2)daf73b5)2176245)b1e31eb)a5e8c4d)gixCargo example (2bab44c)4b9ff51)2fb9b8a)c609062)4e0f8ff)4f29e0c)92b6508)2742f05)dfc8e8c)283937b)Repository::config_path()(76502a0)be7bb02)config_path()(707818c)d7551f1)3b60097)config_mut()transactions (18ac842)6b2f33d)4a870be)36b6310)653c002)87727ee)c16300c)3c45a7d)b7bedcf)ec63505)a095334)4b42e0c)b14028d)c48fe1e)Repository::config_file_mut()(913f631)7e35849)888677a](https://redirect.github.com/GitoxideLabConfiguration
📅 Schedule: (UTC)
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR was generated by Mend Renovate. View the repository job log.