mirror of
https://codeberg.org/kiss-community/kiss
synced 2024-12-25 00:20:05 -07:00
kiss-new: Argument handling
This commit is contained in:
parent
3f752d42e9
commit
f2804c2b66
89
kiss-new
89
kiss-new
@ -10,6 +10,9 @@
|
|||||||
# Keep in mind that this involves extra code in the case where
|
# Keep in mind that this involves extra code in the case where
|
||||||
# an error is optional or required.
|
# an error is optional or required.
|
||||||
#
|
#
|
||||||
|
# Where possible the package manager should "error first".
|
||||||
|
# Check things first, die is necessary and continue if all is well.
|
||||||
|
#
|
||||||
# The code below conforms to shellcheck's rules. However, some
|
# The code below conforms to shellcheck's rules. However, some
|
||||||
# lint errors *are* disabled as they relate to unexpected
|
# lint errors *are* disabled as they relate to unexpected
|
||||||
# behavior (which we do expect).
|
# behavior (which we do expect).
|
||||||
@ -56,28 +59,82 @@ pkg_search() {
|
|||||||
printf '%s\n' "$2"
|
printf '%s\n' "$2"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pkg_list() {
|
||||||
|
# List installed packages. As the format is files and
|
||||||
|
# diectories, this just involves a simple for loop and
|
||||||
|
# file read.
|
||||||
|
|
||||||
|
# Changing directories is similar to storing the full
|
||||||
|
# full path in a variable, only there is no variable as
|
||||||
|
# you can access children relatively.
|
||||||
|
cd "$KISS_ROOT/var/db/kiss" || \
|
||||||
|
die "KISS database doesn't exist or is inaccessible."
|
||||||
|
|
||||||
|
# Optional arguments can be passed to check for specific
|
||||||
|
# packages. If no arguments are passed, list all. As we
|
||||||
|
# loop over '$@', if there aren't any arguments we can
|
||||||
|
# just set the directory contents to the argument list.
|
||||||
|
[ "$1" ] || set -- *
|
||||||
|
|
||||||
|
# Loop over each version file and warn if one doesn't exist.
|
||||||
|
# Supress errors from 'read' as we print our own message.
|
||||||
|
for pkg; do
|
||||||
|
[ -d "$pkg" ] || {
|
||||||
|
log "Package '$pkg' is not installed."
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
[ -f "$pkg/version" ] || {
|
||||||
|
log "Warning: Package '$pkg' has no version file."
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
read -r version release < "$pkg/version" &&
|
||||||
|
printf '%s\n' "${pkg%/*} $version-$release"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
args() {
|
args() {
|
||||||
# Parse script arguments manually. POSIX 'sh' has no 'getopts'
|
# Parse script arguments manually. POSIX 'sh' has no 'getopts'
|
||||||
# or equivalent built in.
|
# or equivalent built in. This is rather easy to do in our case
|
||||||
[ "$1" ] || {
|
# since the first argument is always an "action" and the arguments
|
||||||
log "$kiss [b|c|i|l|r|u] [pkg]" \
|
# that follow are all package names.
|
||||||
"build: Build a package." \
|
|
||||||
"checksum: Generate checksums." \
|
|
||||||
"install: Install a package (Runs build if needed)." \
|
|
||||||
"list: List packages." \
|
|
||||||
"remove: Remove a package." \
|
|
||||||
"update: Check for updates."
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
action=$1
|
|
||||||
shift
|
|
||||||
|
|
||||||
|
# Actions can be abbreviated to their first letter. This saves
|
||||||
|
# keystrokes once you memorize themand it also has the side-effect
|
||||||
|
# of "correcting" spelling mistakes assuming the first letter is
|
||||||
|
# right.
|
||||||
while [ "$1" ]; do
|
while [ "$1" ]; do
|
||||||
case $action in
|
case $1 in
|
||||||
|
# Build the list of packages.
|
||||||
b*)
|
b*)
|
||||||
pkg_search "$1"
|
|
||||||
|
;;
|
||||||
|
|
||||||
|
# List installed packages.
|
||||||
|
l*)
|
||||||
shift
|
shift
|
||||||
|
pkg_list "$@"
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
|
||||||
|
# Print version and exit.
|
||||||
|
v*)
|
||||||
|
log "$kiss 0.1.10"
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
|
||||||
|
# Catch all invalid arguments as well as
|
||||||
|
# any help related flags (-h, --help, help).
|
||||||
|
*)
|
||||||
|
log "$kiss [b|c|i|l|r|u] [pkg]" \
|
||||||
|
"build: Build a package." \
|
||||||
|
"checksum: Generate checksums." \
|
||||||
|
"install: Install a package (Runs build if needed)." \
|
||||||
|
"list: List packages." \
|
||||||
|
"remove: Remove a package." \
|
||||||
|
"update: Check for updates."
|
||||||
|
exit
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
Loading…
Reference in New Issue
Block a user