github Byron/gitoxide git-pack-v0.24.0
git-pack v0.24.0

23 months ago

New Features

  • more efficient distribution of tasks to threads during pack resolution.
    This clearly is a peak-performance optimization as it will now
    efficiently distribut tree-root nodes to threads one at a time by
    means of shared memory, which is accessed mutably yet safely.

    This change can also further reduce peak memory usage as it will not
    keep buffers of more resolved deltas then necessary, as it only handles
    one at a time per thread.

Bug Fixes

  • reduce memory usage for pack resolution by 18%…
    …compared to where it started out before.

    This is the result of using u32 intead of usize where possible,
    leveraging the object limit of u32 in packs.

    This change makes the biggest difference by not keeping the decompressed
    memory of leaf nodes alive for longer than needed, at the cost of
    some code duplication which could be extracted into a function if one
    was inclined to deal with the boilerplate and lots of generics.

  • Allow verification of empty packs and indices.
    Empty packs are fine, even though the implementation should probably
    assure to not write them, or remove them after having been written.

  • increase pack-receive performance using a BufWriter
    Previously the NamedTempFile would receive every little write request
    for millions of objects, consuming considerable amounts of time.

    Now a buf writer alleviates this issue entirely.

  • bundle::write::Error is now publicly available

Bug Fixes (BREAKING)

  • Reading and writing empty packs is explicitly allowed.
    This can happen when sending packs that don't actually contain changes,
    but need to be sent to conform to the protocol.

Other (BREAKING)

  • index::write::Outcome::index_kind -> ::index_version.
  • bundle::write::Options::index_kind -> ::index_version.

Commit Statistics

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

Thanks Clippy

Clippy helped 2 times to make code idiomatic.

Commit Details

view details
  • #450
    • prefix created pack files with pack- (e489b10)
    • increase pack-receive performance using a BufWriter (a745512)
    • index::write::Outcome::index_kind -> ::index_version. (b46347f)
    • add test to show that empty packs won't be written as expected behaviour. (72ce7fd)
    • bundle::write::Error is now publicly available (0b6ed60)
    • bundle::write::Options::index_kind -> ::index_version. (591afd5)
  • Uncategorized
    • prepare changelogs for release (d232567)
    • Merge branch 'fix-smart-release' (aa80b60)
    • make fmt (7b9c065)
    • Merge branch 'main' into new-http-impl (702a161)
    • Merge branch 'main' into clone (acb0738)
    • Merge branch 'delta-tree-parallelization' (cca2ad5)
    • Don't enforce Send bounds in serial version of in_parallel_with_slice() (dda661e)
    • thanks clippy (583f2ca)
    • more efficient distribution of tasks to threads during pack resolution. (6836cb1)
    • refactor (0e2ca47)
    • Try to use counters directly in delta-tree resolution (c6ded26)
    • reduce memory usage for pack resolution by 18%… (ec58bef)
    • Merge branch 'reduce-pack-resolve-mem-consumption' (a8ced57)
    • minor refactor after trying more memory foot-print related changes (5852334)
    • simplify size-related tests (fb2b2a8)
    • cut the size of bytes needed to store children in half for a lower footprint (38c96f2)
    • Merge branch 'crates-index-diff-fixes' (b09bad7)
    • thanks clippy (851bc79)
    • Allow verification of empty packs and indices. (49d168a)
    • refactor (38a7452)
    • Reading and writing empty packs is explicitly allowed. (5a75afe)
    • make fmt (53acf25)
    • Merge branch 'fetch-pack' (f47c891)
    • Merge branch 'fetch-pack' (3c49400)
    • Merge branch 'fix-git-features' (82fd251)
    • Merge branch 'diff' (25a7726)

Don't miss a new gitoxide release

NewReleases is sending notifications on new releases.