2021-08-31 14:48:33 +00:00
|
|
|
#!/bin/zsh
|
|
|
|
#dep:xi xbps-checkvers ag
|
|
|
|
|
|
|
|
source ${$(realpath "$0"):h:h}/lib/common.zsh
|
|
|
|
|
|
|
|
alternative-noparam column cat
|
|
|
|
|
|
|
|
PACKAGES_DIR=${VOID_PACKAGES_DIR:-${XDG_DATA_HOME:-$HOME/.local/share}/void-packages}
|
|
|
|
if [[ ! -d $PACKAGES_DIR ]]; then
|
|
|
|
#fallback to location also used by xbps-checkvers
|
|
|
|
PACKAGES_DIR=$HOME/void-packages
|
|
|
|
fi
|
|
|
|
if [[ ! -d $PACKAGES_DIR ]]; then
|
|
|
|
<<-ERR
|
|
|
|
void-packages repo not found. Either set VOID_PACKAGES_DIR or place it at one of the
|
|
|
|
following locations:
|
|
|
|
- ${XDG_DATA_HOME:-$HOME/.local/share}/void-packages
|
|
|
|
- $HOME/void-packages
|
|
|
|
ERR
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
zparseopts -D -E h=help -help=help j:=jobs -jobs:=jobs
|
|
|
|
|
|
|
|
if [[ $help ]]; then
|
|
|
|
<<-HELP
|
|
|
|
Usage: xrestricted list
|
|
|
|
xrestricted update
|
|
|
|
xrestricted install <PACKAGE...>
|
|
|
|
|
|
|
|
Install restricted packages from a void source repo. Detected repo at:
|
|
|
|
$VOID_PACKAGES_DIR
|
|
|
|
HELP
|
|
|
|
exit
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ ! $jobs ]]; then
|
|
|
|
jobs=$(nproc)
|
|
|
|
fi
|
|
|
|
|
|
|
|
cd $PACKAGES_DIR
|
2021-12-02 21:38:13 +00:00
|
|
|
|
|
|
|
check "Checking git branch..."
|
|
|
|
if [[ $(git rev-parse --abbrev-ref HEAD) != master ]]; then
|
|
|
|
if ! git diff --quiet; then
|
|
|
|
fail "not on master and working directory dirty, please fix manually"
|
|
|
|
exit 1
|
|
|
|
else
|
|
|
|
warn "not on master"
|
|
|
|
check "checking out master ..."
|
|
|
|
output=$(git checkout master 2>&1)
|
|
|
|
[[ $? == 0 ]] && succeed || { fail $output && exit 1 }
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
succeed "on master"
|
|
|
|
fi
|
|
|
|
|
2021-08-31 14:48:33 +00:00
|
|
|
packages=( $(ag -G 'template' restricted=yes srcpkgs/ | cut -d/ -f 2 | sort -u) )
|
|
|
|
|
|
|
|
version() { grep -Poe '(?<=^version=).*$' srcpkgs/$1/template }
|
|
|
|
install_restricted() {
|
2021-12-02 21:38:13 +00:00
|
|
|
if [[ -z $2 || -z hostdir/binpkgs/nonfree/$1-$2*(#qN) ]]; then
|
|
|
|
./xbps-src pkg -j $jobs $1
|
|
|
|
else
|
|
|
|
echo "Package already built for that version, installing..."
|
|
|
|
fi
|
2021-08-31 14:48:33 +00:00
|
|
|
xi $1
|
|
|
|
}
|
|
|
|
|
|
|
|
case $1 in
|
|
|
|
""|"list")
|
|
|
|
zparseopts -D -E v=verbose -verbose=verbose -versions=verbose
|
|
|
|
if [[ $verbose ]]; then
|
|
|
|
for pkg in $packages; do
|
|
|
|
printf "%s\t%s\n" $pkg $(version $pkg)
|
|
|
|
done | column -t
|
|
|
|
else
|
|
|
|
printf "%s\n" $packages
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
"update")
|
|
|
|
check "Updating package dir..."
|
2021-12-02 21:38:13 +00:00
|
|
|
git --git-dir=$PACKAGES_DIR/.git --work-tree=$PACKAGES_DIR/ pull &>/dev/null\
|
|
|
|
&& succeed || { fail && exit 1 }
|
2021-08-31 14:48:33 +00:00
|
|
|
possible_updates=$(
|
|
|
|
xbps-checkvers -I -D $PACKAGES_DIR -m $packages |
|
|
|
|
awk '$2 != "?" { print }'
|
|
|
|
)
|
|
|
|
|
2021-12-02 21:38:13 +00:00
|
|
|
if [[ -z $possible_updates ]]; then
|
|
|
|
echo "All up to date"
|
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
|
2021-08-31 14:48:33 +00:00
|
|
|
awk '{ printf "\x1b[34m%s\x1b[0m: %s → \x1b[92m%s\x1b[0m\n", $1, $2, $3 }' <<<"$possible_updates"
|
|
|
|
printf "Run updates? [y/N] "
|
|
|
|
if read -q; then
|
2021-12-02 21:38:13 +00:00
|
|
|
for pkg in $(cut -d' ' -f 1,3 <<<"$possible_updates"); do
|
|
|
|
install_restricted $pkg $ver
|
|
|
|
done
|
2021-08-31 14:48:33 +00:00
|
|
|
fi
|
|
|
|
;;
|
|
|
|
"install")
|
|
|
|
shift
|
|
|
|
for i in $@; install_restricted $i
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
for i in $@; install_restricted $i
|
|
|
|
;;
|
|
|
|
esac
|