Skip to content

Foresight v0.1.2 — exclude-rule editor and a preset save fix

Choose a tag to compare

@superuser-miguel superuser-miguel released this 29 Jul 17:50
· 44 commits to main since this release
v0.1.2

An exclude-rule editor, and a fix for presets that quietly failed to save.

Exclude rules are a list now

Advanced → Exclude patterns was a single space-separated field, which made a whole class of rule impossible to write: My Documents/ split into two rules, My and Documents/, and neither matched anything. Since Foresight hands rsync an argv vector with no shell in between, that splitting was self-inflicted — nothing downstream ever needed it.

It's now a list: one row per rule, each with its own remove button, added by typing a rule and pressing Enter. The row header shows how many rules are active without opening it. Rules are trimmed of surrounding whitespace but otherwise passed whole, so My Documents/, Photos [2024], and weird;name all work. Duplicates are refused rather than silently doubled.

Fixed: presets that looked saved but weren't

A preset whose name contained [, ], a tab, or a line break was silently discarded on save. The name was used as a config-file section header, and those characters aren't legal there — so nothing was written.

The failure was invisible: the preset appeared in the dropdown, applied correctly, and kept working for the rest of the session. It was simply gone at the next launch, with no error anywhere. A preset called Photos [raw] was enough to trigger it.

Preset names are now stored as ordinary values, so no name can be unstorable.

Upgrading

If you installed from the repository, this arrives with:

flatpak update

If you're on a bundle install, switch over once and updates come automatically from then on:

flatpak uninstall --user io.github.superuser_miguel.Foresight
flatpak install --user https://superuser-miguel.github.io/foresight/foresight.flatpakref

Existing presets load unchanged and are migrated to the new layout the next time you save one. Nothing to do by hand.

Two rsync behaviours worth knowing

Both are correct rsync, and both surprise people:

  • Excluded files already in the destination are protected from Mirror deletions. If you exclude *.tmp, old .tmp files sitting in the destination are kept, not removed. Add --delete-excluded under Extra arguments if you want them gone.
  • A rule can't end in a space, since surrounding whitespace is trimmed. A file literally named "report " can't be excluded by name.

How it ships

Sandboxed, reaching your files only through XDG portals — no --filesystem=home, no blanket host access. rsync 3.4.4 is bundled and version-pinned. No telemetry.

Built offline from the GPG-signed v0.1.2 tag against a vendored crate graph. Verify with git verify-tag v0.1.2 (key D67DB8E03D50A8C0).

Still to come

  • Include rules — --include alongside excludes, so a rule can carve an exception out of a broader one.
  • Remote sync over SSH. Network access and an ssh client are already in place; still needed are agent forwarding so keys never enter the sandbox, a host-key trust story, and the endpoint UI.

Full changelog: v0.1.1...v0.1.2