github GitoxideLabs/gitoxide gix-object-v0.65.0
gix-object v0.65.0

one day ago

New Features

  • add Never::panic_on_access() to forbid object access

    Tests that must avoid object database access can use Never::panic_on_access()
    instead of implementing their own panicking stores. The returned PanicAlways
    type panics on reads, existence checks, and writes, while preserving the
    existing Never unit struct and its behavior.

    Replace the custom panicking stores in the null-ID tests in gix-diff and
    gix-merge, and cover every object-access method. Validated the object, diff,
    and merge integration test suites and cargo fmt --all -- --check.

    Keep rustdoc links aligned with the constructor name. CI's test and lint
    jobs build documentation with warnings denied, and the old
    Never::fail_always() links failed to resolve. The failure was reproduced
    locally; RUSTDOCFLAGS='-D warnings' cargo doc -p gix-object --no-deps --features sha1
    passes with the corrected links.

Bug Fixes

  • 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-testtools Git command builder for subprocess setup, isolated
    repository 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. Keep
    journey 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-pure journey
    suite pass from a source copy without Git metadata. Signing and Git-daemon
    checks use only disposable keys, repositories, and local sockets.

  • omit the final newline from bodyless commit titles
    An ordinary commit created with git commit -m "initial commit" exposes
    "initial commit\n" as MessageRef::title because the no-separator path
    returns the entire message. Exclude a final LF or CRLF in that shared
    parser path, preserving other whitespace, interior newlines, and raw bytes.

    Correct the existing LF and CRLF expectations, add boundary cases for empty
    and multiline titles, whitespace, lone CR, and non-UTF-8 bytes, and update
    the public documentation and gix reference example.

    Git reference: pretty.c (is_blank_line() and format_subject()) and
    t/t6006-rev-list-format.sh at 1630431f326e15fcde608827b5ff38422528eb59.
    Git 2.50.1 also returns Sync with 'maint' via %s for reference commit
    aec3f587505a472db67e9462d0702e7d463a449d, whose raw message ends in LF.

  • invoke signature programs without a shell

    Treat signing and verification programs as executable paths, matching the
    argv-based launch used by Git. Shell detection treated paths containing spaces
    as shell commands, so unquoted Windows paths could fail before reaching the
    signer.

    Keep wrapper customization explicit through program_arguments and cover signer
    and verifier paths containing spaces with regression tests.

Changed (BREAKING)

  • migrate errors to gix-error

    rubberstamp

  • raise MSRV to Rust 1.88

    The newly published dua-core 3.3 release used by linked-worktree removal
    requires Rust 1.88, so raise every workspace crate and the advertised badge
    together.

    Keep the MSRV checks buildable by selecting the latest sysinfo and rusqlite
    release lines that support Rust 1.88.

Commit Statistics

  • 18 commits contributed to the release over the course of 32 calendar days.
  • 33 days passed between releases.
  • 6 commits were understood as conventional.
  • 1 unique issue was worked on: #2991

Commit Details

view details
  • #2991
    • Omit the final newline from bodyless commit titles (f51c0c5)
  • Uncategorized
    • Merge pull request #2847 from GitoxideLabs/gix-error-completion (6356013)
    • Use borrowed error inspection throughout the workspace (daf73b5)
    • Migrate errors to gix-error (8c101c9)
    • Merge pull request #2989 from GitoxideLabs/error-conversion-review (4b9ff51)
    • Merge pull request #2990 from GitoxideLabs/various-improvements (c609062)
    • Keep rust workspace tests inside disposable repositories and isolated environments (4e0f8ff)
    • Merge pull request #2992 from GitoxideLabs/fix-message-newline (4f29e0c)
    • Merge pull request #2971 from GitoxideLabs/diff-nullid-fix (d7551f1)
    • Add Never::panic_on_access() to forbid object access (36e9406)
    • Merge pull request #2958 from GitoxideLabs/sign-on-windows (c16300c)
    • Merge pull request #2957 from GitoxideLabs/sign-on-windows (b7bedcf)
    • Invoke signature programs without a shell (9b26904)
    • Merge pull request #2949 from GitoxideLabs/error-conversion-review (a095334)
    • Raise MSRV to Rust 1.88 (4b42e0c)
    • Merge pull request #2955 from GitoxideLabs/transport-url-encoding (7e35849)
    • Release gix-path v0.12.6, gix-error v0.3.2, gix-command v0.10.1, gix-transport v0.59.2 (888677a)
    • Merge pull request #2932 from GitoxideLabs/fundamental-types-comp (6704303)

Don't miss a new gitoxide release

NewReleases is sending notifications on new releases.