Refactor borg-wrapper argument parsing to use argparse for improved clarity and error handling

This commit is contained in:
Chris Toph 2025-04-20 13:15:22 -04:00
parent 7866914df4
commit 55634220ae

View file

@ -7,43 +7,66 @@
}: }:
let let
citron-emu = pkgs.callPackage (lib.custom.relativeToRoot "pkgs/common/citron-emu/package.nix") { # citron-emu = pkgs.callPackage (lib.custom.relativeToRoot "pkgs/common/citron-emu/package.nix") {
inherit pkgs; # inherit pkgs;
}; # };
borgtui = pkgs.callPackage (lib.custom.relativeToRoot "pkgs/common/borgtui/package.nix") { # borgtui = pkgs.callPackage (lib.custom.relativeToRoot "pkgs/common/borgtui/package.nix") {
inherit pkgs; # inherit pkgs;
}; # };
user = config.hostSpec.username; user = config.hostSpec.username;
borg-wrapper = pkgs.writeScript "borg-wrapper" '' borg-wrapper = pkgs.writeScript "borg-wrapper" ''
#!${lib.getExe pkgs.fish} #!${lib.getExe pkgs.fish}
# Parse arguments # Parse arguments using argparse
set -l CMD function parse_args
argparse 'p/path=' 'o/output=' 'm/max=' 'h/help' -- $argv
or return 1
while test (count $argv) -gt 0 if set -ql _flag_help
switch $argv[1] echo "Usage: borg-wrapper -p|--path PATH -o|--output REPO -m|--max MAX_BACKUPS -- COMMAND..."
case -p --path echo " -p, --path PATH Path to backup"
set BACKUP_PATH $argv[2] echo " -o, --output REPO Path to store backups"
set -e argv[1..2] echo " -m, --max MAX Maximum number of backups to keep"
case -o --output echo " -h, --help Show this help"
set BORG_REPO $argv[2] exit 0
set -e argv[1..2] end
case -m --max
set MAX_BACKUPS $argv[2] # Check required arguments
set -e argv[1..2] if not set -ql _flag_path
case -- echo "Error: --path is required" >&2
set -e argv[1] return 1
set CMD $argv end
set -e argv[1..-1] if not set -ql _flag_output
break echo "Error: --output is required" >&2
case '*' return 1
echo "Unknown option: $argv[1]" end
exit 1
# Set defaults
set -g BACKUP_PATH $_flag_path
set -g BORG_REPO $_flag_output
if set -ql _flag_max
set -g MAX_BACKUPS $_flag_max
else
set -g MAX_BACKUPS 30
end
# Everything remaining is the command to execute
set -g CMD $argv
# Verify we have a command
if test (count $CMD) -eq 0
echo "Error: No command specified after --" >&2
return 1
end end
end end
# Parse the arguments
parse_args $argv
or exit 1
# Initialize Borg repository # Initialize Borg repository
mkdir -p "$BORG_REPO" mkdir -p "$BORG_REPO"
if not ${pkgs.borgbackup}/bin/borg list "$BORG_REPO" &>/dev/null if not ${pkgs.borgbackup}/bin/borg list "$BORG_REPO" &>/dev/null