summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorespie <espie@openbsd.org>2007-12-28 12:55:03 +0000
committerespie <espie@openbsd.org>2007-12-28 12:55:03 +0000
commit6bb2afe0232a63332f55a405afca03b2543fb34e (patch)
tree80e5716e3e37bafa4f7eb29801453ea8d4c1bfe1
parentPull from master repo: (diff)
downloadwireguard-openbsd-6bb2afe0232a63332f55a405afca03b2543fb34e.tar.xz
wireguard-openbsd-6bb2afe0232a63332f55a405afca03b2543fb34e.zip
tweak the semantics so that no-default-conflict works.
requested by mbalmer@,sturm@. okay winiger@
-rw-r--r--usr.sbin/pkg_add/OpenBSD/PkgCfl.pm5
-rw-r--r--usr.sbin/pkg_add/OpenBSD/Search.pm40
2 files changed, 41 insertions, 4 deletions
diff --git a/usr.sbin/pkg_add/OpenBSD/PkgCfl.pm b/usr.sbin/pkg_add/OpenBSD/PkgCfl.pm
index c60762f2fd0..7bb508daec2 100644
--- a/usr.sbin/pkg_add/OpenBSD/PkgCfl.pm
+++ b/usr.sbin/pkg_add/OpenBSD/PkgCfl.pm
@@ -1,5 +1,5 @@
# ex:ts=8 sw=4:
-# $OpenBSD: PkgCfl.pm,v 1.24 2007/06/12 09:53:36 espie Exp $
+# $OpenBSD: PkgCfl.pm,v 1.25 2007/12/28 12:55:03 espie Exp $
#
# Copyright (c) 2003-2005 Marc Espie <espie@openbsd.org>
#
@@ -37,8 +37,7 @@ sub make_conflict_list
unless (defined $plist->{'no-default-conflict'}) {
push(@$l, OpenBSD::Search::PkgSpec->new("$stem-*|partial-$stem-*"));
} else {
- $pkgname =~ s/p\d+$//;
- push(@$l, OpenBSD::Search::PkgSpec->new("$pkgname|partial-$pkgname"));
+ push(@$l, OpenBSD::Search::Exact->new("$pkgname|partial-$pkgname"));
}
push(@$l, OpenBSD::Search::PkgSpec->new(".libs-$stem-*"));
if (defined $plist->{conflict}) {
diff --git a/usr.sbin/pkg_add/OpenBSD/Search.pm b/usr.sbin/pkg_add/OpenBSD/Search.pm
index 21db9b2792e..63f86be40f6 100644
--- a/usr.sbin/pkg_add/OpenBSD/Search.pm
+++ b/usr.sbin/pkg_add/OpenBSD/Search.pm
@@ -1,5 +1,5 @@
# ex:ts=8 sw=4:
-# $OpenBSD: Search.pm,v 1.7 2007/06/04 14:57:33 espie Exp $
+# $OpenBSD: Search.pm,v 1.8 2007/12/28 12:55:03 espie Exp $
#
# Copyright (c) 2007 Marc Espie <espie@openbsd.org>
#
@@ -77,6 +77,44 @@ sub add_pkgpath_hint
$self->{pkgpath} = $pkgpath;
}
+package OpenBSD::Search::Exact;
+our @ISA=(qw(OpenBSD::Search::PkgSpec));
+sub match_ref
+{
+ my ($self, $r) = @_;
+ my @l = ();
+
+ for my $subpattern (@{$self->{patterns}}) {
+ if ($subpattern !~ m/^(.*?)\-(\d[^-]*)(.*)$/o) {
+ next;
+ }
+ my ($stem, $version, $flavor) = ($1, $2, $3);
+ $version =~ s/p\d+//;
+ for my $pkg (@$r) {
+ if ($pkg eq $subpattern) {
+ push(@l, $pkg);
+ next;
+ }
+ if ($pkg !~ m/^(.*?)\-(\d[^-]*)(.*)$/o) {
+ next;
+ }
+ if ($1 ne $stem) {
+ next;
+ }
+ if ($3 ne $flavor) {
+ next;
+ }
+ my $pkgversion = $2;
+ $pkgversion =~ s/p\d+//;
+ if ($pkgversion ne $version) {
+ next;
+ }
+ push(@l, $pkg);
+ }
+ }
+ return @l;
+}
+
package OpenBSD::Search::Stem;
our @ISA=(qw(OpenBSD::Search));