Skip to content

ods v0.3.5

Latest

Choose a tag to compare

@github-actions github-actions released this 25 Sep 10:46
· 21 commits to main since this release

Four defects with one shape: the tool reported success on a no-op. Each one
produced output a reader would read as healthy while nothing had happened.

Fixed

  • A locally-created repo was auto-activated and then never backed up. Discovery
    deliberately scans the local project parent as well as the OneDrive one, so a repo
    created locally is found and activated before it exists on OneDrive — and then the
    run loop's vanished-side guard skipped it every cycle, because it could not tell
    "the OneDrive copy was DELETED" from "it has never existed yet". The repo was
    auto-activated and passed over, every 30 minutes, indefinitely. The guard now uses
    the baseline as the discriminator: no baseline means it has never synced, so it
    is seeded and pushed up; a baseline proves the copy once existed, so a genuinely
    vanished one is still protected and never mirrored as a deletion. Three repos on one
    machine had no OneDrive copy at all when this was found — one of them since 26 August.
  • A skipped project was invisible in the run summary. Both skip paths continued
    before the tally, so a run that silently skipped three repos still reported
    ok=21 warn=4 and looked healthy. That is precisely why the defect above survived
    weeks of 30-minute cycles. Skips are now counted and reported, and the two reasons
    get deliberately different words: skipped (did not sync — no backup) can never
    merge into carried (fine, just next cycle).
  • An interrupted bisync could wedge a pair permanently. ods never passed rclone's
    --max-lock, and rclone's default is 0 = never expire, so a lock left by a killed
    run never lapsed — one observed on another machine advertised an expiry in the year
    2226. Bounded now by bisync_max_lock_minutes (default 30; 0 keeps rclone's
    behaviour, and rclone's own 2-minute floor is respected).
  • A destructive command accepted an id matching nothing and reported success.
    resolve_id refused an ambiguous id but returned an unmatched one verbatim, so
    ods forget tombstoned a junk id and exited 0 while the real project stayed active.
    The trigger was an unquoted Windows path in bash, which strips the backslashes.
    Unmatched ids are now refused for destructive commands, with an error naming the
    quoting cause; ods forget --force covers the legitimate case of retiring an id that
    genuinely no longer exists on this machine. forget now also prints what it did
    rather than only writing it to the log.

Changed

  • tests/divergence.rs now builds a hermetic fixture (core.hooksPath plus
    init.templateDir=), so a machine-global git hook cannot take the suite down. An
    identity-checking pre-commit hook had begun refusing the fixture's own throwaway
    author, failing the integration test on completely unmodified code.

Full Changelog: v0.3.4...v0.3.5