fix(cli): don't let bm cloud setup overwrite an existing rclone remote (#923)

Closes #922

Signed-off-by: phernandez <paul@basicmemory.com>
This commit is contained in:
Paul Hernandez
2026-06-10 01:02:43 -05:00
committed by GitHub
parent c4b651f5b0
commit 8cbe1634b6
2 changed files with 85 additions and 11 deletions
@@ -28,6 +28,7 @@ from basic_memory.cli.commands.cloud.bisync_commands import (
)
from basic_memory.cli.commands.cloud.rclone_config import (
configure_rclone_remote,
rclone_remote_exists,
remote_name_for_workspace,
)
from basic_memory.cli.commands.cloud.rclone_installer import (
@@ -207,6 +208,11 @@ def setup(
help="Set up sync for a specific workspace (slug, name, or tenant_id). "
"Omit for your default workspace.",
),
force: bool = typer.Option(
False,
"--force",
help="Reconfigure an rclone remote that already exists (mints new credentials).",
),
) -> None:
"""Set up cloud sync by installing rclone and configuring credentials.
@@ -239,6 +245,20 @@ def setup(
workspace_id = None # default tenant
remote_name = remote_name_for_workspace(None, is_default=True)
# Trigger: the target rclone remote already exists.
# Why: re-running setup mints new credentials and overwrites the remote,
# which would silently repoint it — e.g. clobbering the shared
# basic-memory-cloud remote that served another tenant. Checked BEFORE
# minting so an abort wastes no credentials.
# Outcome: stop unless the user explicitly opts in with --force.
if rclone_remote_exists(remote_name) and not force:
console.print(f"[red]rclone remote '{remote_name}' is already configured.[/red]")
console.print(
"Re-running setup mints new credentials and overwrites it. "
"Pass --force to reconfigure."
)
raise typer.Exit(1)
# Step 2: Get tenant info (scoped to the target workspace when given)
console.print("\n[blue]Step 2: Getting tenant information...[/blue]")
tenant_info = run_with_cleanup(get_mount_info(workspace_id=workspace_id))