feat: add --update mode, --meta/--meta-plugin flags, streaming diff
- Add --update mode to modify tags and metadata for existing items by ID
- Add --meta key=value flag to set metadata during save/update
- Add --meta key (bare) to delete metadata keys or filter by existence
- Add --meta-plugin/-M name:{json} flag for plugin options via CLI
- Env meta plugin now uses options from --meta-plugin instead of only env vars
- Stream decompressed content to diff via /dev/fd pipes (no temp files)
- Wire --list-format CLI arg to settings (was parsed but ignored)
- Allow --info to accept tags (was restricted to numeric IDs only)
- Change DB meta filtering to HashMap<String, Option<String>> for exact match + key existence
- Fix fcntl error checking in diff pre_exec
- Fix README inaccuracies (delete by tag, nonexistent --digest flag, meta plugin key names)
This commit is contained in:
37
README.md
37
README.md
@@ -149,8 +149,8 @@ keep --list
|
||||
# Get item details
|
||||
keep --info greeting
|
||||
|
||||
# Delete by tag
|
||||
keep --delete greeting
|
||||
# Delete by ID
|
||||
keep --delete 1
|
||||
```
|
||||
|
||||
### Real-World Examples
|
||||
@@ -192,8 +192,8 @@ echo "data" | keep my-tag
|
||||
# Save with multiple tags and metadata
|
||||
cat report.pdf | keep --save report --meta project=alpha --meta env=prod
|
||||
|
||||
# Specify compression and digest algorithm
|
||||
echo "data" | keep --save my-tag --compression gzip --digest sha256
|
||||
# Specify compression
|
||||
echo "data" | keep --save my-tag --compression gzip
|
||||
```
|
||||
|
||||
Tags and metadata make items easy to find later. Tags are simple identifiers; metadata is key-value pairs.
|
||||
@@ -364,7 +364,7 @@ Metadata is automatically extracted when saving items.
|
||||
| `env` | `*` | Capture `KEEP_META_*` environment variables |
|
||||
| `magic_file` | `file_type` | File type detection (requires `magic` feature) |
|
||||
| `text` | `text_line_count`, `text_word_count` | Line and word counts |
|
||||
| `user` | `uid`, `user`, `gid`, `group` | Current user info |
|
||||
| `user` | `user_uid`, `user_name`, `user_gid`, `user_group` | Current user info |
|
||||
| `shell` | `shell` | Current shell path |
|
||||
| `shell_pid` | `shell_pid` | Shell process ID |
|
||||
| `keep_pid` | `keep_pid` | Keep process ID |
|
||||
@@ -376,8 +376,11 @@ Metadata is automatically extracted when saving items.
|
||||
| `cwd` | `cwd` | Current working directory |
|
||||
|
||||
```sh
|
||||
# Use specific plugins
|
||||
echo "data" | keep --save tag --meta-plugins "digest,text,user"
|
||||
# Use specific plugins (repeatable)
|
||||
echo "data" | keep --save tag --meta-plugin digest --meta-plugin text --meta-plugin user
|
||||
|
||||
# Pass options to a plugin via JSON
|
||||
echo "data" | keep --save tag --meta-plugin 'tokens:{"options":{"min_length":"2"}}'
|
||||
|
||||
# Capture custom metadata via environment
|
||||
KEEP_META_project=alpha echo "data" | keep --save tag
|
||||
@@ -395,7 +398,7 @@ KEEP_META_build=1234 echo "data" | keep --save tag --meta env=staging
|
||||
| `KEEP_DIR` | Storage directory | `~/.keep` |
|
||||
| `KEEP_CONFIG` | Config file path | `~/.config/keep/config.yml` |
|
||||
| `KEEP_COMPRESSION` | Compression algorithm | `lz4` |
|
||||
| `KEEP_META_PLUGINS` | Meta plugins to use | `env` |
|
||||
| `KEEP_META_PLUGINS` | Meta plugins to use (JSON format: `name[:{json}]`, comma-separated) | `env` |
|
||||
| `KEEP_FILTERS` | Default filter chain | none |
|
||||
| `KEEP_LIST_FORMAT` | List column format | built-in defaults |
|
||||
| `KEEP_SERVER_ADDRESS` | Server bind address | `127.0.0.1` |
|
||||
@@ -758,16 +761,16 @@ This means client behavior is consistent with local mode — the same compressio
|
||||
Client save uses a 3-thread streaming pipeline for constant memory usage regardless of data size:
|
||||
|
||||
```
|
||||
┌──────────────┐ OS pipe ┌────────────────┐
|
||||
┌───────────────┐ OS pipe ┌────────────────┐
|
||||
│ Reader thread ├──────────────────┤ Streamer thread│
|
||||
│ │ (compressed │ │
|
||||
│ stdin → tee │ bytes) │ pipe → POST │
|
||||
│ → hash │ │ (chunked) │
|
||||
│ → compress│ │ │
|
||||
└──────────────┘ └────────────────┘
|
||||
│ │
|
||||
▼ ▼
|
||||
stdout + Server stores blob
|
||||
│ │ (compressed │ │
|
||||
│ stdin → tee │ bytes) │ pipe → POST │
|
||||
│ → hash │ │ (chunked) │
|
||||
│ → compress │ │ │
|
||||
└───────────────┘ └────────────────┘
|
||||
│ │
|
||||
▼ ▼
|
||||
stdout + Server stores blob
|
||||
SHA-256 digest
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user