]> git.deb.at Git - deb/packages.git/blobdiff - lib/Packages/Search.pm
Fix download locations for source packages
[deb/packages.git] / lib / Packages / Search.pm
index 3f24e977856e46d3a9dfc8182d874d45bb5b5a69..b2f4e2c700eeaf9a8b99009eb9174e81a0e37402 100644 (file)
@@ -347,10 +347,10 @@ sub read_entry_all {
        next if $suite eq '-';
        if ($opts->{h_suites}{$suite}) {
            push @$results, [ $key, "-", $suite, 'virtual', 'v', 'v', 'v', 'v',
-               (split /\s/, $provides)];
+                             $provides];
        } else {
            push @$non_results, [ $key, "-", $suite, 'virtual', 'v', 'v', 'v', 'v',
-               (split /\s/, $provides)];
+                                 $provides];
        }
     }
 
@@ -372,6 +372,13 @@ sub read_entry {
     my @non_results;
     read_entry_all( $hash, $key, $results, \@non_results, $opts );
 }
+
+#FIXME: make configurable
+my %fallback_suites = (
+                      'stable-backports' => 'stable',
+                      'stable-volatile' => 'stable',
+                      experimental => 'unstable' );
+
 sub read_entry_simple {
     my ($hash, $key, $archives, $suite) = @_;
     # FIXME: drop $archives
@@ -380,11 +387,18 @@ sub read_entry_simple {
     my %virt = split /\01/o, $virt; 
     debug( "read_entry_simple: key=$key, archives=".
           join(" ",(keys %$archives)).", suite=$suite", 1) if DEBUG;
+    return [ $virt{$suite} ] unless defined $result;
     foreach (split /\000/o, $result) {
        my @data = split ( /\s/o, $_, 8 );
        debug( "use entry: @data", 2 ) if DEBUG && $data[1] eq $suite;
        return [ $virt{$suite}, @data ] if $data[1] eq $suite;
     }
+    if (my $fb_suite = $fallback_suites{$suite}) {
+       my $fb_result = read_entry_simple( $hash, $key, $archives, $fb_suite );
+       my $fb_virt = shift(@$fb_result);
+       $virt{$suite} .= $fb_virt if $fb_virt;
+       return [ $virt{$suite}, @$fb_result ] if @$fb_result;
+    }
     return [ $virt{$suite} ];
 }