tgz: save integrity information as a Map

just for consistency because rsync will use a Map
This commit is contained in:
Girish Ramakrishnan
2025-08-13 08:39:01 +05:30
parent 2e16dd983f
commit dadbf1de90

View File

@@ -256,14 +256,15 @@ async function upload(backupTarget, remotePath, dataLayout, progressCallback) {
const uploader = await backupTargets.storageApi(backupTarget).upload(backupTarget.config, remotePath);
const { stats, integrity } = await tarPack(dataLayout, backupTarget.encryption, uploader, progressCallback);
const checksumData = [{ filename: path.basename(remotePath), ...integrity }];
const checksumDataJsonString = JSON.stringify(checksumData, null, 4);
const checksumDataStream = Readable.from(checksumDataJsonString);
const checksumUploader = await backupTargets.storageApi(backupTarget).upload(backupTarget.config, `${remotePath}.checksum`);
await stream.pipeline(checksumDataStream, checksumUploader.stream);
await checksumUploader.finish();
const integrityMap = new Map();
integrityMap.set(path.basename(remotePath), ...integrity);
const integrityDataJsonString = JSON.stringify([...integrityMap], null, 4);
const integrityDataStream = Readable.from(integrityDataJsonString);
const integrityUploader = await backupTargets.storageApi(backupTarget).upload(backupTarget.config, `${remotePath}.checksum`);
await stream.pipeline(integrityDataStream, integrityUploader.stream);
await integrityUploader.finish();
integrity.signature = await crypto.sign(null /* algorithm */, checksumDataJsonString, backupTarget.integrityKeyPair.privateKey);
integrity.signature = await crypto.sign(null /* algorithm */, integrityDataJsonString, backupTarget.integrityKeyPair.privateKey);
return { stats, integrity };
});
}