Replace rm -rf PEND with mkdir -p, use --delete on both rsyncs

This commit is contained in:
2026-03-07 01:32:33 +00:00
parent e999fca352
commit d1c65a06d5

View File

@@ -1,7 +1,7 @@
/** /**
* run command — full backup run. * run command — full backup run.
*/ */
import { rm, mkdir, rename, writeFile } from 'fs/promises'; import { mkdir, rename, writeFile } from 'fs/promises';
import { join } from 'path'; import { join } from 'path';
import { run as spawn, capture } from '../spawn.js'; import { run as spawn, capture } from '../spawn.js';
import { parseItemize } from '../itemize.js'; import { parseItemize } from '../itemize.js';
@@ -22,20 +22,18 @@ export async function runCommand(config) {
// TODO: detect and recover from partially-committed previous run // TODO: detect and recover from partially-committed previous run
// ── Phase 1: Clear PEND ───────────────────────────────────── // ── Phase 1: Ensure PEND exists ─────────────────────────────
await setPhase(deltas, state, PHASES.CLEARING_PEND, dry); await setPhase(deltas, state, PHASES.CLEARING_PEND, dry);
console.log('\n── Clear PEND ──');
if (!dry) { if (!dry) {
await rm(pend, { recursive: true, force: true });
await mkdir(pend, { recursive: true }); await mkdir(pend, { recursive: true });
} else { } else {
console.log(`[dry-run] rm -rf ${pend} && mkdir -p ${pend}`); console.log(`[dry-run] mkdir -p ${pend}`);
} }
// ── Phase 2: rsync PREV → PEND (local seed) ───────────────── // ── Phase 2: rsync PREV → PEND (local seed, with delete) ────
await setPhase(deltas, state, PHASES.RSYNC_LOCAL, dry); await setPhase(deltas, state, PHASES.RSYNC_LOCAL, dry);
console.log('\n── rsync PREV → PEND (local seed) ──'); console.log('\n── rsync PREV → PEND (local seed) ──');
await spawn('rsync', ['-aP', trailingSlash(prev), trailingSlash(pend)], { dryRun: dry }); await spawn('rsync', ['-aP', '--delete', trailingSlash(prev), trailingSlash(pend)], { dryRun: dry });
// ── Phase 3: rsync SOURCE → PEND, capture change list ─────── // ── Phase 3: rsync SOURCE → PEND, capture change list ───────
await setPhase(deltas, state, PHASES.RSYNC_REMOTE, dry); await setPhase(deltas, state, PHASES.RSYNC_REMOTE, dry);