#!/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 } die() { echo "err: $1" >&2 exit 1 } ok() { echo "ok: $1" >&2 } if [ -f "$CFG" ]; then . "$CFG" fi 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 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 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() { 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_DIR" || die "missing $PORTS_DIR." git pull || die "failed git pull on $PORTS_DIR." if [ "$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 else (mp_del "$1") (mp_add "$1") ok "$1 updated." fi } mp_init 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