From owner-ports-jp@jp.freebsd.org  Sun Apr 22 11:17:52 2001
Received: (from daemon@localhost)
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) id LAA99818;
	Sun, 22 Apr 2001 11:17:52 +0900 (JST)
	(envelope-from owner-ports-jp@jp.FreeBSD.org)
Received: from hm3.aitai.ne.jp (hm3.aitai.ne.jp [211.1.192.70])
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) with ESMTP id LAA99813
	for <ports-jp@jp.freebsd.org>; Sun, 22 Apr 2001 11:17:51 +0900 (JST)
	(envelope-from sada@bsdclub.org)
Received: from chiasmatica.my.domain.sada.bsdclub.org ([172.26.25.55])
	by hm3.aitai.ne.jp (8.9.3/3.7W) with ESMTP id LAA03271
	for <ports-jp@jp.freebsd.org>; Sun, 22 Apr 2001 11:17:50 +0900 (JST)
To: ports-jp@jp.freebsd.org
References: <200104211700.f3LH08952443@freefall.freebsd.org>
 <86lmotrbzm.fsf@xa12.heimat.gr.jp>
MIME-Version: 1.0 (generated by SEMI 1.13.7 - "Awazu")
Content-Type: text/plain; charset=ISO-2022-JP
From: SADA Kenji <sada@bsdclub.org>
Date: 22 Apr 2001 11:17:49 +0900
In-Reply-To: <86lmotrbzm.fsf@xa12.heimat.gr.jp>
 (NAKAJI Hiroyuki's message of "22 Apr 2001 09:53:33 +0900")
Message-ID: <87r8yl8ype.fsf@chiasmatica.my.domain>
Lines: 59
User-Agent: T-gnus/6.14.5 (based on Gnus v5.8.7) (revision 06) SEMI/1.13.7 (Awazu) FLIM/1.13.2 (Kasanui) MULE XEmacs/21.1 (patch 12) (Channel Islands) (i386--freebsd)
Reply-To: ports-jp@jp.freebsd.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+010328
X-Sequence: ports-jp 10971
Subject: [ports-jp 10971] Re: FreeBSD ports: 1 unfetchable distfiles: sysutils/pkg_remove
Errors-To: owner-ports-jp@jp.freebsd.org
Sender: owner-ports-jp@jp.freebsd.org
X-Originator: sada@chiasmatica.my.domain

$B:4ED$G$9!#(B
$B0zMQ=g=xJQ$($^$9!#(B

NAKAJI Hiroyuki <nakaji@tutrp.tut.ac.jp> writes:

> $BCf<#$G$9!#(B

> o pkg_remove $B$N5!G=$O!":G6a$N(B pkg_* $B%3%^%s%I$K<BAu$5$l$?(B(?)$B$N$G!"$b$O(B
>   $B$dB8:_0U5A$O$J$/!">C$7$F$7$^$C$F$bNI$$(B

pkg_delete $B$K$O0MB8(B package $B$^$G:o=|$9$k5!G=$O$J$$$_$?$$$G$9!#(B

> pkg_remove $B$N(B MASTER_SITES $B$G$"$k(B
> http://www.rr.iij4u.or.jp/~sada/scripts/
> $B$,$J$/$J$C$F$7$^$C$?$N$G$9$,!"$I$N$h$&$KBP=h$9$k$N$,E,Ev$G$7$g$&$+(B?

$ wc pkg_remove
      34     122     891 pkg_remove

$B$J$s$G!"(Bdevel/portlint $B$_$?$/(B skeleton $B$KF~$l$F$7$^$C$F$O$I$&$G$7$g$&$+!#(B
$B$A$J$_$K;d$,:#;H$C$F$$$k$N$O!"(B
$B$A$g$C$HJQ99$5$l$F$$$k$H;W$&$N$G$9$,!"(B
$B$3$s$J$N$G$9!#(B

--
#!/usr/bin/perl
# $Id: pkg_remove,v 1.3 1999/11/06 15:47:49 sada Exp $
use Getopt::Std;
getopts('n');
die("usage: x [-n] ALL | <package-name> [, <package-name> [..]]\n -n : only tell what will take place.\n") if (@ARGV < 1);
$pkg_dbdir = "/var/db/pkg";
opendir(PKG_DBDIR, $pkg_dbdir);
while ($pkg = readdir(PKG_DBDIR)) {
	next if $pkg =~ m/^\./;
	$req_by{$pkg} = '';
	if (-f "$pkg_dbdir/$pkg/+REQUIRED_BY") {
		open(REQ_B, "$pkg_dbdir/$pkg/+REQUIRED_BY");
		$req_by{$pkg} = join('', <REQ_B>);
	}
}
while ($a = shift) {
	while (($key, $val) = each(%req_by)) {
		if ($a eq 'ALL' || $key =~ m/$a/) {
			&remove_package($key);
		}
	}
}

sub remove_package
{
	my ($pkg) = @_;
	return if ($pkg_removed{$pkg});
	my @r = split(/\n/, $req_by{$pkg});
	my $p;
	&remove_package($p) while $p = shift(@r);
	print "remove: $pkg\n";
	system "pkg_delete $pkg" unless ($opt_n);
	$pkg_removed{$pkg} = 'YES';
}
