Backup, Synchronization, Versioning.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2.8 KiB

BSV - Backup, Synchronization, Versioning

Bsv is a tool to perform backups, file/directory synchronization between devices and light versioning. It's architecture is inspired from git, but focus on backup first, synchronization second and as a byproduct also allow versioning.

Bsv is in a very early stage of development and is not production ready yet.

Development setup

Bsv currently only supports Python >= 3.11. Once you have a compatible Python version, just fetch the code and install bsv in editable mode in a virtual env:

git clone https://git.draklia.net/draklaw/pybsv.git
cd pybsv
python -m venv venv
. venv/bin/activate
pip install -e .[test]

This will automatically install the dependencies (including pytest). Happy hacking !

Roadmap

v0.0.1 - MVP

  • bsv init [<destination>] [--repo <local-repo-path>] command to initialize bsv.
  • bsv repo [-v] list all known repositories.
  • bsv repo create <name> <destination> create a new repository.
  • bsv repo add [<name>] <destination> add an already existing repository.
  • bsv repo remove <name>|<destination> remove a repository.
  • bsv map list mappings between bsv paths and filesystem paths.
  • bsv map add <bsv-path> <fs-path> add a mapping.
  • bsv map remove <bsv-path> <fs-path> remove a mapping.
  • bsv log show the history of snapshots.
  • bsv show <digest> show the object digest.
  • bsv ls <bsv-path> list files in a bsv directory.
  • bsv mkdir <bsv-path> create a directory in bsv directly.
  • bsv add <fs-path> <bsv-path> copy files from the filesystem to bsv.
  • bsv get <bsv-path> <fs-path> copy files from bsv to the filesystem.
  • bsv snapshot capture a snapshot, i.e. to ensure that mapped files in the repositories match what is on the filesystem.
  • bsv restore <snapshot> <fs-path> update files on the filesystem to the version captured by snapshot.
  • Simple CAS implementation (it's OK if it's naïve).
  • Content-based chunking to store files.

Later

  • bsv fetch [<name>] fetch latest metadata from known repositories.
  • bsv sync similar to snapshot + fetch + restore: Fetch latest changes from the repositories and update the filesystem to match. In case of conflict (file changed both in the repositories and locally), performs a snapshot first to ensure all conflicting versions are backed'up, then use some conflict-resolution strategy and warn the user.
  • bsv tag <name> [<snapshot>] [-m <message>] set/update a tag (an alias to a specific snapshot).
  • bsv watch starts a daemon that watch changes in mapped directories and automatically create snapshots.
  • bsv serve starts an http server that expose an API + an interface to manipulate BSV. Allow to list files, explore history, download and upload files...