Hello Robin,
again, sorry for the late reply. This patch looks good to me.
Reviewed-by: Peter Müller peter.mueller@ipfire.org
Thanks, and best regards, Peter Müller
Removing a lot of duplicate code parsing meta files, now replaced by simple function calls, resulting in all metadata in one hash.
Signed-off-by: Robin Roevens robin.roevens@disroot.org
src/pakfire/lib/functions.pl | 129 +++++++++++++---------------------- 1 file changed, 49 insertions(+), 80 deletions(-)
diff --git a/src/pakfire/lib/functions.pl b/src/pakfire/lib/functions.pl index f9a19b60d..79ef7a12d 100644 --- a/src/pakfire/lib/functions.pl +++ b/src/pakfire/lib/functions.pl @@ -2,7 +2,7 @@ ############################################################################### # # # IPFire.org - A linux based firewall # -# Copyright (C) 2007-2015 IPFire Team info@ipfire.org # +# Copyright (C) 2007-2021 IPFire Team info@ipfire.org # # # # This program is free software: you can redistribute it and/or modify # # it under the terms of the GNU General Public License as published by # @@ -376,11 +376,10 @@ sub dbgetlist { }
# Update the meta database if new packages was in the package list
- my @meta; my $file; my $line; my $prog;
- my ($name, $version, $release);
my %metadata; my @templine;
open(FILE, "<$Conf::dbdir/lists/packages_list.db");
@@ -395,28 +394,14 @@ sub dbgetlist { next if ( $file eq ".." ); next if ( $file eq "meta-" ); next if ( $file =~ /^old/ );
open(FILE, "<$Conf::dbdir/meta/$file");
@meta = <FILE>;
close(FILE);
foreach $line (@meta) {
@templine = split(/\: /,$line);
if ("$templine[0]" eq "Name") {
$name = $templine[1];
chomp($name);
} elsif ("$templine[0]" eq "ProgVersion") {
$version = $templine[1];
chomp($version);
} elsif ("$templine[0]" eq "Release") {
$release = $templine[1];
chomp($release);
}
}
%metadata = parsemetafile("$Conf::dbdir/meta/$file");
- foreach $prog (@db) { @templine = split(/;/,$prog);
if (("$name" eq "$templine[0]") && ("$release" ne "$templine[2]")) {
move("$Conf::dbdir/meta/meta-$name","$Conf::dbdir/meta/old_meta-$name");
fetchfile("meta/meta-$name", "");
move("$Conf::cachedir/meta-$name", "$Conf::dbdir/meta/meta-$name");
if (("$metadata{'Name'}" eq "$templine[0]") && ("$metadata{'Release'}" ne "$templine[2]")) {
move("$Conf::dbdir/meta/meta-$metadata{'Name'}","$Conf::dbdir/meta/old_meta-$metadata{'Name'}");
fetchfile("meta/meta-$metadata{'Name'}", "");
} }move("$Conf::cachedir/meta-$metadata{'Name'}", "$Conf::dbdir/meta/meta-$metadata{'Name'}"); }
@@ -429,12 +414,11 @@ sub dblist { # filter may be: all, notinstalled, installed my $filter = shift; my $forweb = shift;
- my @meta; my @updatepaks; my $file; my $line; my $prog;
- my ($name, $version, $release);
my %metadata; my @templine;
### Make sure that the list is not outdated.
@@ -470,30 +454,16 @@ sub dblist { next if ( $file eq "." ); next if ( $file eq ".." ); next if ( $file =~ /^old/ );
open(FILE, "<$Conf::dbdir/installed/$file");
@meta = <FILE>;
close(FILE);
foreach $line (@meta) {
@templine = split(/\: /,$line);
if ("$templine[0]" eq "Name") {
$name = $templine[1];
chomp($name);
} elsif ("$templine[0]" eq "ProgVersion") {
$version = $templine[1];
chomp($version);
} elsif ("$templine[0]" eq "Release") {
$release = $templine[1];
chomp($release);
}
}
%metadata = parsemetafile("$Conf::dbdir/installed/$file");
foreach $prog (@db) { @templine = split(/\;/,$prog);
if (("$name" eq "$templine[0]") && ("$release" < "$templine[2]" && "$forweb" ne "notice")) {
push(@updatepaks,$name);
if (("$metadata{'Name'}" eq "$templine[0]") && ("$metadata{'Release'}" < "$templine[2]" && "$forweb" ne "notice")) {
push(@updatepaks,$metadata{'Name'}); if ("$forweb" eq "forweb") {
print "<option value=\"$name\">Update: $name -- Version: $version -> $templine[1] -- Release: $release -> $templine[2]</option>\n";
print "<option value=\"$metadata{'Name'}\">Update: $metadata{'Name'} -- Version: $metadata{'ProgVersion'} -> $templine[1] -- Release: $metadata{'Release'} -> $templine[2]</option>\n"; } else {
my $command = "Update: $name\nVersion: $version -> $templine[1]\nRelease: $release -> $templine[2]\n";
my $command = "Update: $metadata{'Name'}\nVersion: $metadata{'ProgVersion'} -> $templine[1]\nRelease: $metadata{'Release'} -> $templine[2]\n"; if ("$Pakfire::enable_colors" eq "1") { print "$color{'lila'}$command$color{'normal'}\n"; } else {
@@ -548,18 +518,9 @@ sub resolvedeps_one {
message("PAKFIRE RESV: $pak: Resolving dependencies...");
- open(FILE, "<$Conf::dbdir/meta/meta-$pak");
- my @file = <FILE>;
- close(FILE);
- my $line;
- my (@templine, @deps, @all);
- foreach $line (@file) {
@templine = split(/\: /,$line);
if ("$templine[0]" eq "Dependencies") {
@deps = split(/ /, $templine[1]);
}
- }
- my %metadata = parsemetafile("$Conf::dbdir/meta/meta-$pak");
- my @all;
- my @deps = split(/ /, $metadata{'Dependencies'}); chomp (@deps); foreach (@deps) { if ($_) {
@@ -679,20 +640,40 @@ sub getsize {
getmetafile("$pak");
- open(FILE, "<$Conf::dbdir/meta/meta-$pak");
- my @file = <FILE>;
- if (my %metadata = parsemetafile("$Conf::dbdir/meta/meta-$pak")) {
return $metadata{'Size'};
- }
- return 0;
+}
+sub parsemetafile {
- ### This subroutine returns a hash with the contents of a meta- file
- # Pass path to metafile as argument: Pakfire::parsemetafile("$Conf::dbdir/meta/meta-$pak")
- # Usage is always with an argument.
- my $metafile = shift;
- my %metadata = ();
- my @templine;
- my @file;
- if (! -e $metafile ) {
return 0;
- }
- open(FILE, "<$metafile");
- @file = <FILE>; close(FILE);
- my $line;
- my @templine;
- foreach $line (@file) {
@templine = split(/\: /,$line);
if ("$templine[0]" eq "Size") {
- foreach (@file) {
@templine = split(/\: /,$_);
if ($templine[1]) { chomp($templine[1]);
return $templine[1];
} }$metadata{"$templine[0]"} = $templine[1];
- return 0;
- return %metadata;
}
sub decryptpak { @@ -715,20 +696,8 @@ sub getpak {
getmetafile("$pak");
- open(FILE, "<$Conf::dbdir/meta/meta-$pak");
- my @file = <FILE>;
- close(FILE);
- my $line;
- my $file;
- my @templine;
- foreach $line (@file) {
@templine = split(/\: /,$line);
if ("$templine[0]" eq "File") {
chomp($templine[1]);
$file = $templine[1];
}
- }
my %metadata = parsemetafile("$Conf::dbdir/meta/meta-$pak");
my $file = $metadata{'File'};
unless ($file) { message("No filename given in meta-file.");