Index: head/ports-mgmt/pkg-rmleaf/Makefile =================================================================== --- head/ports-mgmt/pkg-rmleaf/Makefile (revision 470415) +++ head/ports-mgmt/pkg-rmleaf/Makefile (revision 470416) @@ -1,28 +1,28 @@ # Created by: Yanhui Shen # $FreeBSD$ PORTNAME= pkg-rmleaf -PORTVERSION= 0.3 +PORTVERSION= 0.4 CATEGORIES= ports-mgmt MASTER_SITES= # none DISTFILES= # none MAINTAINER= shen.elf@gmail.com COMMENT= Remove leaf packages LICENSE= BSD2CLAUSE NO_BUILD= yes WRKSRC= ${WRKDIR} PLIST_FILES= sbin/pkg-rmleaf do-extract: ${MKDIR} ${WRKSRC} ${CP} ${FILESDIR}/pkg-rmleaf ${WRKSRC} do-install: ${INSTALL_SCRIPT} ${WRKSRC}/pkg-rmleaf \ ${STAGEDIR}${PREFIX}/sbin/pkg-rmleaf .include Index: head/ports-mgmt/pkg-rmleaf/files/pkg-rmleaf =================================================================== --- head/ports-mgmt/pkg-rmleaf/files/pkg-rmleaf (revision 470415) +++ head/ports-mgmt/pkg-rmleaf/files/pkg-rmleaf (revision 470416) @@ -1,90 +1,87 @@ #!/bin/sh -# version 0.3 +# Version: 0.4 -# Copyright (c) 2014 Yanhui Shen, shen.elf@gmail.c0m +# Copyright (c) 2013-2018 Yanhui Shen # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. cols=$((`stty size | cut -w -f2` - 6)) rows=$((`stty size | cut -w -f1` - 4)) height=$(($rows - 7)) -sep="#" -PkgQuery="pkg query -e \"%#r=0\" \"%o$sep%c\" | sort" +PkgQuery="pkg query -e \"%#r=0\" \"%o %n-%v %c\" | sort -k 1" PkgDelete="pkg delete -y" FmtDialog="dialog --checklist \"Leaf Packages: %s\" $rows $cols $height %s" -KeptLeaves="" +KnownLeaves="" while true; do #==== refresh leaves ==== echo "Querying..." AllLeaves=`eval $PkgQuery` NewLeaves="" nNewLeaves="0" #IFS=$'\n' # see http://svnweb.freebsd.org/base?view=revision&revision=221513 # for compatibility, use the following trick instead IFS=" " for line in $AllLeaves; do - case $line in - (*"$sep"*) - port=${line%%"$sep"*} - desc=${line#*"$sep"} - ;; - (*) - echo "Bad line: " $line - exit - ;; - esac + origin=`echo "$line" | cut -d' ' -f 1` + category=`echo "$origin" | cut -d'/' -f 1` + name=`echo "$line" | cut -d' ' -f 2` + desc=`echo "$line" | cut -d' ' -f 3-` + port="$category:$name" - ret=`echo "$KeptLeaves" | grep "$port"` + ret=`echo "$KnownLeaves" | grep "$name"` if [ -z "$ret" ]; then - NewLeaves="$NewLeaves $port \"$desc\" off" + NewLeaves="$NewLeaves \"$port\" \"$desc\" off" nNewLeaves=$(($nNewLeaves + 1)) fi done #==== show dialog ==== if [ -z "$NewLeaves" ]; then - echo "Nothing to do!" + echo "No more new leaves." exit fi cmd=`printf $FmtDialog "$nNewLeaves" "$NewLeaves"` - selections=`eval "$cmd 3>&2 2>&1 1>&3"` + selected=`eval "$cmd 3>&2 2>&1 1>&3"` if [ $? -ne 0 ]; then echo "Canceled." exit fi - #==== record old leaves ==== - KeptLeaves="$AllLeaves" + #==== save current leaves ==== + KnownLeaves="$AllLeaves" - #==== deinstall selected ==== - if [ -z $selections ]; then - echo "No selection, quit." + #==== extract names ==== + names=`echo $selected | sed 's/[[:alnum:]_-]\{1,\}://g'` + if [ -z $names ]; then + echo "No packages." exit fi - eval "$PkgDelete $selections" + + #==== uninstall selected ==== + eval "$PkgDelete $names" done Index: head/ports-mgmt/pkg-rmleaf/pkg-descr =================================================================== --- head/ports-mgmt/pkg-rmleaf/pkg-descr (revision 470415) +++ head/ports-mgmt/pkg-rmleaf/pkg-descr (revision 470416) @@ -1 +1,3 @@ -A little script for removing leaf packages (requires pkgng). +A little script for removing leaf packages (requires pkg). + +WWW: https://github.com/bsdelf/pkg-rmleaf