NetBSD Problem Report #30893
From lukem@mewburn.net Tue Aug 2 11:43:25 2005
Return-Path: <lukem@mewburn.net>
Received: from home.mewburn.net (home.mewburn.net [150.101.166.131])
by narn.netbsd.org (Postfix) with ESMTP id CC93663B400
for <gnats-bugs@gnats.NetBSD.org>; Tue, 2 Aug 2005 11:43:24 +0000 (UTC)
Message-Id: <20050802114318.34B842BDE2@home.mewburn.net>
Date: Tue, 2 Aug 2005 21:43:18 +1000 (EST)
From: lukem@NetBSD.org
Reply-To: lukem@NetBSD.org
To: gnats-bugs@netbsd.org
Subject: pkg_chk tag support needs work
X-Send-Pr-Version: 3.95
>Number: 30893
>Category: pkg
>Synopsis: pkg_chk tag support needs work
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: abs
>State: closed
>Class: change-request
>Submitter-Id: net
>Arrival-Date: Tue Aug 02 11:44:00 +0000 2005
>Closed-Date: Mon Apr 21 21:32:22 +0000 2014
>Last-Modified: Mon Apr 21 21:35:00 +0000 2014
>Originator: Luke Mewburn
>Release: NetBSD 3.0_BETA
>Organization:
>Environment:
>Description:
pkg_chk supports the ability to add and remove tags to the
current machine's set [of tags] to control how entries
will be matched from pkgchk.conf.
There's two problems with this.
1. The tag "*" is documented to match any tag.
However, invoking
pkg_chk -D '*' ...
or
env PKGCHK_TAGS='*' pkgchk ...
doesn't work due to the `*' being expanded by shell globbing.
I have a patch to resolve this, converting pkg_chk to using
getopts(1) instead of getopt(1).
2. Even when the tag parsing is fixed, the matching algorithm
won't treat a `*' in the current machine's set as acting as
"match every entry in pkgchk.conf".
It seems that "*" is only supported as a tag on a filename
within pkgchk.conf, which seems rather useless, since you
can emulate "match all tags" by commenting out _all_ the
tags in an entry (i.e, no tags == "all systems).
The behaviour I think it should be is that providing '*'
via -D or PKGCHK_TAGS says "match all entries in pkgchk.conf"
>How-To-Repeat:
Setup pkgchk.conf with some entries containing tags
that don't match the current machine.
Invoke
pkgchk -D '*' -cv
and notice that those entries won't be checked.
>Fix:
This patch fixes the first problem.
The program's tag matching logic needs work to fix the second.
Index: files/pkg_chk.sh
===================================================================
RCS file: /cvsroot/pkgsrc/pkgtools/pkg_chk/files/pkg_chk.sh,v
retrieving revision 1.16
diff -p -p -u -r1.16 pkg_chk.sh
--- files/pkg_chk.sh 1 Jun 2005 14:14:47 -0000 1.16
+++ files/pkg_chk.sh 2 Aug 2005 09:58:19 -0000
@@ -516,38 +516,32 @@ verbose()
fi
}
-args=$(getopt BC:D:L:P:U:abcfghiklNnrsuv $*)
-if [ $? != 0 ]; then
- opt_h=1
-fi
-set -- $args
-while [ $# != 0 ]; do
- case "$1" in
- -a ) opt_a=1 ; opt_c=1 ;;
- -B ) opt_B=1 ; opt_i=1 ;;
- -b ) opt_b=1 ;;
- -C ) opt_C="$2" ; shift;;
- -c ) opt_c=1 ;;
- -D ) opt_D="$2" ; shift;;
- -f ) opt_f=1 ;;
- -g ) opt_g=1 ;;
- -h ) opt_h=1 ;;
- -i ) opt_i=1 ;;
- -k ) opt_k=1 ;;
- -L ) opt_L="$2" ; shift;;
- -l ) opt_l=1 ;;
- -N ) opt_N=1 ;;
- -n ) opt_n=1 ;;
- -P ) opt_P="$2" ; shift;;
- -r ) opt_r=1 ; opt_i=1 ;;
- -s ) opt_s=1 ;;
- -U ) opt_U="$2" ; shift;;
- -u ) opt_u=1 ; opt_i=1 ;;
- -v ) opt_v=1 ;;
- -- ) shift; break ;;
+while getopts BC:D:L:P:U:abcfghiklNnrsuv ch; do
+ case "$ch" in
+ a ) opt_a=1 ; opt_c=1 ;;
+ B ) opt_B=1 ; opt_i=1 ;;
+ b ) opt_b=1 ;;
+ C ) opt_C="$OPTARG" ;;
+ c ) opt_c=1 ;;
+ D ) opt_D="$OPTARG" ;;
+ f ) opt_f=1 ;;
+ g ) opt_g=1 ;;
+ h | \?) opt_h=1 ;;
+ i ) opt_i=1 ;;
+ k ) opt_k=1 ;;
+ L ) opt_L="$OPTARG" ;;
+ l ) opt_l=1 ;;
+ N ) opt_N=1 ;;
+ n ) opt_n=1 ;;
+ P ) opt_P="$OPTARG" ;;
+ r ) opt_r=1 ; opt_i=1 ;;
+ s ) opt_s=1 ;;
+ U ) opt_U="$OPTARG" ;;
+ u ) opt_u=1 ; opt_i=1 ;;
+ v ) opt_v=1 ;;
esac
- shift
done
+shift $(($OPTIND - 1))
if [ -z "$opt_b" -a -z "$opt_s" ];then
opt_b=1; opt_s=1;
>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: pkg-manager->abs
Responsible-Changed-By: recht@netbsd.org
Responsible-Changed-When: Thu, 04 Aug 2005 19:59:16 +0000
Responsible-Changed-Why:
over to maintainer
State-Changed-From-To: open->closed
State-Changed-By: abs@NetBSD.org
State-Changed-When: Mon, 21 Apr 2014 21:32:22 +0000
State-Changed-Why:
update pkg_chk from 2.0.6 to 2.0.7, based on suggestions from PR 30893
- switch from getopt to getopts. The issue described in PR 30893 ('*' being
expanded by shell globbing) had already been worked around, but getopts
is just a nicer interface
- Extend tag parsing to support -D '*' to cause all package lines to be matched
From: "David Brownlee" <abs@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/30893 CVS commit: pkgsrc/pkgtools/pkg_chk
Date: Mon, 21 Apr 2014 21:32:26 +0000
Module Name: pkgsrc
Committed By: abs
Date: Mon Apr 21 21:32:26 UTC 2014
Modified Files:
pkgsrc/pkgtools/pkg_chk: Makefile
pkgsrc/pkgtools/pkg_chk/files: pkg_chk.8 pkg_chk.sh
Log Message:
Updated pkgtools/pkg_chk to 2.0.7
update pkg_chk from 2.0.6 to 2.0.7, based on suggestions from PR 30893
- switch from getopt to getopts. The issue described in PR 30893 ('*' being
expanded by shell globbing) had already been worked around, but getopts
is just a nicer interface
- Extend tag parsing to support -D '*' to cause all package lines to be matched
To generate a diff of this commit:
cvs rdiff -u -r1.83 -r1.84 pkgsrc/pkgtools/pkg_chk/Makefile
cvs rdiff -u -r1.29 -r1.30 pkgsrc/pkgtools/pkg_chk/files/pkg_chk.8
cvs rdiff -u -r1.71 -r1.72 pkgsrc/pkgtools/pkg_chk/files/pkg_chk.sh
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
>Unformatted:
(Contact us)
$NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2007
The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.