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