metadata: always resolve dependencies through provides list

Instead of adding virtual packages to the normal package list, keep a
separate list for provides, make each package provide itself, and resolve
all dependencies through this list. This allows to use PROVIDES to replace
existing packages.

Fixes FS#837.

Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
This commit is contained in:
Matthias Schiffer
2018-01-08 12:17:30 +01:00
parent 565de8b8a8
commit 47d6b05ad3
3 changed files with 35 additions and 46 deletions

View File

@@ -252,7 +252,6 @@ sub search_feed {
my $substr;
my $pkgmatch = 1;
next if $pkg->{vdepends};
foreach my $substr (@substr) {
my $match;
foreach my $key (qw(name title description src)) {
@@ -306,7 +305,6 @@ sub list_feed {
get_feed($feed);
foreach my $name (sort { lc($a) cmp lc($b) } keys %$feed_package) {
my $pkg = $feed_package->{$name};
next if $pkg->{vdepends};
if($pkg->{name}) {
printf "\%-32s\t\%s\n", $pkg->{name}, $pkg->{title};
}
@@ -534,6 +532,7 @@ sub install_package {
@{$feed_src->{$src}{"builddepends/host"}},
map { @{$_->{depends}} } @{$feed_src->{$src}{packages}}
) {
# TODO: handle virtual packages and PROVIDES
next if $dep =~ /@/;
$dep =~ s/^\+//;
$dep =~ s/^.+://;
@@ -594,7 +593,6 @@ sub install {
get_feed($f->[1]);
foreach my $name (sort { lc($a) cmp lc($b) } keys %$feed_package) {
my $p = $feed_package->{$name};
next if $p->{vdepends};
if( $p->{name} ) {
install_package($feed, $p->{name}, exists($opts{f})) == 0 or $ret = 1;
get_feed($f->[1]);