diff options
author | Kurt Jaeger <pi@FreeBSD.org> | 2014-11-07 22:53:13 +0000 |
---|---|---|
committer | Kurt Jaeger <pi@FreeBSD.org> | 2014-11-07 22:53:13 +0000 |
commit | 006d036ae6a580691a579393dfdba012500a1780 (patch) | |
tree | eafdacb4783778fd03ec3e6dd619ae25b8407fb0 /sysutils | |
parent | 9175b4fdbf30e86e7ec46d65d6da99eddbcf89ee (diff) | |
download | ports-006d036ae6a580691a579393dfdba012500a1780.tar.gz ports-006d036ae6a580691a579393dfdba012500a1780.zip |
Notes
Diffstat (limited to 'sysutils')
-rw-r--r-- | sysutils/bsdadminscripts/Makefile | 6 | ||||
-rw-r--r-- | sysutils/bsdadminscripts/files/distviper.in | 227 | ||||
-rw-r--r-- | sysutils/bsdadminscripts/pkg-plist | 2 |
3 files changed, 230 insertions, 5 deletions
diff --git a/sysutils/bsdadminscripts/Makefile b/sysutils/bsdadminscripts/Makefile index 87936eceb3af..714d3db108ae 100644 --- a/sysutils/bsdadminscripts/Makefile +++ b/sysutils/bsdadminscripts/Makefile @@ -3,7 +3,7 @@ PORTNAME= bsdadminscripts PORTVERSION= 6.1.1 -PORTREVISION= 7 +PORTREVISION= 8 CATEGORIES= sysutils ports-mgmt MASTER_SITES= SF/${PORTNAME}/${PORTNAME} @@ -21,7 +21,7 @@ PORTDOCS= ABOUT CHANGES INSTALL NOTES THANKS OPTIONS_DEFINE= DOCS -SUB_FILES= pkg_libchk pkg_upgrade uma +SUB_FILES= distviper pkg_libchk pkg_upgrade uma SUB_LIST= TMP=${TMP} PREFIX=${PREFIX} VAR=${VAR} PORTS=${PORTSDIR} .include <bsd.port.options.mk> @@ -37,7 +37,7 @@ do-install: -distdir=${STAGEDIR}${DISTDIR} \ -datadir=${STAGEDIR}${DATADIR} \ ${EVALDOCS} -.for n in pkg_libchk pkg_upgrade uma +.for n in distviper pkg_libchk pkg_upgrade uma ${MV} ${WRKDIR}/${n} ${WRKSRC}/src ${INSTALL_SCRIPT} ${WRKSRC}/src/${n} ${STAGEDIR}${PREFIX}/sbin .endfor diff --git a/sysutils/bsdadminscripts/files/distviper.in b/sysutils/bsdadminscripts/files/distviper.in new file mode 100644 index 000000000000..e047e46b67de --- /dev/null +++ b/sysutils/bsdadminscripts/files/distviper.in @@ -0,0 +1,227 @@ +#!/bin/sh +# +# Copyright (c) 2009 +# Dominic Fandrey <kamikaze@bsdforen.de> +# +# 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. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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. +# + +readonly name=distviper +readonly version=1.1 + +verbose= +demo= +quiet= +interactive= + +# Determine portsdir +portsdir="$(make -V PORTSDIR -f /usr/share/mk/bsd.port.mk)" +if [ ! -d "$portsdir" ]; then + echo "The PORTSDIR '$portsdir' is missing." + exit 1 +fi + +# Determine distdir +distdir="$(make -V DISTDIR -f /usr/share/mk/bsd.port.mk)" +if [ ! -d "$distdir" ]; then + echo "The DISTDIR '$distdir' is missing." + exit 2 +fi + +# Extract file from distinfo. +extractFileCmd="sed -E -e 's/^[^(]*\(//1' -e 's/\).*$//1'" + +# Display help. +printHelp() { + echo "$name v$version +usage: $name [-d] [-h] [-i] [-q] [-v] [fast|thorough]" +} + +# +# Handle parameters. +# +# @param $1 +# The parameter to handle. +# @param $verbose +# Is set to create verbose output. +# @param $demo +# Is set to only print the output that would occur. +# @param $quiet +# Is set to act without creating any output. +# @return +# Returns 0 if the processed parameter was a valid parameter, +# returns 1 if not. +# +readParams() { + case "$1" in + "-d" | "--demo") + demo=1 + return 0 + ;; + "-h" | "--help") + printHelp + exit 0 + ;; + "-i" | "--interactive") + interactive=-i + return 0 + ;; + "-q" | "--quiet") + quiet=1 + return 0 + ;; + "-v" | "--verbose") + verbose=1 + return 0 + ;; + -? | --*) + return 1 + ;; + -*) + # Split parameters. + # first parameter + readParams "${1%${1#-?}}" || return $? + # remaining parameters + readParams "-${1#-?}" + return $? + ;; + *) + return 1 + ;; + esac +} + +# +# This algorithm outputs the distfiles of installed ports. If a port downloads +# a distfile through depending on the fetch target of another port, it +# is missed, in case that other port is not installed as well. +# +# @param $portsdir +# The direcotry holding the ports tree. +# +getDistFiles_fast() { + for port in $(pkg_info -qoa); { + if [ -e "$portsdir/$port/distinfo" ]; then + eval "$extractFileCmd '$portsdir/$port/distinfo'" | uniq + fi + } +} + +# +# This algorithm outputs the distfiles of all ports. +# +# @param $portsdir +# The direcotry holding the ports tree. +# +getDistFiles_thorough() { + find -H "$portsdir" -type f -name distinfo | \ + eval "xargs $extractFileCmd" | uniq +} + +# The current parameter processing stage. +stage=params + +# The selected algorithm for finding distfiles to keep. +algorithm=thorough + +# Parse the command line parameters. +for command; { + # Read parameters until an unknown one is encountered. + # In that case switch into command stage. + if [ "$stage" = "params" ]; then + if ! readParams "$command"; then + stage=command + fi + fi + + # All parameters have been read, now either nothing or a mode + # command should occur. + if [ "$stage" = "command" ]; then + stage=end + case "$command" in + thorough | fast) + algorithm="$command" + ;; + -*) + echo "$name: Unknown parameter '$command'" \ + "encountered, exiting." 1>&2 + return 1 + ;; + *) + echo "$name: Unknown command '$command'" \ + "encountered, exiting." 1>&2 + return 2 + ;; + esac + # Skip everything following and continue with the next + # argument. + continue + fi + + # Still being in the loop at this stage means unexpected parameters + # have been encountered. + if [ "$stage" = "end" ]; then + echo "$name: The command '$command' is not allowed here, only" \ + "one command at a time is permitted." 1>&2 + return 3 + fi +} + +# Check for inprobable options. +if [ -n "$interactive" -a -n "$demo" ]; then + echo "$name: Interactive mode is ignored in demo mode." 1>&2 +fi + +test -n "$verbose" && echo "Create a list of up to date distfiles to keep" \ + "using a $algorithm algorithm:" + +# Create the list of files to keep, using the selected algorithm. +keepFiles="$(eval "getDistFiles_$algorithm" | sort -u)" +if [ -n "$verbose" ]; then + echo "$(($(echo "$keepFiles" | wc -l))) files recorded for keeping." + echo "Search and delete outdated distfiles:" +fi + +# Files before deletion. +filesCount="$(($(find -H "$distdir" -type f|wc -l)))" +filesDelete=0 + +# Seek and destroy files not in the $keepFiles list. +for file in $(find -H "$distdir" -type f); { + file="${file#$distdir/}" + + if (echo "$keepFiles" | grep -qx "$file"); then + test -n "$verbose" && echo "keep $file" + else + test -z "$quiet" && echo "delete $file" + test -z "$demo" && rm $interactive "$distdir/$file" + filesDelete=$(($filesDelete + 1)) + fi +} + +# The number of deleted files +filesDeleted="$(($filesCount - $(find -H "$distdir" -type f|wc -l)))" + +test -z "$demo" && find -H -d "$distdir" -type d -exec rmdir \{} \; 2> /dev/null + +if [ -n "$verbose" ]; then + echo "$filesDelete files were suggested for deletion." + echo "$filesDeleted files of $filesCount have been removed." +fi + +return 0 diff --git a/sysutils/bsdadminscripts/pkg-plist b/sysutils/bsdadminscripts/pkg-plist index e4e26fa027db..4bf4787dc387 100644 --- a/sysutils/bsdadminscripts/pkg-plist +++ b/sysutils/bsdadminscripts/pkg-plist @@ -33,5 +33,3 @@ man/man1/uma.1.gz %%ETCDIR%%/uma.conf.sample %%DATADIR%%/buildflags.awk %%DATADIR%%/buildflags.mk -@dirrm share/bsdadminscripts -@dirrmtry %%ETCDIR%% |