summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorespie <espie@openbsd.org>2003-12-09 19:22:36 +0000
committerespie <espie@openbsd.org>2003-12-09 19:22:36 +0000
commit77cb7cbff9932e44662fc6afdb121242a90cdae6 (patch)
tree25629e04447eb2eea159eab5e77bb8ab08e7bceb
parentsync (diff)
downloadwireguard-openbsd-77cb7cbff9932e44662fc6afdb121242a90cdae6.tar.xz
wireguard-openbsd-77cb7cbff9932e44662fc6afdb121242a90cdae6.zip
better management of list of installed packages. Allow pkg_add/delete -n
to proceed correctly in case of dependencies.
-rw-r--r--usr.sbin/pkg_add/OpenBSD/PackageInfo.pm43
-rw-r--r--usr.sbin/pkg_add/pkg_delete3
2 files changed, 29 insertions, 17 deletions
diff --git a/usr.sbin/pkg_add/OpenBSD/PackageInfo.pm b/usr.sbin/pkg_add/OpenBSD/PackageInfo.pm
index 1d0f86badd3..ed3f1a52a1c 100644
--- a/usr.sbin/pkg_add/OpenBSD/PackageInfo.pm
+++ b/usr.sbin/pkg_add/OpenBSD/PackageInfo.pm
@@ -1,4 +1,4 @@
-# $OpenBSD: PackageInfo.pm,v 1.3 2003/11/06 18:16:25 espie Exp $
+# $OpenBSD: PackageInfo.pm,v 1.4 2003/12/09 19:22:36 espie Exp $
#
# Copyright (c) 2003 Marc Espie.
#
@@ -28,7 +28,7 @@ use warnings;
package OpenBSD::PackageInfo;
our @ISA=qw(Exporter);
our @EXPORT=qw(installed_packages installed_info installed_name info_names is_info_name
- add_installed is_installed borked_package CONTENTS COMMENT DESC INSTALL DEINSTALL REQUIRE
+ add_installed delete_installed is_installed borked_package CONTENTS COMMENT DESC INSTALL DEINSTALL REQUIRE
REQUIRED_BY DISPLAY MTREE_DIRS);
use OpenBSD::PackageName;
@@ -45,8 +45,7 @@ use constant {
my $pkg_db = $ENV{"PKG_DBDIR"} || '/var/db/pkg';
-our @list;
-my $read_list;
+our $list;
our @info = (CONTENTS, COMMENT, DESC, INSTALL, DEINSTALL, REQUIRE, REQUIRED_BY, DISPLAY, MTREE_DIRS);
@@ -59,31 +58,43 @@ for my $i (@info) {
sub add_installed
{
- if (!$read_list) {
+ if (!defined $list) {
installed_packages();
}
- push(@list, @_);
+ for my $p (@_) {
+ $list->{$p} = 1;
+ }
+}
+
+sub delete_installed
+{
+ if (!defined $list) {
+ installed_packages();
+ }
+ for my $p (@_) {
+ undef $list->{$p};
+
+ }
}
sub installed_packages()
{
- if (!$read_list) {
- @list = ();
- $read_list = 1;
+ if (!defined $list) {
+ $list = {};
opendir(my $dir, $pkg_db) or die "Bad pkg_db";
while (my $e = readdir($dir)) {
next if $e eq '.' or $e eq '..';
next unless -d "$pkg_db/$e";
if (-f "$pkg_db/$e/+CONTENTS") {
- add_installed($e);
+ $list->{$e} = 1;
} else {
print "Warning: $e is not really a package";
}
}
close($dir);
}
- return @list;
+ return keys %$list;
}
sub installed_info($)
@@ -109,11 +120,11 @@ sub borked_package()
sub is_installed($)
{
- my $name = shift;
- my $dir = installed_info($name);
- return unless -d $dir;
- return unless -f $dir.CONTENTS;
- return $dir;
+ my $name = installed_name(shift);
+ if (!defined $list) {
+ installed_packages();
+ }
+ return defined $list->{$name};
}
sub installed_name($)
diff --git a/usr.sbin/pkg_add/pkg_delete b/usr.sbin/pkg_add/pkg_delete
index 6b37c71b638..35ddcc6c324 100644
--- a/usr.sbin/pkg_add/pkg_delete
+++ b/usr.sbin/pkg_add/pkg_delete
@@ -1,6 +1,6 @@
#!/usr/bin/perl
# ex:ts=8 sw=4:
-# $OpenBSD: pkg_delete,v 1.12 2003/11/09 15:42:48 espie Exp $
+# $OpenBSD: pkg_delete,v 1.13 2003/12/09 19:22:36 espie Exp $
#
# Copyright (c) 2003 Marc Espie.
#
@@ -383,6 +383,7 @@ if ($bad) {
print "Deleting $pkgname\n";
$state->{pkgname_tolog} = $pkgname;
delete_package($pkgname, $state);
+ delete_installed($pkgname);
$done{$pkgname} = 1;
$removed++;
}