xref: /openbsd-src/usr.sbin/pkg_add/OpenBSD/PackageRepositoryList.pm (revision 793984b26894fd79a35801a3a6ad4743b7a4e737)
1d39602bdSespie# ex:ts=8 sw=4:
2*793984b2Sespie# $OpenBSD: PackageRepositoryList.pm,v 1.34 2023/06/14 09:59:09 espie Exp $
3d39602bdSespie#
41144937fSespie# Copyright (c) 2003-2006 Marc Espie <espie@openbsd.org>
5d39602bdSespie#
6d39602bdSespie# Permission to use, copy, modify, and distribute this software for any
7d39602bdSespie# purpose with or without fee is hereby granted, provided that the above
8d39602bdSespie# copyright notice and this permission notice appear in all copies.
9d39602bdSespie#
10d39602bdSespie# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11d39602bdSespie# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12d39602bdSespie# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13d39602bdSespie# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14d39602bdSespie# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15d39602bdSespie# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16d39602bdSespie# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17d39602bdSespie
18039cbdaaSespieuse v5.36;
19d39602bdSespie
20d39602bdSespiepackage OpenBSD::PackageRepositoryList;
21d39602bdSespie
22039cbdaaSespiesub new($class, $state)
23d39602bdSespie{
245732efc0Sespie	return bless {l => [], k => {}, state => $state}, $class;
254df790ceSespie}
264df790ceSespie
27039cbdaaSespiesub filter_new($self, @p)
284df790ceSespie{
294df790ceSespie	my @l = ();
30039cbdaaSespie	for my $r (@p) {
3126dcf9dfSespie		next if !defined $r;
324df790ceSespie		next if $self->{k}{$r};
334df790ceSespie		$self->{k}{$r} = 1;
344df790ceSespie		push @l, $r;
354df790ceSespie	}
364df790ceSespie	return @l;
37d39602bdSespie}
38d39602bdSespie
39039cbdaaSespiesub add($self, @p)
40d39602bdSespie{
41039cbdaaSespie	push @{$self->{l}}, $self->filter_new(@p);
425c22068dSespie}
434df790ceSespie
44039cbdaaSespiesub prepend($self, @p)
454df790ceSespie{
46039cbdaaSespie	unshift @{$self->{l}}, $self->filter_new(@p);
475c22068dSespie}
485c22068dSespie
49039cbdaaSespiesub do_something($self, $do, $pkgname, @args)
505c22068dSespie{
515c22068dSespie	for my $repo (@{$self->{l}}) {
525c22068dSespie		my $r = $repo->$do($pkgname, @args);
535c22068dSespie		return $r if defined $r;
545c22068dSespie	}
555c22068dSespie	return undef;
56d39602bdSespie}
57d39602bdSespie
58039cbdaaSespiesub find($self, @args)
59d39602bdSespie{
60d39602bdSespie
615c22068dSespie	return $self->do_something('find', @args);
62d39602bdSespie}
63d39602bdSespie
64039cbdaaSespiesub grabPlist($self, @args)
65d39602bdSespie{
665c22068dSespie	return $self->do_something('grabPlist', @args);
67d39602bdSespie}
68d39602bdSespie
69039cbdaaSespiesub match_locations($self, @search)
70fe4ab342Sespie{
715781d503Sespie	my $result = [];
725c22068dSespie	for my $repo (@{$self->{l}}) {
73e451b54dSespie		my $l = $repo->match_locations(@search);
745781d503Sespie		if ($search[0]->{keep_all}) {
755781d503Sespie			push(@$result, @$l);
765781d503Sespie		} elsif (@$l > 0) {
77e451b54dSespie			return $l;
78fe4ab342Sespie		}
79fe4ab342Sespie	}
805781d503Sespie	return $result;
81fe4ab342Sespie}
82fe4ab342Sespie
83d39602bdSespie1;
84