Skip to content

Seafile Vault CLI v0.2.0

Choose a tag to compare

@soffits soffits released this 27 Jul 02:51
· 3 commits to main since this release
14a3e25

Highlights

  • Added a secure streamed download command with bounded reads, SHA-256 results, mode-0600 temporary files, held parent-directory descriptors, and atomic publish/overwrite behavior.
  • Added file-only stat for direct remote metadata and deterministic remote_not_found errors.
  • Added list --compact, --recursive, and --type file|dir; compact output omits modifier emails, lock metadata, object/repository IDs, and other Seafile internals.
  • Added idempotent mkdir --parents.
  • Plain mkdir now rejects exact-name conflicts instead of allowing Seafile to silently create names such as Housing (1).

Safety and correctness

  • Temporary download links remain internal to download and are redacted from errors.
  • Destination symlinks, directories, and special files are rejected.
  • Partial writes, truncated responses, size-limit failures, HTTP failures, and missing remote files do not publish partial downloads or corrupt an existing destination.
  • Download destination operations use a held parent directory descriptor for validation, temporary creation, atomic publication, cleanup, and fsync.
  • Seafile directory-create responses are checked for implicit conflict renames; unexpected renamed directories are cleaned up and reported as errors.

Verification

  • 195 local tests passed with Ruff clean.
  • GitHub Actions passed on Python 3.11, 3.12, and 3.13, followed by wheel/sdist build and artifact verification.
  • twine check passed for both release artifacts.
  • Clean wheel installation passed CLI and optional MCP smoke tests.
  • A reversible live Seafile smoke test passed recursive/idempotent mkdir, conflict rejection, upload, stat, compact/recursive listing, download, no-overwrite, overwrite, SHA-256 verification, missing-file handling, and complete remote cleanup.

AGPL-3.0-only.