From 3849ba50130ad0914597798780b0983825e2e7cf Mon Sep 17 00:00:00 2001 From: Druid520 Date: Tue, 11 Aug 2026 21:50:18 -0700 Subject: MOD: update yay! --- mp.sh | 175 ++++++++++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 118 insertions(+), 57 deletions(-) (limited to 'mp.sh') diff --git a/mp.sh b/mp.sh index 1f924a7..b3f35a0 100755 --- a/mp.sh +++ b/mp.sh @@ -1,6 +1,15 @@ #!/usr/bin/env sh set -e +WD="${WD:-/usr/local/mp}" +PORTS="${PORTS:-/usr/local/ports/ports}" +PORTS_DIR="${PORTS_DIR:-/usr/local/ports}" +PORTS_REPO="${PORTS_REPO:-https://codeberg.org/Druid520/ports.git}" +STATUS="$WD/status" +INSTALLED="$WD/installed" +EXTINSTALLED="$WD/extinstalled" +CFG="/etc/mp.conf" + war() { echo "warn: $1" >&2 } @@ -12,73 +21,125 @@ ok() { echo "ok: $1" >&2 } -if command -v doas >/dev/null 2>&1; then - rx() { - doas "$@" - } - return -elif command -v sudo >/dev/null 2>&1; then - rx() { - sudo "$@" - } - return -else - die "permission elevator not found." +if [ -f "$CFG" ]; then + . "$CFG" fi -wd="/usr/local/mp" -ports="/usr/local/ports/ports" -ports_repo="https://codeberg.org/Druid520/ports.git" -status="$wd/status" -_installed="$wd/installed" -installed="$wd/extinstalled" +mp_init() { + if [ -f "$STATUS" ]; then + return + fi + war "uninitialized, initializing." + git clone "$PORTS_REPO" "$PORTS_DIR" --depth 1 || die "failed cloning $PORTS_REPO to $PORTS_DIR." + mkdir -p "$WD" || die "failed making $WD." + touch "$STATUS" "$INSTALLED" "$EXTINSTALLED" || die "failed making $STATUS, $INSTALLED, $EXTINSTALLED." +} +mp_add() { + if [ -z "$1" ]; then + die "pkg name required." + fi + if [ ! -d "$PORTS/$1" ]; then + die "port $1 not found." + fi -cfg="/etc/mp.conf" -if [ -f "$cfg" ]; then - . "$cfg" -else - war "cfg not found, creating one." - rx touch "$cfg" -fi + cp -r "$PORTS/$1" "$WD/$1" || die "failed copying $PORTS/$1 to $WD/$1." + cd "$WD/$1" || die "failed changing directory to $WD/$1." + + if [ -f "pkg.conf" ]; then + . pkg.conf || die "unknown error involving $WD/$1/pkg.conf." + else + die "missing $WD/$1/pkg.conf." + fi + if [ -z "$pkg_name" ]; then + die "pkg_name not set in $WD/$1/pkg.conf." + fi + if [ -z "$pkg_ver" ]; then + die "pkg_ver not set in $WD/$1/pkg.conf." + fi + if [ -z "$pkg_license" ]; then + die "pkg_license not set in $WD/$1/pkg.conf." + fi -mp_add() { - rx cp -r "$ports/$1" "$wd/$1" - (cd "$wd/$1" && . pkg.conf && rx sh ./add.sh && rx echo "$pkg_name" >> "$_installed" && rx echo "$pkg_name-$pkg_ver ($pkg_license)" >> "$installed") + if [ -f "add.sh" ]; then + sh add.sh || die "$WD/$1/add.sh failed." + else + die "missing $WD/$1/add.sh." + fi + + echo "$pkg_name" | tee -a "$INSTALLED" || die "failed writing to $INSTALLED." + echo "$pkg_name-$pkg_ver ($pkg_license)" | tee -a "$EXTINSTALLED" || die "failed writing to $EXTINSTALLED." + + ok "$pkg_name added." } mp_del() { - (cd "$wd/$1" && . pkg.conf && rx sh ./del.sh && rx sed "s/$pkg_name//g" "$_installed" && rx sed "s/$pkg_name-$pkg_ver ($pkg_license)//g" "$installed") - rx rm -rf "$wd/$1" + if [ -z "$1" ]; then + die "pkg name required." + fi + if [ ! -d "$WD/$1" ]; then + die "pkg not installed." + fi + + cd "$WD/$1" || die "failed changing directory to $WD/$1." + + if [ -f "pkg.conf" ]; then + . pkg.conf || die "unknown error involving $WD/$1/pkg.conf." + else + die "missing $WD/$1/pkg.conf." + fi + if [ -z "$pkg_name" ]; then + die "pkg_name not set in $WD/$1/pkg.conf." + fi + if [ -z "$pkg_ver" ]; then + die "pkg_ver not set in $WD/$1/pkg.conf." + fi + if [ -z "$pkg_license" ]; then + die "pkg_license not set in $WD/$1/pkg.conf." + fi + + if [ -f "del.sh" ]; then + sh del.sh || die "$WD/$1/del.sh failed." + else + die "missing $WD/$1/del.sh." + fi + + sed -i "/^$pkg_name$/d" "$INSTALLED" || die "failed writing to $INSTALLED." + sed -i "/^$pkg_name-$pkg_ver (/d" "$EXTINSTALLED" || die "failed writing to $EXTINSTALLED." + rm -rf "$WD/$1" || die "failed removing $WD/$1." + + ok "$pkg_name deleted." } mp_upd() { - (cd "$ports" && rx git pull) - if [ "$1" = "*" ]; then - for pkg in $(cat "$_installed"); do - (cd "$wd/$pkg" && . pkg.conf && rx sh ./del.sh && rx sh ./add.sh) + cd "$PORTS_DIR" || die "missing $PORTS_DIR." + git pull || die "failed git pull on $PORTS_DIR." + + if [ "$1" = "*" ] || [ -z "$1" ]; then + if [ ! -f "$INSTALLED" ]; then + die "no pkgs installed." + fi + for pkg in $(cat "$INSTALLED"); do + (mp_del "$pkg") + (mp_add "$pkg") + ok "$pkg updated." done - return + else + (mp_del "$1") + (mp_add "$1") + ok "$1 updated." fi - (cd "$wd/$1" && . pkg.conf && rx sh ./del.sh && rx sh ./add.sh) -} -mp_init() { - if [ -f "$status" ]; then - return - fi - - war "uninitialized, initializing." - rx git clone "$ports_repo" "$ports" --depth 1 - rx mkdir -p "$wd" - rx touch "$installed" "$_installed" "$status" } mp_init -if [ $# -ne 2 ]; then - die "bad usage. usage: mp ." -elif [ "$1" = "a" ]; then - mp_add "$2" -elif [ "$1" = "d" ]; then - mp_del "$2" -elif [ "$1" = "u" ]; then - mp_upd "$2" -else - die "bad usage. usage: mp ." -fi + +case $# in + 0|1) + die "usage: mp ." + ;; + *) + case $1 in + a) (mp_add "$2") ;; + d) (mp_del "$2") ;; + u) (mp_upd "$2") ;; + *) die "usage: mp ." ;; + esac + ;; +esac -- cgit 1.4.1