fix: allow shared CLI flags after subcommands in scan and plan modes
This commit is contained in:
parent
168f0a38ed
commit
4d36198bdd
1 changed files with 44 additions and 14 deletions
|
|
@ -94,10 +94,6 @@ def classify_entries(
|
||||||
|
|
||||||
|
|
||||||
def dedupe_entries(entries: Iterable[dict[str, Any]]) -> list[dict[str, Any]]:
|
def dedupe_entries(entries: Iterable[dict[str, Any]]) -> list[dict[str, Any]]:
|
||||||
"""
|
|
||||||
Dedupe primært på path.
|
|
||||||
Første forekomst bevares.
|
|
||||||
"""
|
|
||||||
deduped: list[dict[str, Any]] = []
|
deduped: list[dict[str, Any]] = []
|
||||||
seen: set[str] = set()
|
seen: set[str] = set()
|
||||||
|
|
||||||
|
|
@ -320,26 +316,61 @@ def run_borg(repo: str, include_paths: list[str], dry_run: bool = False) -> int:
|
||||||
|
|
||||||
|
|
||||||
def parse_args(argv: list[str] | None = None) -> argparse.Namespace:
|
def parse_args(argv: list[str] | None = None) -> argparse.Namespace:
|
||||||
|
common = argparse.ArgumentParser(add_help=False)
|
||||||
|
common.add_argument("--repo", help="Borg repository path")
|
||||||
|
common.add_argument(
|
||||||
|
"--run-borg",
|
||||||
|
action="store_true",
|
||||||
|
help="Run borg create after building the backup plan",
|
||||||
|
)
|
||||||
|
common.add_argument(
|
||||||
|
"--dry-run",
|
||||||
|
action="store_true",
|
||||||
|
help="Show borg command without executing it",
|
||||||
|
)
|
||||||
|
common.add_argument(
|
||||||
|
"--automation",
|
||||||
|
action="store_true",
|
||||||
|
help="Output machine-readable JSON",
|
||||||
|
)
|
||||||
|
common.add_argument(
|
||||||
|
"--quiet",
|
||||||
|
action="store_true",
|
||||||
|
help="Suppress normal human-readable plan output",
|
||||||
|
)
|
||||||
|
common.add_argument(
|
||||||
|
"--verbose",
|
||||||
|
action="store_true",
|
||||||
|
help="Enable verbose logging",
|
||||||
|
)
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
prog="dockervault",
|
prog="dockervault",
|
||||||
description="Intelligent Docker backup discovery with Borg integration",
|
description="Intelligent Docker backup discovery with Borg integration",
|
||||||
|
parents=[common],
|
||||||
)
|
)
|
||||||
|
|
||||||
subparsers = parser.add_subparsers(dest="command")
|
subparsers = parser.add_subparsers(dest="command")
|
||||||
|
|
||||||
plan_parser = subparsers.add_parser("plan", help="Analyze a single compose file")
|
plan_parser = subparsers.add_parser(
|
||||||
|
"plan",
|
||||||
|
help="Analyze a single compose file",
|
||||||
|
parents=[common],
|
||||||
|
)
|
||||||
plan_parser.add_argument("compose", help="Path to docker-compose.yml or compose.yaml")
|
plan_parser.add_argument("compose", help="Path to docker-compose.yml or compose.yaml")
|
||||||
|
|
||||||
scan_parser = subparsers.add_parser("scan", help="Scan a directory for compose files")
|
scan_parser = subparsers.add_parser(
|
||||||
|
"scan",
|
||||||
|
help="Scan a directory for compose files",
|
||||||
|
parents=[common],
|
||||||
|
)
|
||||||
scan_parser.add_argument("root", help="Root directory to scan")
|
scan_parser.add_argument("root", help="Root directory to scan")
|
||||||
|
|
||||||
parser.add_argument("--repo", help="Borg repository path")
|
parser.add_argument(
|
||||||
parser.add_argument("--run-borg", action="store_true", help="Run borg create after building the backup plan")
|
"--version",
|
||||||
parser.add_argument("--dry-run", action="store_true", help="Show borg command without executing it")
|
action="version",
|
||||||
parser.add_argument("--automation", action="store_true", help="Output machine-readable JSON")
|
version=f"%(prog)s {__version__}",
|
||||||
parser.add_argument("--quiet", action="store_true", help="Suppress normal human-readable plan output")
|
)
|
||||||
parser.add_argument("--verbose", action="store_true", help="Enable verbose logging")
|
|
||||||
parser.add_argument("--version", action="version", version=f"%(prog)s {__version__}")
|
|
||||||
|
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"legacy_target",
|
"legacy_target",
|
||||||
|
|
@ -349,7 +380,6 @@ def parse_args(argv: list[str] | None = None) -> argparse.Namespace:
|
||||||
|
|
||||||
args = parser.parse_args(argv)
|
args = parser.parse_args(argv)
|
||||||
|
|
||||||
# legacy mode: dockervault docker-compose.yml
|
|
||||||
if args.command is None and args.legacy_target:
|
if args.command is None and args.legacy_target:
|
||||||
args.command = "plan"
|
args.command = "plan"
|
||||||
args.compose = args.legacy_target
|
args.compose = args.legacy_target
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue