Refactor (BREAKING)
-
remove
object_hashfromOptions- Split
gix_ref::file::Store::atintoatandat_opts. - Split
gix_ref::file::Store::for_linked_worktreeas well. - Split
gix_ref::Store::atas well.
This forces callers to explicitly choose a hash, eliminating the risk
thatSha1is implicitly chosen for them in SHA-1/SHA-256 builds
throughDefault::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. - Split
Test
-
use
gix_testtools::object_hashin 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 agix_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 withEMFILEat the ~1000th lock under
the defaultulimit -n 1024.The test prepares and commits 300 edits with
RLIMIT_NOFILElowered to 96.
As that limit is process-wide and sibling tests share the process under plain
cargo test, where they could hitEMFILEspuriously, 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_hashfromOptions(30f0d73) - Merge pull request #2907 from cruessler/pass-object-hash-explicitly (2e929a3)
- Use
gix_testtools::object_hashin 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)