From e72feae3690047899d8b9e61318dfc8c8cb286ab Mon Sep 17 00:00:00 2001 From: Matthias Schmidt Date: Thu, 3 Jan 2008 16:42:43 +0000 Subject: [PATCH] Major update to pkg_search(1) - Print verbose information about packages when operating with the pkg_summary(5) file - pkg_search displayed an incorrect field instead of the URL field. - Don't download a pkg_summary(5) file if an INDEX file is available - Honor -k when searching with -v (index file only) - style(9) changes - Enhanced the man page, add some comments and change my email address. - We're on DragonFly so remove the check for DragonFly. --- usr.bin/pkg_search/pkg_search.1 | 18 +++- usr.bin/pkg_search/pkg_search.sh | 201 +++++++++++++++++++++++++-------------- 2 files changed, 145 insertions(+), 74 deletions(-) diff --git a/usr.bin/pkg_search/pkg_search.1 b/usr.bin/pkg_search/pkg_search.1 index cceba69054..be4d053eb6 100644 --- a/usr.bin/pkg_search/pkg_search.1 +++ b/usr.bin/pkg_search/pkg_search.1 @@ -2,8 +2,7 @@ .\" Copyright (c) 2007 The DragonFly Project. All rights reserved. .\" .\" This code is derived from software contributed to The DragonFly Project -.\" by Matthias Schmidt , University of -.\" Marburg. +.\" by Matthias Schmidt , University of Marburg. .\" .\" All rights reserved. .\" @@ -31,9 +30,9 @@ .\" NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS .\" SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $DragonFly: src/usr.bin/pkg_search/pkg_search.1,v 1.5 2007/12/28 12:34:44 swildner Exp $ +.\" $DragonFly: src/usr.bin/pkg_search/pkg_search.1,v 1.6 2008/01/03 16:42:43 matthias Exp $ .\" -.Dd December 13, 2007 +.Dd January 03, 2008 .Dt PKG_SEARCH 1 .Os .Sh NAME @@ -49,6 +48,14 @@ queries the .Xr pkgsrc 7 index for a given .Ar package . +If the +.Xr pkgsrc 7 +index is not available +.Nm +fetches the +.Xr pkg_summary 5 +file. This file contains information about each package in a binary +repository. .Pp The options are as follows: .Bl -tag -width indent @@ -69,11 +76,12 @@ command: .Xr pkg_create 1 , .Xr pkg_delete 1 , .Xr pkg_info 1 , +.Xr pkg_summary 5 , .Xr pkgsrc 7 .Sh AUTHORS .Nm was written by -.An Matthias Schmidt Aq schmidtm@mathematik.uni-marburg.de . +.An Matthias Schmidt Aq matthias@dragonflybsd.org . .Sh HISTORY The .Nm diff --git a/usr.bin/pkg_search/pkg_search.sh b/usr.bin/pkg_search/pkg_search.sh index e9d30e5a56..1c9415b2bf 100644 --- a/usr.bin/pkg_search/pkg_search.sh +++ b/usr.bin/pkg_search/pkg_search.sh @@ -3,8 +3,7 @@ # Copyright (c) 2007 The DragonFly Project. All rights reserved. # # This code is derived from software contributed to The DragonFly Project -# by Matthias Schmidt , University of -# Marburg. +# by Matthias Schmidt , University of Marburg. # # All rights reserved. # @@ -32,88 +31,152 @@ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # -# $DragonFly: src/usr.bin/pkg_search/pkg_search.sh,v 1.4 2007/12/27 11:52:10 matthias Exp $ +# $DragonFly: src/usr.bin/pkg_search/pkg_search.sh,v 1.5 2008/01/03 16:42:43 matthias Exp $ UNAME=`uname -s` VERSION=`uname -r | cut -d '.' -f 1,2` -SIMPLE=0 +NO_INDEX=0 +PORTSDIR=/usr/pkgsrc +PKGSUM=${PORTSDIR}/pkg_summary +PKGSRCBOX1=http://pkgbox.dragonflybsd.org/packages/${UNAME}-${VERSION}/i386/ +PKGSRCBOX2=http://pkgbox.dragonflybsd.org/packages/DragonFly-1.10.1/i386/ +INDEXFILE=INDEX -if [ $UNAME = "DragonFly" ]; then - PORTSDIR=/usr/pkgsrc - PKGSUM=${PORTSDIR}/pkg_summary - PKGSRCBOX1=http://pkgbox.dragonflybsd.org/packages/${UNAME}-${VERSION}/i386/ - PKGSRCBOX2=http://pkgbox.dragonflybsd.org/packages/DragonFly-1.10.1/i386/ - INDEXFILE=INDEX - if [ ! -f ${PKGSUM} ]; then - echo "No pkgsrc(7) tree found. Fetching pkg_summary(5) file." - FETCHPATH=${PKGSRCBOX1}/All/pkg_summary.bz2 - mkdir -p ${PORTSDIR} +if [ ! -f ${PKGSUM} -a ! -e ${PORTSDIR}/${INDEXFILE} ]; then + echo "No pkgsrc(7) tree found. Fetching pkg_summary(5) file." + FETCHPATH=${PKGSRCBOX1}/All/pkg_summary.bz2 + mkdir -p ${PORTSDIR} + fetch -o ${PKGSUM}.bz2 ${FETCHPATH} + if [ $? -ne 0 ]; then + FETCHPATH=${PKGSRCBOX2}/All/pkg_summary.bz2 fetch -o ${PKGSUM}.bz2 ${FETCHPATH} - if [ $? -ne 0 ]; then - FETCHPATH=${PKGSRCBOX2}/All/pkg_summary.bz2 - fetch -o ${PKGSUM}.bz2 ${FETCHPATH} - fi - if [ $? -ne 0 ]; then - echo "Unable to fetch pkg_summary" - exit 1 - fi - bunzip2 < ${PKGSUM}.bz2 > ${PKGSUM} - rm -f ${PKGSUM}.bz2 - SIMPLE=1 fi - if [ -e ${PKGSUM} -a ! -e ${PORTSDIR}/${INDEXFILE} ]; then - SIMPLE=1 + if [ $? -ne 0 ]; then + echo "Unable to fetch pkg_summary(5) file." + exit 1 fi + bunzip2 < ${PKGSUM}.bz2 > ${PKGSUM} + rm -f ${PKGSUM}.bz2 + NO_INDEX=1 fi +if [ -e ${PKGSUM} -a ! -e ${PORTSDIR}/${INDEXFILE} ]; then + NO_INDEX=1 +fi + +# Perform simple search in pkg_summary +bin_simple_search() +{ + awk -F= -v name="$1" '{ + if ($1 == "PKGNAME") { + if ($2 ~ name) { + printf("%-20s\t", $2); + found = 1; + } + else found = 0; + } + if (found == 1 && $1 == "COMMENT") printf("%-25s\n", $2); + }' ${PKGSUM} +} + +# Perform extended search in pkg_summary +bin_ext_search() +{ + awk -F= -v name="$1" '{ + if ($1 == "PKGNAME") + if ($2 ~ name) { + printf("\nName\t: %-50s\n", $2); + found = 1; + } + else found = 0; + + if (found == 1 && $1 == "COMMENT") + printf("Desc\t: %-50s\n", $2); + if (found == 1 && $1 == "PKGPATH") + printf("Path\t: %-50s\n", $2); + if (found == 1 && $1 == "HOMEPAGE") + printf("URL\t: %-50s\n", $2); + }' ${PKGSUM} +} + +# Perform extended search in INDEX +index_v_search() +{ + if [ ${KFLAG} -eq 0 ]; then + awk -F\| -v name="$1" '{ + if ($1 ~ name) { + split($2, a, "/"); + printf("Name\t: %s-50\nDir\t: %-50s\nDesc\t: %-50s"\ + "\nURL\t: %-50s\nDeps\t: %s\n\n", $1, $2, + $4, $12, $9); + } + }' ${PORTSDIR}/${INDEXFILE} + else + awk -F\| -v name="$1" '{ + if ($1 ~ name || $4 ~ name || $12 ~ name) { + split($2, a, "/"); + printf("Name\t: %s-50\nDir\t: %-50s\nDesc\t: %-50s"\ + "\nURL\t: %-50s\nDeps\t: %s\n\n", $1, $2, + $4, $12, $9); + } + }' ${PORTSDIR}/${INDEXFILE} + fi +} + +# Perform simple search in INDEX +index_search() +{ + if [ ${KFLAG} -eq 0 ]; then + awk -F\| -v name="$1" '{ + if ($1 ~ name) { + split($2, a, "/"); + printf("%-20s\t%-25s\n", $1, $4); + } + }' ${PORTSDIR}/${INDEXFILE} + else + awk -F\| -v name="$1" '{ + if ($1 ~ name || $4 ~ name || $12 ~ name) { + split($2, a, "/"); + printf("%-20s\t%-25s\n", $1, $4); + } + }' ${PORTSDIR}/${INDEXFILE} + fi +} -if [ -z $1 ]; then +usage() +{ echo "usage: $0 [-k | -v] package" exit 1 -fi +} +args=`getopt kv $*` -case "$1" in - -k) - if [ ${SIMPLE} -eq 1 ]; then - grep "PKGNAME=$2" ${PKGSUM} | cut -d '=' -f 2 - exit 1 - fi - awk -F\| -v name="$2" \ - '{\ - if ($1 ~ name || $4 ~ name || $10 ~ name) { \ - split($2, a, "/"); \ - printf("%-20s\t%-25s\n", $1, $4); \ - } - }' ${PORTSDIR}/${INDEXFILE} +KFLAG=0 +VFLAG=0 - ;; +set -- $args +for i; do + case "$i" in + -k) + KFLAG=1; shift;; -v) - if [ ${SIMPLE} -eq 1 ]; then - grep "PKGNAME=$2" ${PKGSUM} | cut -d '=' -f 2 - exit 1 - fi - awk -F\| -v name="$2" \ - '{\ - if ($1 ~ name) { \ - split($2, a, "/"); \ - printf("Name\t: %s-50\nDir\t: %-50s\nDesc\t: %-50s\nURL\t: %-50s\nDeps\t: %s\n\n", $1, $2, $4, $10, $9); \ - } - }' ${PORTSDIR}/${INDEXFILE} - ;; - *) - if [ ${SIMPLE} -eq 1 ]; then - grep "PKGNAME=$1" ${PKGSUM} | cut -d '=' -f 2 - exit 1 - fi + VFLAG=1; shift;; + --) + shift; break;; + esac +done - awk -F\| -v name="$1" \ - '{\ - if ($1 ~ name) { \ - split($2, a, "/"); \ - printf("%-20s\t%-25s\n", $1, $4); \ - } - }' ${PORTSDIR}/${INDEXFILE} - ;; -esac +if [ -z ${1} ]; then + usage +fi + +if [ ${VFLAG} -eq 0 -a ${NO_INDEX} -eq 1 ]; then + bin_simple_search $1 +elif [ ${VFLAG} -eq 1 -a ${NO_INDEX} -eq 1 ]; then + bin_ext_search $1 +elif [ ${VFLAG} -eq 0 -a ${NO_INDEX} -eq 0 ]; then + index_search $1 +elif [ ${VFLAG} -eq 1 -a ${NO_INDEX} -eq 0 ]; then + index_v_search $1 +fi exit $? -- 2.11.4.GIT