From owner-ports-jp@jp.freebsd.org  Mon Sep 13 23:03:39 1999
Received: (from daemon@localhost)
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) id XAA47192;
	Mon, 13 Sep 1999 23:03:39 +0900 (JST)
	(envelope-from owner-ports-jp@jp.FreeBSD.org)
Received: from rr.iij4u.or.jp (h004.p060.iij4u.or.jp [210.130.60.4])
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) with SMTP id XAA47182
	for <ports-jp@jp.freebsd.org>; Mon, 13 Sep 1999 23:03:38 +0900 (JST)
	(envelope-from sada@rr.iij4u.or.jp)
Received: (qmail 2790 invoked by uid 1000); 13 Sep 1999 23:03:35 +0900
Date: 13 Sep 1999 23:03:35 +0900
Message-ID: <19990913140335.2789.sada@rr.iij4u.or.jp>
To: ports-jp@jp.freebsd.org
From: sada@rr.IIJ4U.OR.JP (SADA Kenji)
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-2022-JP
X-Mailer: mnews [version 1.21] 1997-12/23(Tue)
Reply-To: ports-jp@jp.freebsd.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+990727
X-Sequence: ports-jp 7584
Subject: [ports-jp 7584] Script: pkg_remove
Errors-To: owner-ports-jp@jp.freebsd.org
Sender: owner-ports-jp@jp.freebsd.org
X-Originator: sada@rr.IIJ4U.OR.JP

$B%9%/%j%W%H$N$*;~4V$G$9!#(B

NAME:
	pkg_remove - $B;XDj$5$l$?(B package $B$H!"$=$l$K0MB8$9$k(B package $B$r(B
		$B0l3g:o=|(B

DESCRIPTION:
	$B0MB84X78$r8+$F!";XDj$N(B package $B$*$h$S$=$l$K0MB8$7$F$$$k(B
	$BA4It$N(B packages $B$r!"BEEv$J=gHV$G:o=|$7$^$9!#(B
	package $B$NL>A0$O@hF,$+$i$NItJ,$H0lCW$9$l$PBP>]$K$J$j$^$9!#(B

OPTION:
	-n	$B<B:]$K$O:o=|$7$J$$$G!"2?$,$I$N=gHV$G:o=|$5$l$k$3$H$K(B
		$B$J$k$N$+3NG'$7$^$9!#(B

EXAMPLE:
	% pkg_remove netscape
		netscape $B%V%i%&%6$N(B package $B$r:o=|$7$^$9!#(B
		ja-netscape $B$J$I$,(B pkg_add $B$5$l$F$$$l$P$^$:$=$A$i$+$i(B
		$B:o=|$7$^$9!#(B
	% pkg_remove xemacs
		xemacs $B4XO"$N(B packages $B$r:o=|$7$^$9!#(B
	% pkg_remove tiff
		tiff $B%i%$%V%i%j$H$=$l$rMxMQ$7$F$$$k(B packages $B$r(B
		$B:o=|$7$^$9!#(B
	% pkg_remove gtk
		gtk $B4XO"$N(B packages $B$r:o=|$7$^$9!#(B
	% pkg_remove ja-
		$BF|K\8l4XO"$N(B packages $B$r:o=|$7$^$9!#(B
	% pkg_remove ALL
		packages $B$r$9$Y$F:o=|$7$^$9!#(B

WISH:
	* ports/packages $B%D%j!<$HHf$Y$F!"%$%s%9%H!<%k:Q$_$N$b$N$N(B
	$B%P!<%8%g%s$,8E$1$l$PBP>]$K$9$k%*%W%7%g%s!#(B

	* $B$5$i$K!"?7$7$$$b$N$r>!<j$KF~$lD>$9!#(B

	* GUI $B$rIU$1$F!"0J>e$NF0:n$rA*BrE*$K<B9T2DG=$K$9$k!#(B

	* C $B$G=q$-D>$7$F(B pkg_delete $B$H%^!<%8$9$k!#(B

SCRIPT:

#!/usr/bin/perl
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} = <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';
}
