diff --git a/README.md b/README.md index bc9575c..d68b1ed 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,52 @@ # BSV - Backup, Synchronization, Versioning -Readme to be done. +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... diff --git a/pyproject.toml b/pyproject.toml index 38255ef..2fb48d3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,9 +22,8 @@ test = [ ] [project.urls] -# TODO -# "Homepage" = "https://github.com/pypa/sampleproject" -# "Bug Tracker" = "https://github.com/pypa/sampleproject/issues" +"Homepage" = "https://git.draklia.net/draklaw/pybsv" +"Bug Tracker" = "https://git.draklia.net/draklaw/pybsv/issues" [project.scripts] bsv = "bsv.main:main" diff --git a/src/bsv/command/init.py b/src/bsv/command/init.py index 765f1cc..eb43e08 100644 --- a/src/bsv/command/init.py +++ b/src/bsv/command/init.py @@ -25,7 +25,7 @@ from bsv.command import command def init_parser(parser: ArgumentParser): parser.add_argument( - "--name", "-d", + "--name", "-n", help = "Name of the repository. Default to system hostname.", ) parser.add_argument( diff --git a/src/bsv/repository.py b/src/bsv/repository.py index c666483..0a868d4 100644 --- a/src/bsv/repository.py +++ b/src/bsv/repository.py @@ -22,7 +22,7 @@ from io import BytesIO from pathlib import Path, PurePosixPath import platform import tomllib -from typing import TYPE_CHECKING, BinaryIO, Callable, Self, Type +from typing import TYPE_CHECKING, BinaryIO, Callable, Self from fastcdc import fastcdc import tomlkit