Skip to content

Make the missing-GNU-rsync hint platform-specific and actionable #1378

Description

@jss367

Problem

When a remote move is blocked because the machine has no GNU rsync, the error tells the user what is wrong but leaves them to work out how to fix it — including researching which package to install and how.

The message shown on Test connection:

⚠ SSH and the remote path are reachable, but no GNU rsync was found for the transfer. Install GNU rsync for your platform or set its path under Settings → Paths.

And the platform-support hint (vireo/platform_support.py:201):

Install GNU rsync and configure its executable under Settings → Paths.

Why it matters

This is a hard stop for a non-technical user. macOS ships Apple's openrsync, which reports itself as "rsync version 2.6.9 compatible" — so a user who checks rsync --version sees a plausible-looking rsync and concludes the app is wrong about it. Nothing in the message hints that the system binary is the problem, or that a second rsync is needed alongside it.

The app already knows everything required to give a precise instruction at the moment it renders this message:

  • the platform is macOS (sys.platform)
  • /usr/bin/rsync resolved but failed is_gnu_rsync — i.e. this is specifically the openrsync case, not the nothing-installed case; platform_support.py:199 already distinguishes "misconfigured" from "missing"
  • Homebrew's install path /opt/homebrew/bin/rsync is already the third auto-detect candidate (vireo/move.py:270), so a brew install rsync will be picked up with no further configuration

Suggested fix

Make the hint platform- and state-specific:

  • macOS + openrsync detected → "macOS ships Apple's openrsync, which can't transfer over SSH. Install GNU rsync with brew install rsync" — with a copy button on the command. Add a note that no further configuration is needed afterward.
  • macOS + nothing found → same command.
  • Linux → the distro package hint (apt install rsync / dnf install rsync).
  • Windows → existing guidance.

Also worth reconsidering the "or set its path under Settings → Paths" suffix. It's the escape hatch, but it's listed as a co-equal option, which invites users to go hunting in Settings for a path they don't have yet. Leading with the install command and demoting the manual path to a secondary line would match what almost everyone needs.

Note

Once brew install rsync runs, auto-detect works with no user action — verified via the app's own resolver:

>>> move.resolve_rsync_bin()
'/opt/homebrew/bin/rsync'
>>> move.is_gnu_rsync('/opt/homebrew/bin/rsync')
True

So the entire remaining gap really is just the wording of the hint.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions