Refactor borg-wrapper argument parsing to use argparse for improved clarity and error handling
This commit is contained in:
parent
7866914df4
commit
55634220ae
1 changed files with 51 additions and 28 deletions
|
@ -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
|
||||||
|
|
Loading…
Add table
Reference in a new issue