#!/bin/sh -e command=$1 while read -r line; do export INPUT_$line done get_package_data() { name="${INPUT_File?File must be given to get-package-data}" echo PackageType=repo echo Name=$name } list_installed() { # Example pkg output: # sudo-1.8.14p3 # Name : sudo # Version : 1.8.14p3 # Installed on : Sun Aug 16 05:36:05 UTC 2015 # Origin : security/sudo # Architecture : freebsd:10:x86:64 # # After rewrite: # Name=sudo # Version=1.8.14p3 # Architecture=none pkg info -f -a | egrep '^(Name|Version|Architecture)' | sed -e 's/[ ]*:[ ]*/=/' -e 's/^Architecture=.*/Architecture=none/' } repo_install() { name="${INPUT_Name?Name must be given to repo-install}" version="${INPUT_Version}" export BATCH=1 PORT_PATH=$(whereis -sq "$name") if [ -z "$PORT_PATH" ] then echo "ErrorMessage=Could not install $name, port does not exist" exit 0 fi cd "$PORT_PATH" if [ -n "$version" ] then available=$(make -V PKGVERSION) if [ "$available" != "$version" ] then echo "ErrorMessage=Could not install $name $version, available version was $available" exit 0 fi fi make deinstall reinstall >&2 } update_ports_tree() { portsnap --interactive fetch update >&2 } list_updates_local() { # Example pkg output: # ca_root_nss-3.19.3 < needs updating (index has 3.20) # # After sed: # Name=ca_root_nss # Version=3.20 # Architecture=none pkg version -v -l "<" | sed -e 's/\([^ ]*\)-[^-]* .* \(.*\))/Name=\1\ Version=\2\ Architecture=none/' } remove() { name="${INPUT_Name?Name must be given to remove}" export BATCH=1 PORT_PATH=$(whereis -sq "$name") if [ -z "$PORT_PATH" ] then echo "ErrorMessage=Could not remove $name, port does not exist" exit 0 fi cd "$PORT_PATH" make deinstall >&2 } case $command in supports-api-version) echo 1 ;; get-package-data) get_package_data ;; list-installed) list_installed ;; repo-install) repo_install ;; list-updates) update_ports_tree list_updates_local ;; list-updates-local) list_updates_local ;; remove) remove ;; *) echo "ErrorMessage=Invalid operation" esac