Skip to content

chore(deps): update rust crate gix to 0.86 - #31

Open
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/gix-0.x
Open

chore(deps): update rust crate gix to 0.86#31
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/gix-0.x

Conversation

@renovate

@renovate renovate Bot commented Mar 29, 2026

Copy link
Copy Markdown
Contributor

ℹ️ Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Type Update Change
gix workspace.dependencies minor 0.800.86

Release Notes

GitoxideLabs/gitoxide (gix)

v0.86.0: gix v0.86.0

Compare Source

New Features (BREAKING)
  • use dir-cache for accelerated status calls on Windows
Changed (BREAKING)
  • replace maybe-async with bisync.
    Replace the globally feature-selected maybe-async dependency with bisync 0.3 and
    re-export the locally selected macro mode from gix-protocol.

    Also use it to deduplicate portions which previously couldn't be handled.

  • adapt to lifetime-free configuration files in gix-config
    Update repository configuration storage, snapshots, overrides, and caches
    to use the self-contained gix_config::File representation. Configuration
    can now move through repository initialization, cloning, and remote setup
    without artificial input lifetimes or conversions to 'static.

    • Return owned BString, PathBuf, OsString, and FullName values
      from configuration-derived lookups.
    • Simplify fallible optional access from Option<Result<T, E>> to
      Result<Option<T>, E>, allowing errors to propagate naturally with
      ?.
    • Accept common string and byte-string inputs through AsBStr in
      configuration setters, converters, remote lookup, and remote saving.
    • Remove widespread Cow construction, into_owned(), and redundant
      cloning from configuration consumers.
    • Preserve configuration-key context when converting owned values and
      enriching validation errors.

    Adapt config-tree conversions for the new owned values and optional-result
    shape, including booleans, integers, paths, URLs, refspecs, timeouts,
    compression levels, and reference names.

    Return owned remote names, default remote names, branch tracking
    references, and submodule paths so these results are independent of the
    repository configuration borrow. Protocol feature values likewise use
    owned strings.

    Update repository opening, initialization, cloning, remotes, filters,
    status, submodules, and related tests to use the lifetime-free APIs.

Other
  • update dirwalk::basics for collapsed empty-directory trees
    some/ (a tree of only empty directories) now collapses to an empty
    directory and is skipped when empty directories aren't emitted, matching
    Git which treats a tree with no files as clean. See #​2490.
New Features
  • add tix to the gix CLI
  • add Repository::normalize_path()
    This way, one won't have to use the Pattern + normalize workaround anymore.
  • add discover_opts() as sibling to open_opts().This makes isolated discovery easier, at the cost of less control compared to itsgix::ThreadSafeRepository` counterpart.
  • respect configured zlib compression levels
    Understand and validate core.compression, core.looseCompression and pack.compression, including git's -1 mapping to the zlib default. Apply these settings when writing loose objects and receiving packs.
  • introduce lazy, thread-local evaluation of core.fscache on Windows
  • add Connection::configured_credentials_for_current_url().
    It extracts the URL from the input action, which is relevant in case
    of redirects which changes the initial url.
Chore
  • let archived fixtures bypass Git version gates

    Git-dependent fixture tests currently skip outright when the installed Git is
    incompatible, even when a checked-in archive contains a known-good fixture that
    could run safely. This also keeps 32-bit CI pinned to Debian 12 because Debian
    13 ships affected Git 2.47.x.

    Use the guarded scripted-fixture loaders for minimum-version worktree tests and
    the shared rev-spec fixture, then return 32-bit CI to Debian stable.

    Git 57fb139 introduced reversed :/ traversal in 2.47.x; Git 0ff919e
    restored youngest-first ordering in 2.48.0.

Bug Fixes
  • avoid treating symbolic remote names as URLs
    --- agent

    Configured remotes without an effective fetch URL exposed their symbolic name
    as a local-path URL.

    Only use a remote name as the missing fetch URL when remote-name classification,
    a non-file transport, or native absolute-path detection identifies it as a URL.

    Git baseline: remote.c:remotes_remote_get_1() adds the explicitly supplied name
    as a URL when the remote has no configured URL; t/t5505-remote.sh covers remote
    get-url behavior. This change intentionally diverges for symbolic names.

  • always treat submodule names as relative.
    Previously it would assume they are relative, join them with
    a base path, which could promptly be overridden by an absolute
    submodule name, which is valid for Git as well.

    Code handling submodule paths is now aware and won't accidentally
    break out of the repository anymore.

  • honor credential.protectProtocol for helper exchanges

  • preserve multiple remote URLs
    Configured remotes can have multiple remote..url or remote..pushUrl
    values, but gix::Remote kept only one value because lookup used the singular
    config accessor. That meant the most recent config value won, while Git exposes
    every effective URL and uses the first one for the singular get-url form.

    Add ordered URL storage to gix::Remote and expose Remote::urls(Direction) for
    all effective URLs. Keep Remote::url(Direction) as the singular compatibility
    API, now returning the first effective URL. Fetch URLs used as push fallbacks
    try pushInsteadOf first and then insteadOf, matching Git behavior.

    The regression fixture records Git 2.50.1 behavior with git remote get-url:
    without --all it prints the first configured URL, and with --all it prints all
    configured URLs in order for both fetch and push.

  • keep core.worktree-derived worktree paths in the caller's path namespace
    Since b1c1cce, relative core.worktree values from repository-owned
    configuration were resolved against the symlink-resolved git dir whenever
    that differed from the logical git dir. That is correct when the .git
    directory itself is reached through a symlink (#​2052), but it also fired
    when merely an ancestor directory is a symlink - like /var on macOS,
    where TMPDIR defaults to a path inside the symlinked /var/folders.

    In that case a submodule repository opened through the symlinked path
    would return a canonicalized workdir() while Repository::path() and
    all paths the caller holds remain in the symlinked namespace, breaking
    prefix-based path logic such as
    repo.workdir().strip_prefix(parent_worktree_dir).

    Now the symlink-resolved base is only used when resolving the relative
    worktree path against the logical and the resolved git dir leads to
    different directories on disk. If both denote the same directory, the
    logical path is kept, so all paths of the opened repository remain
    consistent with the path it was opened with.

  • consume open_path_as_is after resolving repository paths

  • Repository::kind() detects linked worktrees of bare repos

  • pass through the allocation limit
    This is particularly important in untrusted repositories, which
    get a reduced allocation limit.

  • gix::open() now handles repo.git directories correctly.
    Previously they were incorrectly assumed to be the actual .git repository
    and treated as such.

  • resolve relative core.worktree from real git dir

Chore (BREAKING)
  • adapt to changes in gix-config
    Marked as breaking explicitly to as we know paramter types were
    changed to use convenience traits.
Commit Statistics
Commit Details
view details
  • #​1622
    • Let archived fixtures bypass Git version gates (1568b31)
  • #​2024
    • Respect configured zlib compression levels (319cec2)
  • #​2052
    • Resolve relative core.worktree from real git dir (b1c1cce)
  • #​2696
    • Preserve multiple remote URLs (5f244b3)
  • Uncategorized
    • Update changelogs prior to release (cb6ec7d)
    • Release gix-trace v0.1.21, gix-validate v0.11.3, gix-path v0.12.3, gix-utils v0.3.5, gix-config-value v0.19.0, gix-prompt v0.16.0, gix-sec v0.14.2, gix-url v0.37.0, gix-credentials v0.39.0, safety bump 18 crates (f0ec710)
    • Merge pull request #​2809 from GitoxideLabs/gix-tix-mvp (443b401)
    • Add tix to the gix CLI (31a94aa)
    • Merge pull request #​2737 from GitoxideLabs/encoding-fallback-pony (2315ede)
    • Adapt to changes in gix-filter (552402f)
    • Merge pull request #​2735 from GitoxideLabs/better-exclude-handling (02cb162)
    • Add Repository::normalize_path() (6fe97a9)
    • Add discover_opts() as sibling to open_opts().` (2f4c488)
    • Merge pull request #​2734 from GitoxideLabs/url-parse-convenience (e7af50e)
    • Adapt to changes in gix-url (271454b)
    • Merge pull request #​2732 from GitoxideLabs/testools-use-archive (a3e9a77)
    • Merge pull request #​2729 from GitoxideLabs/improvements (9949e9f)
    • Avoid treating symbolic remote names as URLs (4d47453)
    • Merge pull request #​2728 from GitoxideLabs/try-bisync (adf4b7a)
    • Replace maybe-async with bisync. (c3f2244)
    • Merge pull request #​2725 from GitoxideLabs/gix-config-improvements (5982dfe)
    • Adapt to changes in gix-config (6aa934a)
    • Merge pull request #​2721 from GitoxideLabs/remove-kstring (e70732a)
    • Adapt to changes in gix-attributes (e11d7a2)
    • Merge pull request #​2722 from GitoxideLabs/reasons (c16b5a1)
    • Replace lint allowances with expectations (43ff87a)
    • Merge pull request #​2667 from GitoxideLabs/lifetime-free-config-parser (55b5158)
    • Adapt to lifetime-free configuration files in gix-config (582d7b5)
    • Merge pull request #​2718 from GitoxideLabs/submodule-name-reject-absolute (402babd)
    • Always treat submodule names as relative. (53515b6)
    • Merge pull request #​2715 from GitoxideLabs/fixup-credentials (299d16b)
    • Adapt the credential command to explicit context options in gix-credentials (f88cf10)
    • Merge pull request #​2714 from GitoxideLabs/fix-credentials-parsing (cf3053a)
    • Honor credential.protectProtocol for helper exchanges (d89bda0)
    • Release gix-path v0.12.2, gix-error v0.2.5, gix-utils v0.3.4, gix-date v0.15.6, gix-url v0.36.2, gix-credentials v0.38.2 (27aec47)
    • Merge pull request #​2698 from GitoxideLabs/multi-remote-url (7056d62)
    • Add missing SHA256 archive (432e2b1)
    • Merge pull request #​2695 from ameyypawar/fix/2024-compression-level (6e1c4a2)
    • Review (f1ac335)
    • Merge pull request #​2697 from mtsgrd/fix/keep-worktree-path-namespace (6e5a5de)
    • Review (1cda1d1)
    • Keep core.worktree-derived worktree paths in the caller's path namespace (24293fc)
    • Merge pull request #​2710 from GitoxideLabs/fix-reload (d5cd537)
    • Merge pull request #​2699 from jason5122/fix-kind-worktree-of-natively-bare-repo (1ff51ca)
    • Consume open_path_as_is after resolving repository paths (8f8d6ab)
    • Review (b36ca4c)
    • Repository::kind() detects linked worktrees of bare repos (54a3c2a)
    • Merge pull request #​2707 from ameyypawar/fix/2703-inflate-error (6d95da6)
    • Adapt to changes in gix-features, use gix-zlib accordingly. (9c2977a)
    • Merge pull request #​2702 from ameyypawar/fix/2694-exn-source-chain (e9c973d)
    • Thanks clippy (d533f0c)
    • Review (dc1fdc3)
    • Merge pull request #​2691 from GitoxideLabs/gix-pack-missing-cap (0052e42)
    • Pass through the allocation limit (0a5c62a)
    • Merge pull request #​2547 from special-bread/windows-status-performance (3e43c42)
    • Apply changed by special-bread (54b5393)
    • Merge pull request #​2687 from ameyypawar/fix/1832-rename-tracker-order-independent (a82b492)
    • Review (32cb1ad)
    • Introduce lazy, thread-local evaluation of core.fscache on Windows (158f899)
    • Review (f2dfdd8)
    • Use dir-cache for accelerated status calls on Windows (7de7a30)
    • Merge pull request #​2686 from GitoxideLabs/try-redirect-re-auth (d8aeaac)
    • Add Connection::configured_credentials_for_current_url(). (a5d4616)
    • Adapt to changes in gix-transport (6a7a717)
    • Merge pull request #​2682 from GitoxideLabs/improvements (f77cb0a)
    • gix::open() now handles repo.git directories correctly. (9fe1050)
    • Merge pull request #​2673 from ameyypawar/fix/2490-empty-dir-collapse (c31dac2)
    • Review (596ab93)
    • Update dirwalk::basics for collapsed empty-directory trees (7e17fcf)
    • Merge pull request #​2671 from GitoxideLabs/fix-worktree-path-resolution (a7625fa)
    • Address auto-review (1e3da34)
    • Merge pull request #​2646 from GitoxideLabs/report (1b1541e)

v0.85.0: gix v0.85.0

Compare Source

Bug Fixes (BREAKING)
  • avoid duplicate network connection when adopting a remote-controlled hash kind.
    Connections can now be created from detached remotes, internally,
    which makes them independent of the underlying repository.

    This is breaking as it comes with a cleanup of Connection lifetimes,
    which will break anyone who stores them in a struct. So hopefully
    nobody is affected.

  • bound the clone object-hash adoption retry
    The clone fetch loop adopts the remote's object format and retries when
    it differs from the freshly initialized local repository. Adoption makes
    the next iteration's hashes match, but if the reopened repository somehow
    still disagrees the loop would re-handshake forever. Track whether we
    already retried and fail with IncompatibleObjectHash on a second mismatch
    instead. The error variant is introduced here, as this is its only user.

    Also silence clippy::never_loop on default (sha1) features, where the
    sha256-gated continue is absent and the loop always returns first pass.

New Features (BREAKING)
  • add leaf-only tree-editor removal via Editor::remove_leaf()
    Motivation comes from gitbutlerapp/gitbutler#14312,
    where callers had to split tree-entry deletions from additions to avoid
    accidentally deleting a newly-added subtree after adding A/one and then deleting
    A.

    Add Editor::remove_leaf() to gix-object and expose it through gix object tree
    editors and cursors. The new API keeps remove() behavior unchanged, remains
    tolerant of absent paths, but returns an error when the target entry exists and
    is a tree.

Bug Fixes
  • adopt the remote's object format when cloning
    A clone into a freshly initialized repository hit an unimplemented!
    panic when the remote used sha256, since the local repository defaults
    to sha1.

    Reconfigure the still-empty local repository to the remote's object
    format and retry the fetch, matching git's behavior of inheriting
    the remote's hash on clone.

    Without the sha256 feature gix_hash::Kind has a single variant, so the
    local and remote hashes can never differ; the mismatch check is compiled
    out entirely in that case.

  • write fetched remote symrefs as direct refs
    Previously gix had made-up behaviour to 'improve' on standard Git,
    but it's clear this isn't backed up or tested well enough to be worth
    the risk of introducing subtle or not so subtle bugs.

  • resolve remote HEAD fetches against remote refs
    Fetching a local transport remote with a refspec like +HEAD:refs/test/repo could
    write a symbolic local ref to the client repository's refs/heads/main when the
    remote HEAD was symbolic and the client happened to have a same-named branch.
    That made the fetched destination resolve to the local branch instead of the
    remote HEAD object.

    Add a fetch regression that creates distinct local and remote
    repositories with matching HEAD target names but different commits, then fetches
    +HEAD:refs/test/repo and asserts the destination is the remote object as a
    direct ref.

    Match Git behavior observed with the local Git checkout: git fetch
    +HEAD:refs/test/repo creates refs/test/repo as the remote HEAD object, and Git's
    remote.c resolves symrefs against the advertised remote ref list.

    Fix the unmapped remote-symbolic-ref fallback to peel born remote symrefs to
    their advertised object id instead of consulting local refs. Mapped symrefs
    still rewrite to their corresponding local tracking ref, and unborn remote refs
    remain symbolic.

  • set trust for GIT_DIR environment discovery
    A Helix user reported that opening a repository with GIT_DIR set could panic in
    gix while discovering a repository through environment overrides. The reported
    reproductions used GIT_DIR=.git with Helix or git --git-dir=.git invoking an
    editor, and the panic came from open_from_paths() expecting git-dir trust to
    have already been determined.

    The GIT_DIR override path in open_with_environment_overrides() already
    determines ownership trust for the effective git directory and selects options
    from the trust mapping, but it did not store that trust in the Options passed to
    open_from_paths(). Store the determined trust there, matching discover_opts(),
    so configuration loading receives an explicit trust value instead of reaching
    the internal expect().

    Git baseline: git --git-dir=<repo/.git> --work-tree=<repo> status --short exits successfully.

  • reject implicit sha1 repos in sha256-only builds
    A missing extensions.objectFormat means legacy Sha1.

    In sha256-only builds, Kind::default() is Sha256, so such repos
    were silently mislabeled as Sha256.

    Resolve the implicit case to Sha1 when supported, else error
    out to avoid any mislabeling.

    Also reject extensions.objectFormat when repositoryFormatVersion is 0,
    matching git, which treats it as an invalid v1-only extension.

  • handle loose ref path-prefix collisions
    The GitButler branch creation flow reported that
    repo.try_find_reference("refs/heads/A/new") could fail with a low-level
    NotADirectory error when refs/heads/A already exists as a loose ref. That
    lookup is asking whether the longer ref exists; the path-prefix collision
    matters to creation/update code, but find should report absence for that
    candidate.

    Git reference: refs/refs-internal.h documents ENOTDIR as the case where a
    ref prefix is not a directory, alongside ENOENT for non-existing refs. For
    lookup, both mean the requested ref candidate was not found.

  • write new remote sections to the local config file.

  • Add support for gix_object::Write::*with_known_id() and use it.
    This means the Repository::write_object() won't recalculate the hash.

  • handle relative worktree gidir files
    Git 2.48 can link worktrees with relative paths. In that layout the checkout
    .git file points at the private git dir relative to the checkout, while
    worktrees//gitdir points back to the checkout relative to the private git
    dir.

    Discovery already handled the checkout-side gitdir file, but paths read from the
    private git dir were treated as-is. That made discovery from .git/worktrees/
    and Repository::worktrees() proxy base resolution produce relative paths
    anchored to the process cwd instead of the gitdir file location.

    Git reference: /Users/byron/dev/github.com/git/git
    worktree.c:write_worktree_linking_files writes both relative links with
    relative_path(), and t/t2400-worktree-add.sh covers the resulting relative
    files.

  • fetching and cloning with refspecs that are tags (in shallow clones)
    Fix shallow clone refspecs for explicit tag refs

    When a shallow clone was created with with_ref_name(), the clone
    setup treated the requested name as a branch and generated a refspec
    under refs/heads/. For tag names this produced an unmatched required
    mapping like +refs/heads/<tag>:refs/remotes/origin/<tag>.

    Resolve the requested ref name against the remote before constructing
    the shallow single-ref refspec. Branches continue to map to
    refs/remotes/<remote>/*, while tags and other non-branch refs map to
    themselves.

    Baseline Git behavior was checked with /Users/byron/dev/github.com/git/git:
    non-shallow --branch <tag> clones keep the normal branch wildcard
    fetch refspec, while shallow --depth 1 --branch <tag> clones store
    +refs/tags/<tag>:refs/tags/<tag>.

  • reject deleted prior checkout branches

Commit Statistics
  • 49 commits contributed to the release over the course of 27 calendar days.
  • 27 days passed between releases.
  • 14 commits were understood as conventional.
  • 3 unique issues were worked on: #​1951, #​2609, #​2613
Commit Details
view details
  • #​1951
    • Write new remote sections to the local config file. (9ad2e24)
  • #​2609
    • Reject deleted prior checkout branches (6b5c2ea)
  • #​2613
    • Resolve remote HEAD fetches against remote refs (6730316)
  • Uncategorized
    • Merge pull request #​2642 from 10ne1/dev/aratiu/sha256-transport (da6b267)
    • Avoid duplicate network connection when adopting a remote-controlled hash kind. (9929ece)
    • Review (ed998d1)
    • Map fetch pack/index checksums to their SHA-256 values (325d2a1)
    • Derive update_refs expected ids from the fixture (hash-aware) (470e689)
    • Cover sha256 remote object-format adoption on clone (77e11be)
    • Bound the clone object-hash adoption retry (28b726d)
    • Adopt the remote's object format when cloning (e7c7484)
    • Merge pull request #​2660 from GitoxideLabs/resolve-fetch-head-againnst-remote-refs (a8c5257)
    • Adjust clone expectations for peeled remote symrefs (00f64fc)
    • Write fetched remote symrefs as direct refs (fa42565)
    • Merge pull request #​2622 from ameyypawar/tests/repository-mailmap (3755396)
    • Review (590b206)
    • Merge pull request #​2654 from GitoxideLabs/tree-editor-improvement (f051396)
    • Add leaf-only tree-editor removal via Editor::remove_leaf() (cd610db)
    • Add tests for Repository::open_mailmap and open_mailmap_into (73ffc99)
    • Merge pull request #​2637 from ameyypawar/fix-remote-save-1951 (847eb4a)
    • Review (5217d66)
    • Merge pull request #​2652 from GitoxideLabs/override-upward-trust (52d26d7)
    • Adjust the comment in discovery_opts to inform about upwards::Options trust handling. (7ba53e1)
    • Merge pull request #​2651 from GitoxideLabs/allow-sha256-only-builds (f1f8b6f)
    • Address review feedback about repository formats (2a5b8d4)
    • Merge pull request #​2648 from GitoxideLabs/investigate-git-dir-panic (5dfb44d)
    • Set trust for GIT_DIR environment discovery (3b4a6bc)
    • Review (c391a12)
    • Cover the sha256-only legacy object-hash path (14a1a11)
    • Test rejection of objectFormat on version-0 repositories (ad9354e)
    • Reject implicit sha1 repos in sha256-only builds (b859b92)
    • Allow sha256-only builds (b0155ce)
    • Merge pull request #​2645 from GitoxideLabs/try-find-reference-path-prefix-collision (4f089fc)
    • Handle loose ref path-prefix collisions (9f432ef)
    • Merge pull request #​2628 from GitoxideLabs/dependabot/cargo/tar-0.4.46 (5aadd6e)
    • Thanks clippy (137794d)
    • Merge pull request #​2598 from cruessler/run-gix-index-tests-with-sha-256 (b5b2d54)
    • Review (bc4064c)
    • Merge pull request #​2549 from GitoxideLabs/no-dupl-compute (69caccd)
    • Add support for gix_object::Write::*with_known_id() and use it. (2bd9dfe)
    • Merge pull request #​2599 from GitoxideLabs/relative-workree-path (a209dc1)
    • Address auto-review (1d80b47)
    • Handle relative worktree gidir files (bd2881e)
    • Merge pull request #​2556 from GitoxideLabs/shallow-clone-tag-refspecs (3dd621c)
    • Address auto-review (0c1645a)
    • Finally implement find_custom_refname as in Git (7734fb0)
    • Fetching and cloning with refspecs that are tags (in shallow clones) (92c8130)
    • Merge pull request #​2610 from GitoxideLabs/fix-rev-parse (a4be01b)
    • Merge pull request #​2618 from GitoxideLabs/report (f7d4f33)

v0.84.0: gix v0.84.0

Compare Source

New Features (BREAKING)
  • Allow checkouts of empty repositories
    Also make turn destination_must_be_empty into Option<bool>
New Features
  • Add SHA-256 support for object-format parsing.
Bug Fixes
  • Follow submodule gitdir files when opening and perform basic validation
    Modern submodules store a .git file in the worktree whose gitdir: value points
    at the repository to open. The previous resolver treated every non-directory
    .git path like an uninitialized submodule and fell back to .git/modules/,
    which can open the wrong repository after a submodule gitdir is relocated or
    renamed. That shows up as phantom submodule HEAD changes in gix status.

    Git baseline: Git setup.c::read_gitfile_gently() parses gitdir:
    files and resolves relative targets against the .git file location;
    submodule.c::submodule_to_gitdir() consults that gitfile before falling back to
    the name-derived .git/modules path.

    Update Submodule::git_dir_try_old_form() to validate the submodule name, then
    follow worktree .git files when present while preserving the old-form directory
    and uninitialized fallback behavior. Validate present gitdir file targets for
    direct state/open/status queries so broken submodule checkouts are reported
    if the gitlink doesn't point to a directory.
    For status ignore=all, still parse valid gitdir files to keep state accurate,
    but skip target validation and fall back without error if the gitdir file itself
    is malformed or unreadable. Derive State::is_old_form directly from whether
    the worktree .git path is a directory so a divergent modern gitlink is not
    misclassified as old form.

  • Repository::is_dirty() won't fail on unborn repositories

Commit Statistics
  • 37 commits contributed to the release over the course of 28 calendar days.
  • 28 days passed between releases.
  • 4 commits were understood as conventional.
  • 2 unique issues were worked on: #, #​2585
Commit Details
view details
  • #
    • Repository::is_dirty() won't fail on unborn repositories (1f82a9f)
  • #​2585
    • Follow submodule gitdir files when opening and perform basic validation (82c483a)
  • Uncategorized
    • Merge pull request #​2595 from cruessler/add-hex-to-id-sha1-only (87433ed)
    • Review (f962ed1)
    • Add hex_to_id_sha1_only, use in SHA-1 only tests (d80c534)
    • Merge pull request #​2508 from j-walther/feat/allow-empty-dir (9013c3f)
    • Review (8606b7a)
    • Allow checkouts of empty repositories (e75fbfa)
    • Merge pull request #​2578 from cruessler/run-gix-tests-with-sha-256 (2d4a6f2)
    • Review (31c2de3)
    • Return SHA-1 when there's no corresponding SHA-256 (b8510b2)
    • Feat! add object_hash to gix::create::Options (b123b4c)
    • Merge pull request #​2588 from GitoxideLabs/fix/gix-status-phantom-submodule-modifications-2585 (db925ec)
    • Merge pull request #​2589 from GitoxideLabs/fix-status-in-unborn-repo (ba7d9a4)
    • Address auto-review (5a37fbd)
    • Add another test to learn what is_dirty() does when there are modifications. (3406b1d)
    • Merge pull request #​2581 from GitoxideLabs/improvements (8af2691)
    • Add SHA-256 support for object-format parsing. (011316e)
    • Merge pull request #​2583 from tisonkun/patch-1 (a791ea3)
    • Improve comment in object/commit.rs (a8f7717)
    • Merge pull request #​2573 from cruessler/run-gix-traverse-tests-with-sha-256 (278d7ec)
    • Address auto-review (0ec3bb7)
    • Cleanup the justfile and automate feature tests (db7b97b)
    • Cleanup sha1 feature in gix to just set what's needed. (16a6fc4)
    • Merge pull request #​2575 from SarthakB11/fix/issue-2316 (4743361)
    • Review (1980190)
    • Document why each fixture archive is .gitignored (e3d5a04)
    • Merge pull request #​2568 from GitoxideLabs/dependabot/cargo/cargo-56d6b174d8 (ab2fee1)
    • Update crates to Rust 2024 edition (2cb17b2)
    • Raise MSRV for hash dependency updates (3675a8d)
    • Merge pull request #​2559 from GitoxideLabs/fix/symlink-prefix-reuse-worktree-escape-GHSA-f89h-2fjh-2r9q (3af9b4a)
    • Release gix-fs v0.21.1 (d3e4c17)
    • Address auto-review (1d9bae2)
    • Add clone reproducer for symlink prefix reuse checkout escape (c2ae6cd)
    • Merge pull request #​2543 from cruessler/run-gix-worktree-stream-tests-with-sha-256 (23af41a)
    • Adapt to changes in gix_object::Data (4309fa4)
    • Merge pull request #​2546 from GitoxideLabs/fix-2545 (adb8328)

v0.83.0: gix v0.83.0

Compare Source

Bug Fixes
  • Correctly use $COMMON_DIR/info/exclude to make excludes work in worktrees.
    It turns out there is no per-worktree excludes file either.
Chore (BREAKING)
  • Upgrade prodash and crosstermion to the latest version.
    This will fix the cargo deny issue as it brings in a newer lru crate.
Bug Fixes (BREAKING)
  • remove winnow and replace it with hand-implemented parsers everywhere.
    This will allow for simplified maintenance and editing (both human and machine)
    down the road, and enable additional performance optimisations.

    Parser compbinators to me ultimately were a failed experiment as I couldn't maintain
    them anyway, with it being too difficult for me to grasp and express everything
    in its very own kind of language, with a lot of different things to consider.

    Note that this also removes detailed errors from all parsers that previously
    used winnow, with the option to re-add those if there is demand.

Commit Statistics
  • 5 commits contributed to the release over the course of 2 calendar days.
  • 3 days passed between releases.
  • 1 commit was understood as conventional.
  • 0 issues like '(#ID)' were seen in commit messages
Commit Details
view details
  • Uncategorized
    • Adapt to changes in gix-object (91bfab0)
    • Remove winnow and replace it with hand-implemented parsers everywhere. (91c854e)
    • Merge pull request #​2540 from GitoxideLabs/reporting (4d5ba23)
    • Merge pull request #​2529 from GitoxideLabs/reflog-newline-handling (2c3a08e)
    • Adapt to changes in gix-error (2e2a126)

v0.82.0: gix v0.82.0 - hardened

Compare Source

Advisories with fixes
Bug Fixes
  • Correctly use $COMMON_DIR/info/exclude to make excludes work in worktrees.
    It turns out there is no per-worktree excludes file either.

  • do not open .gitmodule files through symlinks
    This could lead to places outside of the repository that are attacker controller.

  • don't follow submodule names with relative paths in them
    This made it possible to trick submodule repos to be opened outside of the
    actual repository.

  • Restore Category::to_full_name() to be able to produce any full name.
    Previously it learned to reject certain invalid branch names, but this has to
    be done separately and led to some unpleasant changes in gix as well.

  • reject refs/heads/HEAD as branch name during repo initialisation
    Also document that refs/heads/HEAD is allowed if FullName was created
    directly.

  • Tree::peel_to_entry() peel to the final tree entry (and only if it's a tree)

  • deduplicate entry-finding logic
    The logic for finding entries is duplicated 3 times.

    Use std::ops::ControlFlow for simpler, callback-friendly code.

  • std::path::Component has infallible conversion to &[u8]
    Instead of relying on a fallible path and using a default value,
    we can convert directly between a Component and a &[u8].

Chore (BREAKING)
  • Upgrade prodash and crosstermion to the latest version.
    This will fix the cargo deny issue as it brings in a newer lru crate.
New Features (BREAKING)
  • enforce the specification of alloc_init_bytes to handle untrusted input
    This breaking change is intended to force a decision about how
    much memory allocation an untrusted party can command by tempering
    with binary file formats.
  • Use imara-diff-v2 with git sliders processing
    The slider post-processing imrpoves the diff quality for about 8% slower diffs.
    Line-counts, however, will be 50% faster to compute.
Other
  • remove confusing map()
New Features
  • automatically limit allocation size on untrusted repositories.
    This can be controlled via gitoxide.objects.allocLimitIfReducedTrust.
  • read GIX_ALLOC_BYTES and pass them to gix-odb for reading untrusted input
  • add sha256 to gix
Documentation
  • add crate-root doctests
Commit Statistics
  • 50 commits contributed to the release over the course of 32 calendar days.
  • 32 days passed between releases.
  • 14 commits were understood as conventional.
  • 0 issues like '(#ID)' were seen in commit messages
Commit Details
view details
  • Uncategorized
    • Update changelogs prior to release (f9fbcba)
    • Merge pull request #​2530 from GitoxideLabs/advisories (63b8419)
    • Add fuzz tests for 10 more crates, and related fixes (0396152)
    • Do not open .gitmodule files through symlinks (52485a9)
    • Don't follow submodule names with relative paths in them (d2e193f)
    • Automatically limit allocation size on untrusted repositories. (95b0399)
    • Enforce the specification of alloc_init_bytes to handle untrusted input (91d0c26)
    • More alloc_limit tests to validate limit for loose objects as well. (9473d32)
    • Pass alloc_limit_bytes to gix-index (054494f)
    • Read GIX_ALLOC_BYTES and pass them to gix-odb for reading untrusted input (acffd6b)
    • Add reproductions for all known advisories (392336f)
    • Merge pull request #​2497 from cruessler/pass-hash-len-to-tree-ref-iter (7d50c30)
    • Review (d9b358b)
    • Adapt to changes in gix-object (6df1d55)
    • Merge pull request #​2523 from GitoxideLabs/improvements (6f47e98)
    • Adapt to changes in gix-traverse (a1bd845)
    • Merge pull request #​2513 from GitoxideLabs/v2-diff (2a5db88)
    • Thanks clippy (e4f380e)
    • Use imara-diff-v2 with git sliders processing (8094f5d)
    • Merge pull request #​2518 from GitoxideLabs/improvements (444a92b)
    • Make package.include patterns more specific so they don't match ignored files (c2c917f)
    • Merge pull request #​2507 from GitoxideLabs/improvements (e51c40b)
    • Restore Category::to_full_name() to be able to produce any full name. (5b229c6)
    • Merge pull request #​2505 from GitoxideLabs/improvements (420c5df)
    • Address auto-review (6a5a0ec)
    • Reject refs/heads/HEAD as branch name during repo initialisation (1adc44c)
    • Merge pull request #​2492 from datdenkikniet/peel_to_entry (a298901)
    • Refactor (3542230)
    • Remove confusing map() (8a2b474)
    • Merge pull request #​2494 from GitoxideLabs/improvements (50fb46f)
    • Adapt to changes in gix-config. (344218a)
    • Merge pull request #​2493 from GitoxideLabs/improvements (af1ad55)
    • Adapt to changes in gix-config (7bda16a)
    • Merge pull request #​2489 from GitoxideLabs/fix-entry-by-path ([ec66ceb](https://redirect.github.com/GitoxideLabs/gitoxide/c

Note

PR body was truncated to here.


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate
renovate Bot force-pushed the renovate/gix-0.x branch from 5bd6ac0 to 5b4d360 Compare March 29, 2026 11:25
@github-actions

Copy link
Copy Markdown

Benchmark Results

Status Count
Regressions 0
Improvements 0
No change 0

Download full results from the workflow artifacts.

@renovate renovate Bot changed the title chore(deps): update rust crate gix to 0.81 chore(deps): update rust crate gix to 0.82 Apr 24, 2026
@renovate
renovate Bot force-pushed the renovate/gix-0.x branch from 5b4d360 to 507e30f Compare April 24, 2026 14:54
@renovate renovate Bot changed the title chore(deps): update rust crate gix to 0.82 chore(deps): update rust crate gix to 0.83 Apr 28, 2026
@renovate
renovate Bot force-pushed the renovate/gix-0.x branch from 507e30f to d61bf25 Compare April 28, 2026 05:14
@renovate
renovate Bot force-pushed the renovate/gix-0.x branch from d61bf25 to 10f21c4 Compare May 18, 2026 19:15
@renovate
renovate Bot force-pushed the renovate/gix-0.x branch from 10f21c4 to 50efbf9 Compare May 26, 2026 04:40
@renovate renovate Bot changed the title chore(deps): update rust crate gix to 0.83 chore(deps): update rust crate gix to 0.84 May 26, 2026
@renovate renovate Bot changed the title chore(deps): update rust crate gix to 0.84 chore(deps): update rust crate gix to 0.85 Jun 22, 2026
@renovate
renovate Bot force-pushed the renovate/gix-0.x branch from 50efbf9 to b334323 Compare June 22, 2026 18:44
@renovate
renovate Bot force-pushed the renovate/gix-0.x branch 2 times, most recently from cb0fc45 to e3938a2 Compare July 23, 2026 18:27
@renovate renovate Bot changed the title chore(deps): update rust crate gix to 0.85 chore(deps): update rust crate gix to 0.86 Jul 23, 2026
@renovate
renovate Bot force-pushed the renovate/gix-0.x branch from e3938a2 to 796f139 Compare August 11, 2026 22:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants