From 688e073486606908a5df3ad659bdc40ee9508f2b Mon Sep 17 00:00:00 2001 From: Wolfgang Müller Date: Sun, 24 Feb 2019 02:08:41 +0100 Subject: Initial commit --- rolectl | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100755 rolectl (limited to 'rolectl') diff --git a/rolectl b/rolectl new file mode 100755 index 0000000..3351dbc --- /dev/null +++ b/rolectl @@ -0,0 +1,74 @@ +#!/bin/sh + +STOW_DIR=/etc/portage/stow +TARGET=/etc/portage + +stowcmd="stow -d "$STOW_DIR" -t "$TARGET"" + +need_root() { + if test $(id -u) -ne 0; then + printf 'This action requires superuser access.\n' + exit 1 + fi +} + +add() { + need_root + $stowcmd -S "$@" +} + +remove() { + need_root + $stowcmd -D "$@" +} + +flush() { + need_root + list | xargs -- $stowcmd -D +} + +rebuild() { + need_root + list | xargs -- $stowcmd -R +} + +list() { + subcmd="$1" + shift + case $subcmd in + active) list_active;; + all) list_all;; + available) list_available;; + *) list_active;; + esac +} + +list_active() { + # XXX: -r for xargs is a GNU extension + find /etc/portage/ -lname "*stow/*" -print0 2>/dev/null \ + | xargs -r0 readlink \ + | sed 's:.*stow/\([^/]\+\)/.*:\1:' \ + | sort -u +} + +list_all() { + ls -1 "$STOW_DIR" +} + +list_available() { + tmp="$(mktemp)" || exit 1 + list_active > "$tmp" + list_all | comm -13 "$tmp" - + rm -f "$tmp" +} + +cmd="$1" +shift +case $cmd in + add) add "$@";; + flush) flush;; + list) list "$@";; + rebuild) rebuild;; + remove) remove "$@";; + *) list_active;; +esac -- cgit v1.2.3-2-gb3c3