0.1.0-alpha.1
This commit is contained in:
parent
b2a0a9eeae
commit
0d99f44291
3 changed files with 259 additions and 2 deletions
257
README.en.md
Normal file
257
README.en.md
Normal file
|
@ -0,0 +1,257 @@
|
||||||
|
# snag
|
||||||
|
|
||||||
|
`snag` (snapshot git) is a command-line utility for creating, managing, and restoring data snapshots. It allows importing, exporting, creating, and restoring snapshots, as well as managing file tracking rules.
|
||||||
|
|
||||||
|
## Build
|
||||||
|
|
||||||
|
To build, a pre-installed D language compiler (dmd/ldc/gdc) is required. For convenience, use the dub package manager:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
dub build --build=release
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Basic command format:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
snag [flags] [options] command
|
||||||
|
```
|
||||||
|
|
||||||
|
### Flags
|
||||||
|
- `-h, --help` — Displays help.
|
||||||
|
- `--version` — Displays the utility version.
|
||||||
|
|
||||||
|
### Options
|
||||||
|
- `-c, --config <path>` — Specifies the path to the configuration file.
|
||||||
|
|
||||||
|
### Commands
|
||||||
|
- `init` — Initializes a repository for storing snapshots.
|
||||||
|
- `create` — Creates a new snapshot.
|
||||||
|
- `import` — Imports a snapshot from a tar.gz archive.
|
||||||
|
- `export` — Exports a snapshot to a tar.gz archive.
|
||||||
|
- `restore` — Restores state from a specified snapshot.
|
||||||
|
- `list` — Lists snapshots.
|
||||||
|
- `diff` — Shows changed data.
|
||||||
|
- `status` — Checks the status of tracked files.
|
||||||
|
- `rules` — Manages tracking rules.
|
||||||
|
- `size` — Displays snapshot sizes.
|
||||||
|
|
||||||
|
## Detailed Command Description
|
||||||
|
|
||||||
|
### `snag init`
|
||||||
|
Initializes a repository for storing snapshots.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
snag init [-h] [-f]
|
||||||
|
```
|
||||||
|
|
||||||
|
- `-f, --force` — Overwrites an existing repository.
|
||||||
|
|
||||||
|
### `snag create`
|
||||||
|
Creates a new snapshot.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
snag create [-h] [--no-pre] [--no-post] [-c <comment>] [-a <author>] [-e <email>]
|
||||||
|
```
|
||||||
|
|
||||||
|
- `--no-pre` — Skips pre-commands.
|
||||||
|
- `--no-post` — Skips post-commands.
|
||||||
|
- `-c, --comment <value>` — Specifies a comment for the snapshot.
|
||||||
|
- `-a, --author <value>` — Specifies the snapshot author.
|
||||||
|
- `-e, --email <value>` — Specifies the author's email.
|
||||||
|
|
||||||
|
### `snag import`
|
||||||
|
Imports a snapshot from a tar.gz archive.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
snag import [-h] [--no-pre] [--no-post] [-c <comment>] [-a <author>] [-e <email>] <archive_path>
|
||||||
|
```
|
||||||
|
|
||||||
|
- `--no-pre` — Skips pre-commands.
|
||||||
|
- `--no-post` — Skips post-commands.
|
||||||
|
- `-c, --comment <value>` — Comment for the snapshot.
|
||||||
|
- `-a, --author <value>` — Snapshot author.
|
||||||
|
- `-e, --email <value>` — Author's email.
|
||||||
|
- `<archive_path>` — Path to the tar.gz file.
|
||||||
|
|
||||||
|
### `snag export`
|
||||||
|
Exports a snapshot to a tar.gz archive.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
snag export [-h] [-s <snapshot_hash>] <output_path>
|
||||||
|
```
|
||||||
|
|
||||||
|
- `-s, --snapshot <hash>` — Specifies the snapshot hash.
|
||||||
|
- `<output_path>` — Path to the output directory for the archive.
|
||||||
|
|
||||||
|
### `snag restore`
|
||||||
|
Restores state from a specified snapshot.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
snag restore [-h] [--no-pre] [--no-post] <snapshot_hash>
|
||||||
|
```
|
||||||
|
|
||||||
|
- `--no-pre` — Skips pre-commands.
|
||||||
|
- `--no-post` —焦性
|
||||||
|
- `<snapshot_hash>` — Hash of the snapshot to restore.
|
||||||
|
|
||||||
|
### `snag list`
|
||||||
|
Lists snapshots.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
snag list [-h] [-c] [-a] [-e]
|
||||||
|
```
|
||||||
|
|
||||||
|
- `-c, --comment` — Show snapshot comments.
|
||||||
|
- `-a, --author` — Show snapshot authors.
|
||||||
|
- `-e, --email` — Show authors' emails.
|
||||||
|
|
||||||
|
### `snag diff`
|
||||||
|
Shows changed data.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
snag diff
|
||||||
|
```
|
||||||
|
|
||||||
|
### `snag status`
|
||||||
|
Checks the status of tracked files.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
snag status
|
||||||
|
```
|
||||||
|
|
||||||
|
### `snag size`
|
||||||
|
Displays snapshot sizes.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
snag size
|
||||||
|
```
|
||||||
|
|
||||||
|
### `snag rules`
|
||||||
|
Manages tracking rules.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
snag rules [-h] save|show|update|reset|clear
|
||||||
|
```
|
||||||
|
|
||||||
|
- `save` — Saves rules.
|
||||||
|
- `show` — Displays rules.
|
||||||
|
```bash
|
||||||
|
snag rules show [-h] [-c]
|
||||||
|
```
|
||||||
|
- `-c, --config` — Show rules from the configuration file.
|
||||||
|
- `update` — Updates rules.
|
||||||
|
```bash
|
||||||
|
snag rules update [-h] [-r]
|
||||||
|
```
|
||||||
|
- `-r, --remove` — Removes ignored files from tracking (use with caution!).
|
||||||
|
- `reset` — Resets rules to the state of committed changes.
|
||||||
|
- `clear` — Clears rules.
|
||||||
|
|
||||||
|
## Usage Examples
|
||||||
|
|
||||||
|
1. **Initialize a repository:**
|
||||||
|
```bash
|
||||||
|
snag init
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Create a snapshot with a comment:**
|
||||||
|
```bash
|
||||||
|
snag create -c "Initial snapshot" -a "John Doe" -e "john@example.com"
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Import a snapshot from an archive:**
|
||||||
|
```bash
|
||||||
|
snag import archive.tar.gz
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Export a snapshot:**
|
||||||
|
```bash
|
||||||
|
snag export -s abc123 /path/to/output
|
||||||
|
```
|
||||||
|
|
||||||
|
5. **Restore a snapshot:**
|
||||||
|
```bash
|
||||||
|
snag restore abc123
|
||||||
|
```
|
||||||
|
|
||||||
|
6. **View snapshot list with comments:**
|
||||||
|
```bash
|
||||||
|
snag list -c
|
||||||
|
```
|
||||||
|
|
||||||
|
7. **Update tracking rules:**
|
||||||
|
```bash
|
||||||
|
snag rules update
|
||||||
|
```
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
The `snag` utility supports configuration via a JSON configuration file specified with the `-c` or `--config` option. This file defines the utility’s operating parameters, including paths, author details, pre- and post-snapshot commands, and file tracking rules.
|
||||||
|
|
||||||
|
Example of using a configuration file:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
snag -c /path/to/config.json create
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example Configuration File
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"git": "/path/to/git/repository/dir",
|
||||||
|
"project": "/path/to/project",
|
||||||
|
"email": "user@site.domain",
|
||||||
|
"author": "snag",
|
||||||
|
"presnag": [
|
||||||
|
"systemctl stop my.service"
|
||||||
|
],
|
||||||
|
"postsnag": [
|
||||||
|
"systemctl start my.service"
|
||||||
|
],
|
||||||
|
"rules": {
|
||||||
|
"tracking": [
|
||||||
|
"/first_dir/",
|
||||||
|
"/second_dir/*.conf",
|
||||||
|
"/second_dir/more/"
|
||||||
|
],
|
||||||
|
"ignore": [
|
||||||
|
"/second_dir/more/*.so"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Configuration File Fields
|
||||||
|
|
||||||
|
- **`git`** (`string`): Path to the repository for storing snapshots. Example: `/path/to/git/repository/dir`. Used during `snag init` to specify the storage location for metadata and snapshots.
|
||||||
|
- **`project`** (`string`): Path to the project or directory whose files are tracked. Example: `/path/to/project`. Specifies the root directory for creating, importing, or restoring snapshots.
|
||||||
|
- **`email`** (`string`): Email of the snapshot author. Used for snapshot metadata in commands like `snag create` or `snag import`. Example: `user@site.domain`. Can be overridden by `-e` or `--email`.
|
||||||
|
- **`author`** (`string`): Name of the snapshot author. Used for snapshot metadata. Example: `snag`. Can be overridden by `-a` or `--author`.
|
||||||
|
- **`presnag`** (`array of strings`): Commands executed before creating or importing a snapshot (unless `--no-pre` is specified). Example:
|
||||||
|
- `systemctl stop my.service` — Stops the `my.service` service before the operation to ensure data integrity.
|
||||||
|
- **`postsnag`** (`array of strings`): Commands executed after creating or importing a snapshot (unless `--no-post` is specified). Example:
|
||||||
|
- `systemctl start my.service` — Starts the `my.service` service after the operation.
|
||||||
|
- **`rules`** (`object`): Defines file tracking rules.
|
||||||
|
- **`tracking`** (`array of strings`): Patterns of files or directories to track. Example:
|
||||||
|
- `/first_dir/` — Tracks the entire `/first_dir` directory and its contents.
|
||||||
|
- `/second_dir/*.conf` — Tracks all `.conf` files in `/second_dir`.
|
||||||
|
- `/second_dir/more/` — Tracks the entire `/second_dir/more` directory and its contents.
|
||||||
|
- **`ignore`** (`array of strings`): Files or directories excluded from tracking. Example:
|
||||||
|
- `/second_dir/more/*.so` — Ignores all `.so` files in `/second_dir/more`.
|
||||||
|
|
||||||
|
### Notes
|
||||||
|
|
||||||
|
- Rules in the `rules` section can be updated with `snag rules update` or viewed with `snag rules show -c`.
|
||||||
|
- Command-line parameters like `email` or `author` (e.g., via `-e` or `-a`) take precedence over configuration file values.
|
||||||
|
- Ensure paths specified in `git` and `project` exist and are readable/writable before operations.
|
||||||
|
- Commands in `presnag` and `postsnag` must be valid and accessible in the system, or the operation may fail.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
GPL-2.0 License. See the `LICENSE` file for details.
|
||||||
|
|
||||||
|
## Contact
|
||||||
|
|
||||||
|
For questions and suggestions: alexander@zhirov.kz
|
2
dub.json
2
dub.json
|
@ -3,7 +3,7 @@
|
||||||
"Alexander Zhirov"
|
"Alexander Zhirov"
|
||||||
],
|
],
|
||||||
"copyright": "Copyright © 2025, Alexander Zhirov",
|
"copyright": "Copyright © 2025, Alexander Zhirov",
|
||||||
"description": "A backup system based on tracking file states using Git",
|
"description": "Сommand-line utility for creating, managing, and restoring data snapshots",
|
||||||
"license": "GPL-2.0-or-later",
|
"license": "GPL-2.0-or-later",
|
||||||
"name": "snag",
|
"name": "snag",
|
||||||
"targetPath": "bin",
|
"targetPath": "bin",
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
module snag.version_;
|
module snag.version_;
|
||||||
|
|
||||||
enum snagVersion = "0.0.13";
|
enum snagVersion = "0.1.0-alpha.1";
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue