# 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 [] [--repo ]` command to initialize bsv. - [ ] `bsv repo [-v]` list all known repositories. - [ ] `bsv repo create ` create a new repository. - [ ] `bsv repo add [] ` add an already existing repository. - [ ] `bsv repo remove |` remove a repository. - [ ] `bsv map` list mappings between bsv paths and filesystem paths. - [ ] `bsv map add ` add a mapping. - [ ] `bsv map remove ` remove a mapping. - [ ] `bsv log` show the history of snapshots. - [ ] `bsv show ` show the object `digest`. - [ ] `bsv ls ` list files in a bsv directory. - [ ] `bsv mkdir ` create a directory in bsv directly. - [ ] `bsv add ` copy files from the filesystem to bsv. - [ ] `bsv get ` 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 ` update files on the filesystem to the version captured by `snapshot`. - [x] Simple CAS implementation (it's OK if it's naïve). - [x] Content-based chunking to store files. ### Later - [ ] `bsv fetch []` 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 [] [-m ]` 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...