]> git.ipfire.org Git - ipfire-2.x.git/blobdiff - src/pakfire/lib/functions.pl
validate GPG keys by fingerprint
[ipfire-2.x.git] / src / pakfire / lib / functions.pl
index 96f8d144a975c3b48f2c87c8948afd2ee7cebd38..cfb7e51175f30a7ffb790ade89a7ae5a19bc38f9 100644 (file)
@@ -34,8 +34,8 @@ use Net::Ping;
 package Pakfire;
 
 # GPG Keys
-my $myid = "64D96617";                 # Our own gpg-key paks@ipfire.org
-my $trustid = "65D0FD58";              # gpg-key of CaCert
+my $myid = "179740DC4D8C47DC63C099C74BDE364C64D96617";         # Our own gpg-key paks@ipfire.org
+my $trustid = "A31D4F81EF4EBD07B456FA04D2BB0D0165D0FD58";      # gpg-key of CaCert
 
 # A small color-hash :D
 my %color;
@@ -519,8 +519,13 @@ sub dblist {
                        } elsif ("$filter" eq "installed") {
                                next unless ( -e "$Conf::dbdir/installed/meta-$templine[0]" );
                        }
-                       if ("$forweb" eq "forweb") {
-                               print "<option value=\"$templine[0]\">$templine[0]-$templine[1]-$templine[2]</option>\n";
+                       if ("$forweb" eq "forweb")
+                        {
+                               if ("$filter" eq "notinstalled") {
+                                       print "<option value=\"$templine[0]\">$templine[0]-$templine[1]-$templine[2]</option>\n";
+                               } else {
+                                       print "<option value=\"$templine[0]\">$templine[0]</option>\n";
+                               }
                        } else {
                                if ("$Pakfire::enable_colors" eq "1") {
                                        if (&isinstalled("$templine[0]")) {
@@ -536,7 +541,7 @@ sub dblist {
        }
 }
 
-sub resolvedeps {
+sub resolvedeps_one {
        my $pak = shift;
        
        getmetafile("$pak");
@@ -548,7 +553,7 @@ sub resolvedeps {
        close(FILE);
        
        my $line;
-       my (@templine, @deps, @tempdeps, @all);
+       my (@templine, @deps, @all);
        foreach $line (@file) {
                @templine = split(/\: /,$line);
                if ("$templine[0]" eq "Dependencies") {
@@ -563,30 +568,41 @@ sub resolvedeps {
                        message("PAKFIRE RESV: $pak: Dependency is already installed: $_");
                  } else {
                        message("PAKFIRE RESV: $pak: Need to install dependency: $_");
-                               push(@tempdeps,$_);
                                push(@all,$_);
                        } 
                }
        }
 
-       foreach (@tempdeps) {
-               if ($_) {
-                       my @newdeps = resolvedeps("$_");
-                       foreach(@newdeps) {
-                               unless (($_ eq " ") || ($_ eq "")) {
-                                       my $return = &isinstalled($_);
-                                       if ($return eq 0) {
-                                               message("PAKFIRE RESV: $pak: Dependency is already installed: $_");
-                                       } else {
-                                               message("PAKFIRE RESV: $pak: Need to install dependency: $_");
-                                               push(@all,$_);
-                                       }
-                               }
+       return @all;
+}
+
+sub resolvedeps {
+       my $pak = shift;
+       my @all;
+
+       # Resolve all not yet installed dependencies of $pak
+       my @deps = &resolvedeps_one($pak);
+       push(@all, @deps);
+
+       # For each dependency, we check if more dependencies exist
+       while (@deps) {
+               my $dep = pop(@deps);
+
+               my @subdeps = &resolvedeps_one($dep);
+               foreach my $subdep (@subdeps) {
+                       # Skip the package we are currently resolving for
+                       next if ($pak eq $subdep);
+
+                       # If the package is not already to be installed,
+                       # we add it to the list (@all) and check if it has
+                       # more dependencies on its own.
+                       unless (grep {$_ eq $subdep} @all) {
+                               push(@deps, $subdep);
+                               push(@all, $subdep);
                        }
                }
        }
-       message("");
-       chomp (@all);
+
        return @all;
 }