joplin-plugin-incremental-backup 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@ Each snapshot is a complete, self-contained copy of your data. Consecutive snaps
|
|
|
12
12
|
- **Deduplication** — files that are byte-identical to the previous snapshot are stored as hardlinks instead of copies. Changed and new files are stored normally, so every snapshot remains complete on its own.
|
|
13
13
|
- **Content-addressed matching** — files are matched by SHA-256 hash, so even renamed or moved notes don't consume extra space.
|
|
14
14
|
- **Retention pruning** — keeps a configurable number of snapshots (default: 5) and automatically deletes the oldest ones. Deleting an old snapshot never damages newer ones, because hardlinked files are only removed when no snapshot references them.
|
|
15
|
-
- **Skip unchanged backups** — if
|
|
15
|
+
- **Skip unchanged backups** — if nothing has changed since the last snapshot (notes, attachments, notebooks, tags, or which notes carry which tags), the backup is skipped entirely (can be disabled).
|
|
16
16
|
- **Integrity verification** — every snapshot includes a `manifest.json` with the size and SHA-256 hash of every file. A verify command re-checks the whole snapshot and reports any missing or corrupted files.
|
|
17
17
|
- **Crash-safe** — each backup run stages its files in a unique temporary directory (e.g. `_joplin_active_20261021T090000_12345_abcdef`) that is atomically renamed into place when complete. An exclusive lock prevents overlapping runs; the lock's mtime is refreshed periodically so a long export is never mistaken for an abandoned one. Stale locks are recovered atomically (rename-steal), and leftover staging data is cleaned up on startup unless another backup holds a fresh lock.
|
|
18
18
|
- **Disk-space pre-flight** — checks available space before starting a backup and aborts the run if the backup drive is below the minimum free-space threshold, so a full disk can't produce a truncated snapshot. (If free space can't be measured on a platform, the backup proceeds with a warning.)
|
|
@@ -21,7 +21,6 @@ Each snapshot is a complete, self-contained copy of your data. Consecutive snaps
|
|
|
21
21
|
- **Copy-mode warning** — if a previous snapshot exists but the filesystem doesn't support hardlinks (so every file had to be copied), a warning is shown so you know each snapshot consumes the full vault size.
|
|
22
22
|
- **Durable metadata** — `manifest.json` and `latest.txt` are fsynced before and after the atomic rename, and a best-effort directory fsync is attempted so a power cut can't corrupt the snapshot index. Exported files themselves are left to OS writeback; fsyncing 20 k files per backup would be prohibitive.
|
|
23
23
|
|
|
24
|
-
|
|
25
24
|
## How to use
|
|
26
25
|
|
|
27
26
|
1. Install the plugin and open **Tools > Options > Incremental Backup**.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "joplin-plugin-incremental-backup",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"scripts": {
|
|
5
5
|
"dist": "webpack --env joplin-plugin-config=buildMain && webpack --env joplin-plugin-config=buildExtraScripts && webpack --env joplin-plugin-config=createArchive",
|
|
6
6
|
"prepare": "npm run dist",
|
|
Binary file
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"manifest_version": 1,
|
|
3
3
|
"id": "io.github.raytray.joplin-incremental-backup",
|
|
4
4
|
"app_min_version": "3.7",
|
|
5
|
-
"version": "1.0.
|
|
5
|
+
"version": "1.0.3",
|
|
6
6
|
"name": "Incremental Backup",
|
|
7
7
|
"description": "Deduplicated incremental snapshots of your Joplin data using the native Raw export format.",
|
|
8
8
|
"author": "raytray",
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
"keywords": [
|
|
12
12
|
"backup"
|
|
13
13
|
],
|
|
14
|
-
"
|
|
15
|
-
"
|
|
14
|
+
"platforms": [
|
|
15
|
+
"desktop"
|
|
16
16
|
],
|
|
17
17
|
"categories": [
|
|
18
18
|
"files"
|
|
@@ -20,6 +20,6 @@
|
|
|
20
20
|
"screenshots": [],
|
|
21
21
|
"icons": {},
|
|
22
22
|
"promo_tile": {},
|
|
23
|
-
"_publish_hash": "sha256:
|
|
24
|
-
"_publish_commit": "main:
|
|
23
|
+
"_publish_hash": "sha256:cfeee5c68acb2a7ddf31f3f1981dea03ff960cefde01932ef16ccaedc48611d2",
|
|
24
|
+
"_publish_commit": "main:24c6b70de862802fe79d3c67b2afa903b4662630"
|
|
25
25
|
}
|