Reverted (BREAKING)
-
replace
fswithgix-fsgix-fsalready provides the filesystem helpers and recursive walkers.
Keeping their duplicate implementation ingix-featuresadds unnecessary
filesystem dependencies to the foundational feature crate.Remove the
fsmodule and thewalkdirandfs-read-dirfeatures. Migrate
workspace callers togix_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, and
configuration 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 commongix::Errorboundary.Use the crate-level
Resultthroughout APIs defined bygix, including
fallible configuration inputs and ownedTryFromimplementations. Keep
underlying causes, classifications, and diagnostic metadata available
throughgix::Error. Configuration adapters accept arbitrary caller errors
without 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-worktree
removal 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 cleanup
outcomes 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 detached
commits. Prepare the links, initializeHEADand its reflog, check out
the 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 and
extensions.relativeWorktreesvalidation. Compare behavior with Git for
bare 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, and
builtin/submodule--helper.catd38352cd43ab9745686d697872408bc3249a153f
distinguish 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 symbolic
reference 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 resolved
target'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},
andHEAD@{push}because it looked for tracking configuration onHEAD
instead of the currently checked out branch.Follow
HEADbefore looking up tracking configuration, reusing the existing
symbolic-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 even
though 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 clone -
preserve caller locations in native error adapters
Passing a
#[track_caller]constructor directly tomap_err()records
theFnOnceshim incoreas the caller. Useor_error()for native
error adapters ingix,gix-actor, andgix-configso diagnostics record
the adapter and use the usual exception formatting, including with
tree-error.Keep
Error::from_boxed()inside a closure for boxed trait-object errors,
whichResultExtdoes not accept. Add a regression for invalid branch
merge 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 proxy
private 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
- 30 commits contributed to the release over the course of 13 calendar days.
- 13 days passed between releases.
- 11 commits were understood as conventional.
- 2 unique issues were worked on: #3039, #3040
Commit Details
view details
- #3039
- Resolve
HEADtracking branches through the current branch (ab83e97)
- Resolve
- #3040
- Read the target reflog when a symbolic ref has no log (5146c90)
- Uncategorized
- Prepare changelogs prior to release (794eeef)
- Merge pull request #3042 from cruessler/branch-9 (c2f1925)
- Merge pull request #3032 from GitoxideLabs/sec-audit (1d7bac7)
- Honor section trust when merging submodule overrides (c860df3)
- Replace
fswithgix-fs(cf1ba49) - Merge pull request #3046 from GitoxideLabs/gix-error-optional-bstr (9272d45)
- Merge pull request #3047 from GitoxideLabs/revparse-fixes (49885cd)
- Merge pull request #2938 from GitoxideLabs/tix-improvements (ac6e89f)
- Match equivalent Windows paths when removing worktrees (9289a4c)
- Merge pull request #3033 from GitoxideLabs/gix-cli-progress-cleanup (80f4b03)
- Merge pull request #3035 from any-victor/fix/clone-ignores-caller-repository-env (d2d078f)
- Review (95043b9)
- Don't apply the caller's
GIT_INDEX_FILEorGIT_WORK_TREEto a new clone (90bdb18) - Merge pull request #3022 from GitoxideLabs/release-testtools (f819565)
- Use existing error helpers for guards and conversions (1c25831)
- Preserve caller locations in native error adapters (6723b31)
- Merge pull request #3029 from cruessler/fix-minor-sha-256-issues-in-cli (6c12f2d)
- Remove outdated note saying SHA-256 is not fully supported (20b201b)
- Use
gix::Resultthroughout the public API (9a5777e) - Merge pull request #3025 from GitoxideLabs/worktree-create (acf906f)
- Anchor worktree removal paths to the repository CWD (fe2018f)
- Remove linked worktrees safely (a5e4378)
- Merge pull request #3026 from GitoxideLabs/status-fix (3f6fcda)
- Merge pull request #3027 from cruessler/remove-sha-1-default-in-pipeline (06b0098)
- Merge pull request #2977 from GitoxideLabs/worktree-create (d9f7c85)
- Fixup! feat(gix): add and check out linked worktrees (ed1f6dd)
- Add and check out linked worktrees (eec2e3a)
- Merge pull request #3020 from GitoxideLabs/report-september (5fb3dcf)