diff options
author | 2010-07-02 12:42:49 +0000 | |
---|---|---|
committer | 2010-07-02 12:42:49 +0000 | |
commit | a265275022819db04d0b0609f31df7af8e0e3346 (patch) | |
tree | 7a7aeb369c45cb993b83e59740ba5045d17fb008 | |
parent | move the empty url message up to PackageRepository, so that we can print (diff) | |
download | wireguard-openbsd-a265275022819db04d0b0609f31df7af8e0e3346.tar.xz wireguard-openbsd-a265275022819db04d0b0609f31df7af8e0e3346.zip |
parse pkg.conf and use it for default_path if PKG_PATH is not defined.
-rw-r--r-- | usr.sbin/pkg_add/OpenBSD/PackageLocator.pm | 35 | ||||
-rw-r--r-- | usr.sbin/pkg_add/OpenBSD/State.pm | 71 |
2 files changed, 91 insertions, 15 deletions
diff --git a/usr.sbin/pkg_add/OpenBSD/PackageLocator.pm b/usr.sbin/pkg_add/OpenBSD/PackageLocator.pm index 99c1f884ea1..71d43931ae8 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.94 2010/07/02 11:41:30 espie Exp $ +# $OpenBSD: PackageLocator.pm,v 1.95 2010/07/02 12:42:49 espie Exp $ # # Copyright (c) 2003-2010 Marc Espie <espie@openbsd.org> # @@ -25,23 +25,30 @@ use OpenBSD::PackageRepository; my $default_path; -sub default_path +sub build_default_path { - if (!defined $default_path) { - my ($self, $state) = @_; - $default_path = OpenBSD::PackageRepositoryList->new($state); + my ($self, $state) = @_; + $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, $state)) { - $default_path->add($o); - } - } else { - $default_path->add(OpenBSD::PackageRepository->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, $state)) { + $default_path->add($o); } + return; + } + $default_path->add(OpenBSD::PackageRepository->new("./", $state)->can_be_empty); + if (my $i = $state->config->value("installpath")) { + $default_path->add(OpenBSD::PackageRepository->new($i, $state)); + } +} +sub default_path +{ + if (!defined $default_path) { + &build_default_path; } return $default_path; } diff --git a/usr.sbin/pkg_add/OpenBSD/State.pm b/usr.sbin/pkg_add/OpenBSD/State.pm index e875fea0929..59926da1081 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.11 2010/07/02 11:17:46 espie Exp $ +# $OpenBSD: State.pm,v 1.12 2010/07/02 12:42:49 espie Exp $ # # Copyright (c) 2007-2010 Marc Espie <espie@openbsd.org> # @@ -19,6 +19,70 @@ use strict; use warnings; +package OpenBSD::Configuration; +sub new +{ + my ($class, $state) = @_; + my $self = bless {}, $class; + require OpenBSD::Paths; + $self->read_file(OpenBSD::Paths->pkgconf, $state); + return $self; +} + +sub read_file +{ + my ($self, $filename, $state) = @_; + open(my $fh, '<', $filename) or return; + my $_; + while (<$fh>) { + chomp; + next if m/^\s*\#/; + next if m/^\s*$/; + my ($cmd, $k, $v, $add); + my $h = $self; + if (($cmd, $k, $add, $v) = m/^\s*(.*?)\.(.*?)\s*(\+?)\=\s*(.*)\s*$/) { + next unless $cmd eq $state->{cmd}; + my $h = $self->{cmd} = {}; + } elsif (($k, $add, $v) = m/^\s*(.*?)\s*(\+?)\=\s*(.*)\s*$/) { + } else { + # bad line: should we say so ? + $state->errsay("Bad line in #1: #2 (#3)", + $filename, $_, $.); + } + # remove caps + $k =~ tr/A-Z/a-z/; + if ($add eq '') { + $h->{$k} = [$v]; + } else { + push(@{$h->{$k}}, $v); + } + } +} + +sub ref +{ + my ($self, $k) = @_; + if (defined $self->{cmd}{$k}) { + return $self->{cmd}{$k}; + } else { + return $self->{$k}; + } +} + +sub value +{ + my ($self, $k) = @_; + my $r = $self->ref($k); + if (!defined $r) { + return $r; + } + if (wantarray) { + return @$r; + } else { + return $r->[0]; + } +} + package OpenBSD::PackageRepositoryFactory; sub new { @@ -105,6 +169,11 @@ sub repo return $self->{repo}; } +OpenBSD::Auto::cache(config, + sub { + return OpenBSD::Configuration->new(shift); + }); + sub usage_is { my ($self, @usage) = @_; |