Skip to content

v0.3.3 — Pull picks up teammates' updates

Choose a tag to compare

@Plumvery Plumvery released this 22 Jul 14:03
· 5 commits to main since this release
21a8cc3

A teammate updating a file that was already tracked reached nobody.

Pull downloaded only files missing from disk, and an updated file is not missing — it is sitting right there with the old bytes. So Pull skipped it, and Auto Pull never fired at all, because its check was literally "does this path exist?". Push then made it worse: a stale copy and a local edit both read as modified, so Auto Push offered to upload it and Push rewrote the manifest entry to the older local hash — undoing whoever pushed last, in a change git shows as an ordinary one-line manifest diff.

Why it happened

Local hash and manifest hash cannot tell "I edited this" from "someone else pushed a newer one". Both are just local != manifest, and they need opposite fixes.

UniLFS now records the third point: which manifest hash each file was last in sync with on this machine, kept per-machine under Library/UniLFS/, and classifies against it the way a merge base decides which side of a diff actually moved.

State Meaning Fix
modified local moved, manifest didn't Push
outdated manifest moved, local didn't Pull
conflicted both moved resolve by hand

Pull now takes outdated files. Push refuses them and says to Pull. conflicted is left alone by both and resolved explicitly: Restore Modified takes the manifest's version, Track Selected then Push keeps yours — and Track reports when it resolved one that way, since it drops whatever the manifest named.

Also fixed

  • Spurious blue "not pushed" — every status check dropped confirmations for blobs the current manifest did not name, discarding proof that was still true. Files stayed blue until someone pressed Refresh and paid for the round trip again. Confirmations outside the manifest are now kept (most recent 4096) instead of dropped on sight.
  • Assets > UniLFS > Track Selected had the same rollback as Push when run on an already-tracked file.
  • Auto Pull and Auto Push raced on startup — both ran a status check without waiting for the other, and whichever lost the operation lock gave up silently.

Upgrading from 0.3.2

Nothing to do. Baselines are recorded by Track, Push and Pull, and adopted automatically whenever local and manifest already agree, so a project establishes them on its first status check — no re-tracking.

A file that is already diverged at that moment has nothing to adopt. It reads modified (the conservative answer, which never overwrites local content on a guess), and Auto Push skips it rather than guessing the local side is newer. An explicit Push still takes it. Same after deleting Library/UniLFS/.

Full changelog: https://github.com/Plumvery/UniLFS/blob/v0.3.3/CHANGELOG.md
PR: #3