Skip to content

v0.8.8 - Measured Against a Real Server: Size Caps, Chunked Uploads, and One Fewer Moving Part

Choose a tag to compare

@github-actions github-actions released this 13 Oct 13:07
· 72 commits to main since this release

What's Changed in v0.8.8

This release started as a simplification pass and became a size release when the changes were finally
measured against a real Seafile server (CE 13.0.28). Three things the stub could not have told us:

  • A single request of 2 GiB is reset (1.75 GiB is accepted), so an uncapped 4 GiB tail merge failed at
    its upload and a single 20 GB raw-data pack could never have been pushed.
  • The same server assembles a 5 GiB file from Content-Range chunks and serves it back
    byte-identical.
  • Git for Windows with core.autocrlf=true silently truncates a 4 GiB+ blob at git add (5 GiB came out
    as 1 GiB) and stalls git clone of one. The helper cannot prevent the first; it now warns before the
    second.

Upgrading from 0.8.7 or earlier

  • seafile.autogc is on by default; git config seafile.autogc false restores tip-only behaviour.
  • Usage errors exit 2 on stderr (they were 1 on stdout).
  • seafile.locksettle and seafile.gcmaxmib are retired (reported once, then ignored);
    seafile.gcmaxpackmib is now the largest pack the helper writes.
  • Clients older than 0.8.4 must not share a remote with this version.

Added

  • Pack size cap and chunked upload. Every pack is capped at seafile.gcmaxpackmib (1 GiB); files of
    1 GiB or more upload in 128 MiB Content-Range chunks, checked against the listing afterwards.
  • git-remote-seafile doctor [url] - login, how the URL is interpreted, safety guards, a write probe.
  • gc --tail - run the automatic tail merge by hand.
  • A "Known Limitations and What They Mean for You" section in the User Guide.
  • A real-server test tier (opt-in) and a differential test of ref-name validation against git.

Changed

  • Automatic tail merge defaults on; budget is 2x the cap; packs at least half the cap are frozen.
  • One output and exit-code convention for every subcommand; cli.main is a dispatch table.
  • cmd_push is a sequence of named steps shared with --dry-run.
  • Concurrent pushers wait by queue progress, not wall time; a waiting ticket is not re-uploaded each poll.
  • Push-time pack-objects no longer delta-searches big blobs (50 s to 5 s on the measured payload).
  • The snapshot tool's source is cohesive parts built into one file; its watchdog is thread-free.
  • Snapshot tool: the raw-payload profile starts at a sample ratio of 0.5 (was 0.9), so mixed data stages at 125-200 MiB/s instead of ~45 (131 GiB: ~50 minutes before, ~20 now); a free-space guard and a temp-pack sweep protect large runs.

Fixed

  • Encrypted libraries are refused clearly; ref-name validation matches git check-ref-format.
  • Conflict copies are named when they appear; HEAD read failures cannot half-advertise refs;
    deleting HEAD's branch says how to repair it; uploads wait for the server's reply; stderr is UTF-8.
  • Snapshot tool: git failures are not "diverged", settings are remembered only after success,
    --restore finds the remote's only branch.

The full list, with measurements, is in CHANGELOG.md.


Full Changelog: v0.8.7...v0.8.8