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
while test (count $argv) -gt 0 or return 1
switch $argv[1]
case -p --path if set -ql _flag_help
set BACKUP_PATH $argv[2] echo "Usage: borg-wrapper -p|--path PATH -o|--output REPO -m|--max MAX_BACKUPS -- COMMAND..."
set -e argv[1..2] echo " -p, --path PATH Path to backup"
case -o --output echo " -o, --output REPO Path to store backups"
set BORG_REPO $argv[2] echo " -m, --max MAX Maximum number of backups to keep"
set -e argv[1..2] echo " -h, --help Show this help"
case -m --max exit 0
set MAX_BACKUPS $argv[2] end
set -e argv[1..2]
case -- # Check required arguments
set -e argv[1] if not set -ql _flag_path
set CMD $argv echo "Error: --path is required" >&2
set -e argv[1..-1] return 1
break end
case '*' if not set -ql _flag_output
echo "Unknown option: $argv[1]" echo "Error: --output is required" >&2
exit 1 return 1
end
# 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