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