Skip to content

0.2.0

Latest

Choose a tag to compare

@github-actions github-actions released this 11 Nov 12:39

This release is about the safety of the sync itself. The logic was reviewed against the Unison specification, Git's handling of its index, rclone bisync and R2's documented behaviour, and is now also tested with random histories on three devices.

Fix

  • A conflict copy could be given a name that was already in use, for example a conflict copy another device had made in the same second, and replace that file. An edit that had not been synced yet could be lost this way. Conflict copies now only take names that are free both locally and on the remote, and a rename never replaces an existing file.

Safer syncing

  • Changes are judged by content. The sync record now keeps a hash of each synced file. A file that was only touched (copied, restored, checked out again) is no longer uploaded and can no longer cause a false conflict.
  • Edits made in the same instant as a sync are no longer missed. Files synced within three seconds of their modification time are compared by content on the next pass.
  • Deletions look again first. Before deleting on the remote, the object is checked once more, so a version another device uploaded during the sync is not removed.
  • An empty side always asks. If the local vault or the bucket appears empty while the record lists three or more files, the sync asks for confirmation, whatever the size of the vault.
  • Case-insensitive file systems (macOS). Names that differ only in letter case are skipped and reported, instead of one replacing the other and the missing one being deleted everywhere.
  • Progress is saved during long syncs, so an interrupted sync resumes cleanly.

Paths to ignore

  • .git, .trash, node_modules, .DS_Store and the per-device workspace.json files are now the default contents of "Paths to ignore", where you can see and edit them. Most were always skipped, but invisibly. Existing installations get them added once.
  • Patterns follow .gitignore more closely: a name without a slash, such as .git or *.tmp, now matches at any depth. If you had a pattern without a slash, it now also matches in subfolders.

Upgrading

Nothing to do. The existing sync record is read as it is and gains content hashes as files are synced.

Install

Download main.js and manifest.json below into <vault>/.obsidian/plugins/artoo-veetoo/, then enable R2V2 under Community plugins. See the README for setup.