summaryrefslogtreecommitdiff
path: root/usr.sbin
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin')
-rw-r--r--usr.sbin/pkg_add/OpenBSD/PackageLocator.pm22
-rw-r--r--usr.sbin/pkg_add/OpenBSD/PackageRepository.pm114
-rw-r--r--usr.sbin/pkg_add/OpenBSD/PackageRepository/Installed.pm30
-rw-r--r--usr.sbin/pkg_add/OpenBSD/Update.pm4
-rw-r--r--usr.sbin/pkg_add/pkg_info4
5 files changed, 88 insertions, 86 deletions
diff --git a/usr.sbin/pkg_add/OpenBSD/PackageLocator.pm b/usr.sbin/pkg_add/OpenBSD/PackageLocator.pm
index 5215985ca5c..52d4b6f888a 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.80 2010/01/09 10:59:48 espie Exp $
+# $OpenBSD: PackageLocator.pm,v 1.81 2010/01/09 11:26:58 espie Exp $
#
# Copyright (c) 2003-2007 Marc Espie <espie@openbsd.org>
#
@@ -45,12 +45,20 @@ if (defined $ENV{PKG_PATH}) {
sub path_parse
{
- my ($pkgname, $path) = (shift, './');
- if ($pkgname =~ m/^(.*[\/\:])(.*)/) {
- ($pkgname, $path) = ($2, $1);
+ use File::Basename;
+ use OpenBSD::Paths;
+ my $pkg_db = $ENV{"PKG_DBDIR"} || OpenBSD::Paths->pkgdb;
+
+ my ($pkgname, $path) = fileparse(shift);
+ my $repo;
+
+ if ($path eq $pkg_db.'/') {
+ $repo = OpenBSD::PackageRepository::Installed->new;
+ } else {
+ $repo = OpenBSD::PackageRepository->new($path);
}
- return (OpenBSD::PackageRepository->new($path), $path, $pkgname);
+ return ($repo, $path, $pkgname);
}
sub find
@@ -61,7 +69,7 @@ sub find
return $packages{$_};
}
my $package;
- if (m/[\/\:]/o) {
+ if (m/\//o) {
my ($repository, undef, $pkgname) = path_parse($_);
$package = $repository->find($pkgname, $arch);
if (defined $package) {
@@ -79,7 +87,7 @@ sub grabPlist
my ($class, $_, $arch, $code) = @_;
my $plist;
- if (m/[\/\:]/o) {
+ if (m/\//o) {
my ($repository, undef, $pkgname) = path_parse($_);
$plist = $repository->grabPlist($pkgname, $arch, $code);
if (defined $plist) {
diff --git a/usr.sbin/pkg_add/OpenBSD/PackageRepository.pm b/usr.sbin/pkg_add/OpenBSD/PackageRepository.pm
index 992a3f6e6e5..1c9c9a052ef 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.73 2010/01/09 10:59:48 espie Exp $
+# $OpenBSD: PackageRepository.pm,v 1.74 2010/01/09 11:26:58 espie Exp $
#
# Copyright (c) 2003-2007 Marc Espie <espie@openbsd.org>
#
@@ -30,6 +30,13 @@ our @ISA=(qw(OpenBSD::PackageRepositoryBase));
use OpenBSD::PackageLocation;
use OpenBSD::Paths;
+sub _new
+{
+ my ($class, $path, $host) = @_;
+ $path .= '/' unless $path =~ m/\/$/;
+ bless { host => $host, path => $path }, $class;
+}
+
sub baseurl
{
my $self = shift;
@@ -40,51 +47,78 @@ sub baseurl
sub new
{
my ($class, $baseurl) = @_;
- my $o = $class->parse($baseurl);
+ my $o = $class->parse(\$baseurl);
+ return $o;
+}
+
+sub strip_urlscheme
+{
+ my ($class, $r) = @_;
+ if ($$r =~ m/^(.*?)\:(.*)$/) {
+ my $scheme = lc($1);
+ if ($scheme eq $class->urlscheme) {
+ $$r = $2;
+ return 1;
+ }
+ }
+ return 0;
+}
+
+sub parse_local_url
+{
+ my ($class, $r, @args) = @_;
+
+ my $o;
+
+ if ($$r =~ m/^(.*?)\:(.*)/) {
+ $o = $class->_new($1, @args);
+ $$r = $2;
+ } else {
+ $o = $class->_new($$r, @args);
+ $$r = '';
+ }
return $o;
}
-# we have to pass a reference because we want to:
-# - strip the scheme
-# - report whether we stripped it
-# (relevant for file: url, where we strip, but don't care if we did
-# vs other schemes, where not having the ftp: marker is a problem)
+sub parse_url
+{
+ &parse_local_url;
+}
sub parse_fullurl
{
- my ($class, $_) = @_;
+ my ($class, $r) = @_;
- $class->strip_urlscheme(\$_) or return undef;
- return $class->parse_url($_);
+ $class->strip_urlscheme($r) or return undef;
+ return $class->parse_url($r);
}
sub parse
{
- my ($class, $_) = @_;
+ my ($class, $ref) = @_;
+ my $_ = $$ref;
return undef if $_ eq '';
if (m/^ftp\:/io) {
- return OpenBSD::PackageRepository::FTP->parse_fullurl($_);
+ return OpenBSD::PackageRepository::FTP->parse_fullurl($ref);
} elsif (m/^http\:/io) {
- return OpenBSD::PackageRepository::HTTP->parse_fullurl($_);
+ return OpenBSD::PackageRepository::HTTP->parse_fullurl($ref);
} elsif (m/^https\:/io) {
- return OpenBSD::PackageRepository::HTTPS->parse_fullurl($_);
+ return OpenBSD::PackageRepository::HTTPS->parse_fullurl($ref);
} elsif (m/^scp\:/io) {
require OpenBSD::PackageRepository::SCP;
- return OpenBSD::PackageRepository::SCP->parse_fullurl($_);
+ return OpenBSD::PackageRepository::SCP->parse_fullurl($ref);
} elsif (m/^src\:/io) {
require OpenBSD::PackageRepository::Source;
- return OpenBSD::PackageRepository::Source->parse_fullurl($_);
+ return OpenBSD::PackageRepository::Source->parse_fullurl($ref);
} elsif (m/^file\:/io) {
- return OpenBSD::PackageRepository::Local->parse_fullurl($_);
+ return OpenBSD::PackageRepository::Local->parse_fullurl($ref);
} elsif (m/^inst\:$/io) {
- return OpenBSD::PackageRepository::Installed->parse_fullurl($_);
- } elsif (m/^pipe\:$/io) {
- return OpenBSD::PackageRepository::Local::Pipe->parse_fullurl($_);
+ return OpenBSD::PackageRepository::Installed->parse_fullurl($ref);
} else {
- return OpenBSD::PackageRepository::Local->parse_fullurl($_);
+ return OpenBSD::PackageRepository::Local->parse_fullurl($ref);
}
}
@@ -240,28 +274,12 @@ sub urlscheme
return 'file';
}
-my $pkg_db;
-
-sub pkg_db
-{
- if (!defined $pkg_db) {
- use OpenBSD::Paths;
- $pkg_db = $ENV{"PKG_DBDIR"} || OpenBSD::Paths->pkgdb;
- }
- return $pkg_db;
-}
-
sub parse_fullurl
{
- my ($class, $_) = @_;
+ my ($class, $r) = @_;
- my $r = $class->strip_urlscheme(\$_);
- my $o = $class->parse_url($_);
- if (!$r && $o->{path} eq $class->pkg_db()."/") {
- return OpenBSD::PackageRepository::Installed->new;
- } else {
- return $o;
- }
+ $class->strip_urlscheme($r);
+ return $class->parse_local_url($r);
}
# wrapper around copy, that sometimes does not copy
@@ -389,14 +407,18 @@ sub baseurl
sub parse_url
{
- my ($class, $_) = @_;
+ &parse_distant_url;
+}
+
+sub parse_distant_url
+{
+ my ($class, $r) = @_;
# same heuristics as ftp(1):
# find host part, rest is parsed as a local url
- if (my ($host, $path) = m/^\/\/(.*?)(\/.*)$/) {
-
- my $o = $class->SUPER::parse_url($path);
- $o->{host} = $host;
- return $o;
+ if ($$r =~ m/^\/\/(.*?)(\/.*)$/) {
+ my $host = $1;
+ $$r = $2;
+ return $class->parse_local_url($r, $host);
} else {
return undef;
}
diff --git a/usr.sbin/pkg_add/OpenBSD/PackageRepository/Installed.pm b/usr.sbin/pkg_add/OpenBSD/PackageRepository/Installed.pm
index e25254b164e..c26458a5def 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.17 2010/01/09 10:44:42 espie Exp $
+# $OpenBSD: Installed.pm,v 1.18 2010/01/09 11:26:58 espie Exp $
#
# Copyright (c) 2007 Marc Espie <espie@openbsd.org>
#
@@ -26,34 +26,6 @@ use warnings;
package OpenBSD::PackageRepositoryBase;
-sub parse_url
-{
- my ($class, $path) = @_;
- $path .= '/' unless $path =~ m/\/$/;
- bless { path => $path }, $class;
-}
-
-sub parse_fullurl
-{
- my ($class, $_) = @_;
-
- $class->strip_urlscheme(\$_) or return undef;
- return $class->parse_url($_);
-}
-
-sub strip_urlscheme
-{
- my ($class, $r) = @_;
- if ($$r =~ m/^(.*?)\:(.*)$/) {
- my $scheme = lc($1);
- if ($scheme eq $class->urlscheme) {
- $$r = $2;
- return 1;
- }
- }
- return 0;
-}
-
sub match_locations
{
my ($self, $search, @filters) = @_;
diff --git a/usr.sbin/pkg_add/OpenBSD/Update.pm b/usr.sbin/pkg_add/OpenBSD/Update.pm
index b9bd790c438..ef4696fe818 100644
--- a/usr.sbin/pkg_add/OpenBSD/Update.pm
+++ b/usr.sbin/pkg_add/OpenBSD/Update.pm
@@ -1,5 +1,5 @@
# ex:ts=8 sw=4:
-# $OpenBSD: Update.pm,v 1.128 2010/01/09 10:45:32 espie Exp $
+# $OpenBSD: Update.pm,v 1.129 2010/01/09 11:26:58 espie Exp $
#
# Copyright (c) 2004-2010 Marc Espie <espie@openbsd.org>
#
@@ -275,7 +275,7 @@ sub process_hint2
my ($self, $set, $hint, $state) = @_;
my $pkgname = $hint->pkgname;
if (OpenBSD::PackageName::is_stem($pkgname)) {
- if ($pkgname =~ m/[\/\:]/o) {
+ if ($pkgname =~ m/\//o) {
require OpenBSD::PackageLocator;
my $repo;
($repo, undef, $pkgname) = OpenBSD::PackageLocator::path_parse($pkgname);
diff --git a/usr.sbin/pkg_add/pkg_info b/usr.sbin/pkg_add/pkg_info
index 9758048ac59..2dc5b972b39 100644
--- a/usr.sbin/pkg_add/pkg_info
+++ b/usr.sbin/pkg_add/pkg_info
@@ -1,6 +1,6 @@
#! /usr/bin/perl
# ex:ts=8 sw=4:
-# $OpenBSD: pkg_info,v 1.86 2010/01/09 10:45:32 espie Exp $
+# $OpenBSD: pkg_info,v 1.87 2010/01/09 11:26:58 espie Exp $
#
# Copyright (c) 2003-2010 Marc Espie <espie@openbsd.org>
#
@@ -106,7 +106,7 @@ sub find_pkg
my ($repo, $path);
- if ($pkgname =~ m/[\/\:]/o) {
+ if ($pkgname =~ m/\//o) {
($repo, $path, $pkgname) =
OpenBSD::PackageLocator::path_parse($pkgname);
} else {