quak backup --verify re-hashes stored originals and downloads again any that do not match (closes #168)
check / check (push) Successful in 3m15s

`--verify`, or `lib.backup({ verify: true })`, hashes each original already
at its save path as the download check does, streamed, a live photo as
`<imageHash>:<videoHash>`. A mismatch is logged, removed and fetched again in
the same run; a failed fetch goes into `failures.json`. A file with no
recorded hash counts as unchecked. The result, the summary and `--json` gain
`verified`, `mismatched` and `unchecked`.

Judgement call: a stored original that cannot be read for hashing is recorded as failed and left in place.
Judgement call: the summary prints the three counts only with `--verify`.
Judgement call: the README's `BackupOptions` list does not name `verify`, to stay clear of #178's edit of that paragraph; Backup layout documents it.

Model: opus-5-5
This commit is contained in:
2026-10-06 14:57:36 +00:00
parent 31b50a211d
commit 73846b32fc
8 changed files with 391 additions and 7 deletions
+2 -1
View File
@@ -30,7 +30,8 @@ export const livePhotoZip = (
},
): Uint8Array => zipSync(entries);
const blake2b = (bytes: Uint8Array): string =>
// The content hash Ente's clients record for an original's bytes.
export const blake2b = (bytes: Uint8Array): string =>
createHash("blake2b512").update(bytes).digest("base64");
// The hash Ente's clients record for a live photo: the unkeyed BLAKE2b-512 of