summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorespie <espie@openbsd.org>2010-07-02 11:17:46 +0000
committerespie <espie@openbsd.org>2010-07-02 11:17:46 +0000
commit5732efc005e2de63ca094d4c961f2e6fd3cf4841 (patch)
tree84dfe283e24f5f53b4050584e8f3ae22201a1abc
parentRename the volume specific flags variable. (diff)
downloadwireguard-openbsd-5732efc005e2de63ca094d4c961f2e6fd3cf4841.tar.xz
wireguard-openbsd-5732efc005e2de63ca094d4c961f2e6fd3cf4841.zip
pass (and save) state around in Repository-related stuff.
-rw-r--r--usr.sbin/pkg_add/OpenBSD/PackageLocator.pm40
-rw-r--r--usr.sbin/pkg_add/OpenBSD/PackageRepository.pm56
-rw-r--r--usr.sbin/pkg_add/OpenBSD/PackageRepository/Installed.pm18
-rw-r--r--usr.sbin/pkg_add/OpenBSD/PackageRepositoryList.pm8
-rw-r--r--usr.sbin/pkg_add/OpenBSD/State.pm16
5 files changed, 69 insertions, 69 deletions
diff --git a/usr.sbin/pkg_add/OpenBSD/PackageLocator.pm b/usr.sbin/pkg_add/OpenBSD/PackageLocator.pm
index bab06074e02..09741f4bbea 100644
--- a/usr.sbin/pkg_add/OpenBSD/PackageLocator.pm
+++ b/usr.sbin/pkg_add/OpenBSD/PackageLocator.pm
@@ -1,5 +1,5 @@
# ex:ts=8 sw=4:
-# $OpenBSD: PackageLocator.pm,v 1.92 2010/06/30 10:51:04 espie Exp $
+# $OpenBSD: PackageLocator.pm,v 1.93 2010/07/02 11:17:46 espie Exp $
#
# Copyright (c) 2003-2010 Marc Espie <espie@openbsd.org>
#
@@ -28,71 +28,64 @@ my $default_path;
sub default_path
{
if (!defined $default_path) {
- $default_path = OpenBSD::PackageRepositoryList->new;
+ my $state = shift;
+ $default_path = OpenBSD::PackageRepositoryList->new($state);
if (defined $ENV{PKG_PATH}) {
my $v = $ENV{PKG_PATH};
$v =~ s/^\:+//o;
$v =~ s/\:+$//o;
- while (my $o = OpenBSD::PackageRepository->parse(\$v)) {
+ while (my $o = OpenBSD::PackageRepository->parse(\$v, $state)) {
$default_path->add($o);
}
} else {
- $default_path->add(OpenBSD::PackageRepository->new("./"));
+ $default_path->add(OpenBSD::PackageRepository->new("./", $state));
}
}
return $default_path;
}
-my $singleton;
-
-sub new
-{
- my ($class, $state) = @_;
- return $singleton //= bless { state => $state }, $class;
-}
-
sub path_parse
{
- my ($self, $pkgname, $path) = (@_, './');
+ my ($self, $pkgname, $path, $state) = (@_, './');
if ($pkgname =~ m/^(.*[\/\:])(.*)/) {
($pkgname, $path) = ($2, $1);
}
- return (OpenBSD::PackageRepository->new($path), $pkgname);
+ return (OpenBSD::PackageRepository->new($path, $state), $pkgname);
}
sub find
{
- my ($self, $_, $arch) = @_;
+ my ($self, $_, $arch, $state) = @_;
my $package;
if (m/[\/\:]/o) {
- my ($repository, $pkgname) = $self->path_parse($_);
+ my ($repository, $pkgname) = $self->path_parse($_, $state);
$package = $repository->find($pkgname, $arch);
if (defined $package) {
- $self->default_path->add($repository);
+ $self->default_path($state)->add($repository);
}
} else {
- $package = $self->default_path->find($_, $arch);
+ $package = $self->default_path($state)->find($_, $arch);
}
return $package;
}
sub grabPlist
{
- my ($self, $_, $arch, $code) = @_;
+ my ($self, $_, $arch, $code, $state) = @_;
my $plist;
if (m/[\/\:]/o) {
- my ($repository, $pkgname) = $self->path_parse($_);
+ my ($repository, $pkgname) = $self->path_parse($_, $state);
$plist = $repository->grabPlist($pkgname, $arch, $code);
if (defined $plist) {
- $self->default_path->add($repository);
+ $self->default_path($state)->add($repository);
}
} else {
- $plist = $self->default_path->grabPlist($_, $arch, $code);
+ $plist = $self->default_path($state)->grabPlist($_, $arch, $code);
}
return $plist;
}
@@ -100,7 +93,8 @@ sub grabPlist
sub match_locations
{
my ($self, @search) = @_;
- return $self->default_path->match_locations(@search);
+ my $state = pop @search;
+ return $self->default_path($state)->match_locations(@search);
}
1;
diff --git a/usr.sbin/pkg_add/OpenBSD/PackageRepository.pm b/usr.sbin/pkg_add/OpenBSD/PackageRepository.pm
index f731ad37da1..45a71f43e6f 100644
--- a/usr.sbin/pkg_add/OpenBSD/PackageRepository.pm
+++ b/usr.sbin/pkg_add/OpenBSD/PackageRepository.pm
@@ -1,5 +1,5 @@
# ex:ts=8 sw=4:
-# $OpenBSD: PackageRepository.pm,v 1.83 2010/06/30 10:51:04 espie Exp $
+# $OpenBSD: PackageRepository.pm,v 1.84 2010/07/02 11:17:46 espie Exp $
#
# Copyright (c) 2003-2010 Marc Espie <espie@openbsd.org>
#
@@ -39,8 +39,8 @@ sub baseurl
sub new
{
- my ($class, $baseurl) = @_;
- my $o = $class->parse(\$baseurl);
+ my ($class, $baseurl, $state) = @_;
+ my $o = $class->parse(\$baseurl, $state);
if ($baseurl ne '') {
return undef;
}
@@ -73,40 +73,49 @@ OpenBSD::Handler->register($cleanup);
sub parse_fullurl
{
- my ($class, $r) = @_;
+ my ($class, $r, $state) = @_;
$class->strip_urlscheme($r) or return undef;
- return $class->unique($class->parse_url($r));
+ return $class->unique($class->parse_url($r, $state));
}
+sub ftp() { 'OpenBSD::PackageRepository::FTP' }
+sub http() { 'OpenBSD::PackageRepository::HTTP' }
+sub https() { 'OpenBSD::PackageRepository::HTTPS' }
+sub scp() { 'OpenBSD::PackageRepository::SCP' }
+sub source() { 'OpenBSD::PackageRepository::Source' }
+sub file() { 'OpenBSD::PackageRepository::Local' }
+sub installed() { 'OpenBSD::PackageRepository::Installed' }
+sub pipe() { 'OpenBSD::PackageRepository::Local::Pipe' }
+
sub parse
{
- my ($class, $r) = @_;
+ my ($class, $r, $state) = @_;
my $_ = $$r;
return undef if $_ eq '';
if (m/^ftp\:/io) {
- return OpenBSD::PackageRepository::FTP->parse_fullurl($r);
+ return $class->ftp->parse_fullurl($r, $state);
} elsif (m/^http\:/io) {
- return OpenBSD::PackageRepository::HTTP->parse_fullurl($r);
+ return $class->http->parse_fullurl($r, $state);
} elsif (m/^https\:/io) {
- return OpenBSD::PackageRepository::HTTPS->parse_fullurl($r);
+ return $class->https->parse_fullurl($r, $state);
} elsif (m/^scp\:/io) {
require OpenBSD::PackageRepository::SCP;
- return OpenBSD::PackageRepository::SCP->parse_fullurl($r);
+ return $class->scp->parse_fullurl($r, $state);
} elsif (m/^src\:/io) {
require OpenBSD::PackageRepository::Source;
- return OpenBSD::PackageRepository::Source->parse_fullurl($r);
+ return $class->source->parse_fullurl($r, $state);
} elsif (m/^file\:/io) {
- return OpenBSD::PackageRepository::Local->parse_fullurl($r);
+ return $class->file->parse_fullurl($r, $state);
} elsif (m/^inst\:$/io) {
- return OpenBSD::PackageRepository::Installed->parse_fullurl($r);
+ return $class->installed->parse_fullurl($r, $state);
} elsif (m/^pipe\:$/io) {
- return OpenBSD::PackageRepository::Local::Pipe->parse_fullurl($r);
+ return $class->pipe->parse_fullurl($r, $state);
} else {
- return OpenBSD::PackageRepository::Local->parse_fullurl($r);
+ return $class->file->parse_fullurl($r, $state);
}
}
@@ -283,12 +292,12 @@ sub pkg_db
sub parse_fullurl
{
- my ($class, $r) = @_;
+ my ($class, $r, $state) = @_;
my $ok = $class->strip_urlscheme($r);
- my $o = $class->parse_url($r);
- if (!$ok && $o->{path} eq $class->pkg_db()."/") {
- return OpenBSD::PackageRepository::Installed->new;
+ my $o = $class->parse_url($r, $state);
+ if (!$ok && $o->{path} eq $class->pkg_db."/") {
+ return $class->installed->new(0, $state);
} else {
return $class->unique($o);
}
@@ -378,11 +387,10 @@ sub may_exist
return 1;
}
-my $s = bless {}, __PACKAGE__;
-
sub new
{
- return $s;
+ my ($class, $state) = @_;
+ return bless { state => $state}, $class;
}
sub open_pipe
@@ -419,13 +427,13 @@ sub baseurl
sub parse_url
{
- my ($class, $r) = @_;
+ my ($class, $r, $state) = @_;
# same heuristics as ftp(1):
# find host part, rest is parsed as a local url
if (my ($host, $path) = $$r =~ m/^\/\/(.*?)(\/.*)$/) {
$$r = $path;
- my $o = $class->SUPER::parse_url($r);
+ my $o = $class->SUPER::parse_url($r, $state);
$o->{host} = $host;
return $o;
} else {
diff --git a/usr.sbin/pkg_add/OpenBSD/PackageRepository/Installed.pm b/usr.sbin/pkg_add/OpenBSD/PackageRepository/Installed.pm
index e1c9940e606..517df5209a6 100644
--- a/usr.sbin/pkg_add/OpenBSD/PackageRepository/Installed.pm
+++ b/usr.sbin/pkg_add/OpenBSD/PackageRepository/Installed.pm
@@ -1,5 +1,5 @@
# ex:ts=8 sw=4:
-# $OpenBSD: Installed.pm,v 1.25 2010/06/30 10:51:04 espie Exp $
+# $OpenBSD: Installed.pm,v 1.26 2010/07/02 11:17:46 espie Exp $
#
# Copyright (c) 2007-2010 Marc Espie <espie@openbsd.org>
#
@@ -28,7 +28,7 @@ package OpenBSD::PackageRepositoryBase;
sub parse_url
{
- my ($class, $r) = @_;
+ my ($class, $r, $state) = @_;
my $path;
@@ -41,15 +41,15 @@ sub parse_url
}
$path .= '/' unless $path =~ m/\/$/;
- bless { path => $path }, $class;
+ bless { path => $path, state => $state }, $class;
}
sub parse_fullurl
{
- my ($class, $_) = @_;
+ my ($class, $r, $state) = @_;
- $class->strip_urlscheme($_) or return undef;
- return $class->parse_url($_);
+ $class->strip_urlscheme($r) or return undef;
+ return $class->parse_url($r, $state);
}
sub strip_urlscheme
@@ -153,12 +153,10 @@ sub urlscheme
use OpenBSD::PackageInfo (qw(is_installed installed_info
installed_packages installed_stems installed_name));
-my $singleton = bless {}, __PACKAGE__;
-my $s2 = bless {all => 1}, __PACKAGE__;
-
sub new
{
- return $_[1] ? $s2 : $singleton;
+ my ($class, $all, $state) = @_;
+ return bless { all => $all, state => $state }, $class;
}
sub relative_url
diff --git a/usr.sbin/pkg_add/OpenBSD/PackageRepositoryList.pm b/usr.sbin/pkg_add/OpenBSD/PackageRepositoryList.pm
index 2a82b1d2d2e..2243db36353 100644
--- a/usr.sbin/pkg_add/OpenBSD/PackageRepositoryList.pm
+++ b/usr.sbin/pkg_add/OpenBSD/PackageRepositoryList.pm
@@ -1,5 +1,5 @@
# ex:ts=8 sw=4:
-# $OpenBSD: PackageRepositoryList.pm,v 1.25 2010/06/30 10:51:04 espie Exp $
+# $OpenBSD: PackageRepositoryList.pm,v 1.26 2010/07/02 11:17:46 espie Exp $
#
# Copyright (c) 2003-2006 Marc Espie <espie@openbsd.org>
#
@@ -22,8 +22,8 @@ package OpenBSD::PackageRepositoryList;
sub new
{
- my $class = shift;
- return bless {l => [], k => {}}, $class;
+ my ($class, $state) = @_;
+ return bless {l => [], k => {}, state => $state}, $class;
}
sub filter_new
@@ -54,7 +54,7 @@ sub do_something
{
my ($self, $do, $pkgname, @args) = @_;
if ($pkgname eq '-') {
- return OpenBSD::PackageRepository::Local::Pipe->new->$do($pkgname, @args);
+ return OpenBSD::PackageRepository->pipe->new($self->{state})->$do($pkgname, @args);
}
for my $repo (@{$self->{l}}) {
my $r = $repo->$do($pkgname, @args);
diff --git a/usr.sbin/pkg_add/OpenBSD/State.pm b/usr.sbin/pkg_add/OpenBSD/State.pm
index 64f1293980c..e875fea0929 100644
--- a/usr.sbin/pkg_add/OpenBSD/State.pm
+++ b/usr.sbin/pkg_add/OpenBSD/State.pm
@@ -1,5 +1,5 @@
# ex:ts=8 sw=4:
-# $OpenBSD: State.pm,v 1.10 2010/06/30 11:32:20 espie Exp $
+# $OpenBSD: State.pm,v 1.11 2010/07/02 11:17:46 espie Exp $
#
# Copyright (c) 2007-2010 Marc Espie <espie@openbsd.org>
#
@@ -31,7 +31,7 @@ sub installed
my ($self, $all) = @_;
require OpenBSD::PackageRepository::Installed;
- return OpenBSD::PackageRepository::Installed->new($all);
+ return OpenBSD::PackageRepository::Installed->new($all, $self->{state});
}
sub path_parse
@@ -39,7 +39,7 @@ sub path_parse
my ($self, $pkgname) = @_;
require OpenBSD::PackageLocator;
- return OpenBSD::PackageLocator->path_parse($pkgname);
+ return OpenBSD::PackageLocator->path_parse($pkgname, $self->{state});
}
sub find
@@ -47,7 +47,7 @@ sub find
my ($self, $pkg, $arch) = @_;
require OpenBSD::PackageLocator;
- return OpenBSD::PackageLocator->find($pkg, $arch);
+ return OpenBSD::PackageLocator->find($pkg, $arch, $self->{state});
}
sub match_locations
@@ -55,15 +55,15 @@ sub match_locations
my $self = shift;
require OpenBSD::PackageLocator;
- return OpenBSD::PackageLocator->match_locations(@_);
+ return OpenBSD::PackageLocator->match_locations(@_, $self->{state});
}
sub grabPlist
{
- my $self = shift;
+ my ($self, $url, $arch, $code) = @_;
require OpenBSD::PackageLocator;
- return OpenBSD::PackageLocator->grabPlist(@_);
+ return OpenBSD::PackageLocator->grabPlist($url, $arch, $code, $self->{state});
}
sub path
@@ -71,7 +71,7 @@ sub path
my $self = shift;
require OpenBSD::PackageRepositoryList;
- return OpenBSD::PackageRepositoryList->new;
+ return OpenBSD::PackageRepositoryList->new($self->{state});
}
# common routines to everything state.