Add --base meta-argument to set prev/pend/deltas as subdirs
This commit is contained in:
@@ -12,9 +12,10 @@ Commands:
|
||||
|
||||
Options:
|
||||
--source <path> SOURCE directory (required)
|
||||
--prev <path> PREV directory (required)
|
||||
--pend <path> PEND directory (required)
|
||||
--deltas <path> DELTAS directory (required)
|
||||
--base <path> Sets --prev, --pend, --deltas as subdirs of base path
|
||||
--prev <path> PREV directory (default: <base>/previous)
|
||||
--pend <path> PEND directory (default: <base>/pending)
|
||||
--deltas <path> DELTAS directory (default: <base>/deltas)
|
||||
--backend <name> Delta backend: zstd (default), xdelta3
|
||||
--config <file> Load options from JSON config file (flags override)
|
||||
--dry-run Print what would happen, execute nothing
|
||||
@@ -26,6 +27,7 @@ export function parseArgs(argv) {
|
||||
args: argv,
|
||||
options: {
|
||||
source: { type: 'string' },
|
||||
base: { type: 'string' },
|
||||
prev: { type: 'string' },
|
||||
pend: { type: 'string' },
|
||||
deltas: { type: 'string' },
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
* CLI args always win. Required paths are validated here.
|
||||
*/
|
||||
import { readFile } from 'fs/promises';
|
||||
import { join } from 'path';
|
||||
|
||||
const REQUIRED_PATHS = ['source', 'prev', 'pend', 'deltas'];
|
||||
const DEFAULTS = {
|
||||
@@ -25,6 +26,13 @@ export async function loadConfig(args) {
|
||||
// CLI args override file config, file config overrides defaults
|
||||
const config = { ...DEFAULTS, ...fileConfig, ...filterDefined(args) };
|
||||
|
||||
// Expand --base into --prev/--pend/--deltas, explicit flags take priority
|
||||
if (config.base) {
|
||||
config.prev ??= join(config.base, 'previous');
|
||||
config.pend ??= join(config.base, 'pending');
|
||||
config.deltas ??= join(config.base, 'deltas');
|
||||
}
|
||||
|
||||
// Guard: refuse to run if any required path is missing
|
||||
if (config.command === 'run') {
|
||||
const missing = REQUIRED_PATHS.filter(k => !config[k]);
|
||||
|
||||
Reference in New Issue
Block a user