diff options
author | 2010-07-02 11:17:46 +0000 | |
---|---|---|
committer | 2010-07-02 11:17:46 +0000 | |
commit | 5732efc005e2de63ca094d4c961f2e6fd3cf4841 (patch) | |
tree | 84dfe283e24f5f53b4050584e8f3ae22201a1abc | |
parent | Rename the volume specific flags variable. (diff) | |
download | wireguard-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.pm | 40 | ||||
-rw-r--r-- | usr.sbin/pkg_add/OpenBSD/PackageRepository.pm | 56 | ||||
-rw-r--r-- | usr.sbin/pkg_add/OpenBSD/PackageRepository/Installed.pm | 18 | ||||
-rw-r--r-- | usr.sbin/pkg_add/OpenBSD/PackageRepositoryList.pm | 8 | ||||
-rw-r--r-- | usr.sbin/pkg_add/OpenBSD/State.pm | 16 |
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. |