github GitoxideLabs/gitoxide gix-ref-v0.67.0
gix-ref v0.67.0

one hour ago

Refactor (BREAKING)

  • remove object_hash from Options

    • Split gix_ref::file::Store::at into at and at_opts.
    • Split gix_ref::file::Store::for_linked_worktree as well.
    • Split gix_ref::Store::at as well.

    This forces callers to explicitly choose a hash, eliminating the risk
    that Sha1 is implicitly chosen for them in SHA-1/SHA-256 builds
    through Default::default() without them being aware of it or noticing.
    This comes at the cost of callers having to always pass the hash, but
    that seems like a reasonable trade-off.

Test

  • use gix_testtools::object_hash in a few tests

  • assert that transactions hold a constant number of file descriptors
    lock_ref_and_apply_change() writes each lock's content and closes it right
    away, retaining only a gix_lock::Marker, so preparing a transaction needs
    O(1) open files rather than one per edit. Nothing guarded that property, yet
    losing it is invisible in small transactions and fatal in large ones: a fetch
    updating thousands of refs would die with EMFILE at the ~1000th lock under
    the default ulimit -n 1024.

    The test prepares and commits 300 edits with RLIMIT_NOFILE lowered to 96.
    As that limit is process-wide and sibling tests share the process under plain
    cargo test, where they could hit EMFILE spuriously, the test re-executes
    itself as a child process marked by an environment variable, and only the
    disposable child lowers the limit. The parent asserts the child reports
    "1 passed", so a name that stops matching cannot pass silently as 0 tests run.

    Verified to fail when each prepared edit leaks a single descriptor.

Bug Fixes

  • terminate lock error parent traversal

    A dereferenced reference update could loop forever while relabeling a leaf lock
    acquisition error because the traversal did not advance at its root parent.

    Add a regression that locks the referent of symbolic HEAD and expects the
    lock error to return under HEAD. Advance the cursor on every parent so nested
    symbolic chains terminate and retain the initiating reference name.

Commit Statistics

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

Commit Details

view details
  • #2920
    • Terminate lock error parent traversal (afc798c)
  • Uncategorized
    • Update manifests prior to release (ebe9095)
    • Merge pull request #2905 from GitoxideLabs/various-improvements (f3bbfad)
    • Adapt to changes in gix-testtools (0cbe539)
    • Merge pull request #2921 from GitoxideLabs/fix-parent-loop (5cc9287)
    • Merge pull request #2919 from cruessler/require-object-hash-in-file-store-at (e5452ba)
    • Review (1f311a1)
    • Remove object_hash from Options (30f0d73)
    • Merge pull request #2907 from cruessler/pass-object-hash-explicitly (2e929a3)
    • Use gix_testtools::object_hash in a few tests (1452553)
    • Merge pull request #2901 from cruessler/switch-to-gix-odb-at-opts (2a4d996)
    • Introduce Store::at() where possible (17fea2a)
    • Merge pull request #2867 from GitoxideLabs/fix-url-authority-parsing (cc3ee80)
    • Release gix-path v0.12.4, gix-command v0.9.2, gix-config-value v0.19.1, gix-url v0.37.1, gix-credentials v0.39.1, gix-transport v0.58.1 (ab4fcb0)
    • Merge pull request #2838 from nikicat/pr-ref-tx-constant-fds (86ae4e0)
    • Move new test into standlone integration test (1eced45)
    • Assert that transactions hold a constant number of file descriptors (89468ae)
    • Merge pull request #2812 from GitoxideLabs/report-july (ae8845a)

Don't miss a new gitoxide release

NewReleases is sending notifications on new releases.