418
415
next if ( $file =~ /^old/ );
419
416
%metadata = parsemetafile("$Conf::dbdir/meta/$file");
421
if ((defined $paklist{"$metadata{'Name'}"}) && (
422
("$paklist{\"$metadata{'Name'}\"}{'Release'}" ne "$metadata{'Release'}") ||
423
(defined $paklist{"$metadata{'Name'}"}{'AvailableRelease'}))
425
move("$Conf::dbdir/meta/meta-$metadata{'Name'}","$Conf::dbdir/meta/old_meta-$metadata{'Name'}");
426
getmetafile($metadata{'Name'});
418
foreach $prog (@db) {
419
@templine = split(/\;/,$prog);
420
if (("$metadata{'Name'}" eq "$templine[0]") && ("$metadata{'Release'}" ne "$templine[2]")) {
421
move("$Conf::dbdir/meta/meta-$metadata{'Name'}","$Conf::dbdir/meta/old_meta-$metadata{'Name'}");
422
fetchfile("meta/meta-$metadata{'Name'}", "");
423
move("$Conf::cachedir/meta-$metadata{'Name'}", "$Conf::dbdir/meta/meta-$metadata{'Name'}");
432
### This subroutine returns core db version information in a hash.
433
# Usage is without arguments
435
eval(`grep "core_" $Conf::dbdir/lists/core-list.db`);
438
CoreVersion => $Conf::version,
439
Release => $Conf::core_mine,
442
$coredb{'AvailableRelease'} = $core_release if ("$Conf::core_mine" < "$core_release");
448
### This subroutine returns the packages from the packages_list db in a hash.
449
# It uses the currently cached version of packages_list. To ensure latest
450
# data, run Pakfire::dbgetlist first.
451
# You may also pass a filter: &Pakfire::dblist(filter)
452
# Usage is always with one argument.
454
# - "all": list all known paks,
455
# - "notinstalled": list only not installed paks,
456
# - "installed": list only installed paks
457
# - "upgrade": list only upgradable paks
459
# Returned hash format:
460
# ( "<pak name>" => (
461
# "Installed" => "Yes" or "No" wether the pak is installed,
462
# "ProgVersion" => Installed program version when "Installed" => "Yes" or
463
# Available version when "Installed" => No,
464
# "Release" => Installed pak release number when "Installed" => "Yes" or
465
# Available pak release number when "Installed" => No,
466
# "AvailableProgVersion" => Available program version.
467
# Only defined if an upgrade to a higher version is available,
468
# "AvailableRelease" => Available pak release version.
469
# Only defined if an upgrade to a higher version is available
430
### This subroutine lists the packages.
431
# You may also pass a filter: &Pakfire::dblist(filter)
432
# Usage is always with two arguments.
433
# filter may be: all, notinstalled, installed
474
434
my $filter = shift;
443
### Make sure that the list is not outdated.
444
#dbgetlist("noforce");
481
446
open(FILE, "<$Conf::dbdir/lists/packages_list.db");
485
if ("$filter" ne "notinstalled") {
450
if ("$filter" eq "upgrade") {
451
if ("$forweb" ne "forweb" && "$forweb" ne "notice" ) {getcoredb("noforce");}
452
eval(`grep "core_" $Conf::dbdir/lists/core-list.db`);
453
if ("$core_release" > "$Conf::core_mine") {
454
if ("$forweb" eq "forweb") {
455
print "<option value=\"core\">Core-Update -- $Conf::version -- Release: $Conf::core_mine -> $core_release</option>\n";
457
elsif ("$forweb" eq "notice") {
458
print "<br /><br /><br /><a href='pakfire.cgi'>$Lang::tr{'core notice 1'} $Conf::core_mine $Lang::tr{'core notice 2'} $core_release $Lang::tr{'core notice 3'}</a>";
460
my $command = "Core-Update $Conf::version\nRelease: $Conf::core_mine -> $core_release\n";
461
if ("$Pakfire::enable_colors" eq "1") {
462
print "$color{'lila'}$command$color{'normal'}\n";
486
469
opendir(DIR,"$Conf::dbdir/installed");
487
470
my @files = readdir(DIR);
490
472
foreach $file (@files) {
491
473
next if ( $file eq "." );
492
474
next if ( $file eq ".." );
493
475
next if ( $file =~ /^old/ );
494
476
%metadata = parsemetafile("$Conf::dbdir/installed/$file");
496
foreach $line (@db) {
497
next unless ($line =~ /.*;.*;.*;/ );
498
@templine = split(/\;/,$line);
499
if (("$metadata{'Name'}" eq "$templine[0]") && ("$metadata{'Release'}" < "$templine[2]")) {
500
# Add all upgradable paks to list
501
$paklist{"$metadata{'Name'}"} = {
502
ProgVersion => $metadata{'ProgVersion'},
503
Release => $metadata{'Release'},
504
AvailableProgVersion => $templine[1],
505
AvailableRelease => $templine[2],
509
} elsif (("$metadata{'Name'}" eq "$templine[0]") && ("$filter" ne "upgrade")) {
510
# Add installed paks without an upgrade available to list
511
$paklist{"$metadata{'Name'}"} = {
512
ProgVersion => $metadata{'ProgVersion'},
513
Release => $metadata{'Release'},
478
foreach $prog (@db) {
479
@templine = split(/\;/,$prog);
480
if (("$metadata{'Name'}" eq "$templine[0]") && ("$metadata{'Release'}" < "$templine[2]" && "$forweb" ne "notice")) {
481
push(@updatepaks,$metadata{'Name'});
482
if ("$forweb" eq "forweb") {
483
print "<option value=\"$metadata{'Name'}\">Update: $metadata{'Name'} -- Version: $metadata{'ProgVersion'} -> $templine[1] -- Release: $metadata{'Release'} -> $templine[2]</option>\n";
485
my $command = "Update: $metadata{'Name'}\nVersion: $metadata{'ProgVersion'} -> $templine[1]\nRelease: $metadata{'Release'} -> $templine[2]\n";
486
if ("$Pakfire::enable_colors" eq "1") {
487
print "$color{'lila'}$command$color{'normal'}\n";
522
# Add all not installed paks to list
523
if (("$filter" ne "upgrade") && ("$filter" ne "installed")) {
524
foreach $line (@db) {
501
foreach $line (sort @db) {
525
502
next unless ($line =~ /.*;.*;.*;/ );
526
504
@templine = split(/\;/,$line);
527
next if ((defined $paklist{"$templine[0]"}) || (&isinstalled($templine[0]) == 0));
529
$paklist{"$templine[0]"} = {
530
ProgVersion => "$templine[1]",
531
Release => "$templine[2]",
505
if ("$filter" eq "notinstalled") {
506
next if ( -e "$Conf::dbdir/installed/meta-$templine[0]" );
507
} elsif ("$filter" eq "installed") {
508
next unless ( -e "$Conf::dbdir/installed/meta-$templine[0]" );
511
if ("$forweb" eq "forweb")
513
if ("$filter" eq "notinstalled") {
514
print "<option value=\"$templine[0]\">$templine[0]-$templine[1]-$templine[2]</option>\n";
516
print "<option value=\"$templine[0]\">$templine[0]</option>\n";
519
if ("$Pakfire::enable_colors" eq "1") {
520
if (&isinstalled("$templine[0]")) {
521
$use_color = "$color{'red'}"
523
$use_color = "$color{'green'}"
526
print "${use_color}Name: $templine[0]\nProgVersion: $templine[1]\nRelease: $templine[2]$color{'normal'}\n\n";
529
print "$count packages total.\n" unless ("$forweb" eq "forweb");
540
533
sub resolvedeps_one {
543
538
message("PAKFIRE RESV: $pak: Resolving dependencies...");
545
unless (getmetafile("$pak")) {
546
message("PAKFIRE ERROR: Error retrieving dependency information on $pak. Unable to resolve dependencies.");
550
540
my %metadata = parsemetafile("$Conf::dbdir/meta/meta-$pak");
552
542
my @deps = split(/ /, $metadata{'Dependencies'});
702
695
return %metadata;
706
### This subroutine returns a hash of available info for a package
707
# Pass package name and type of info as argument: Pakfire::getmetadata(package, type_of_info)
708
# Type_of_info can be "latest" or "installed"
709
# Usage is always with two argument.
710
my ($pak, $type) = @_;
716
my %installed_metadata = ();
721
### Get available version information
722
if ("$type" eq "latest") {
723
### Check if package is in packages_list and get latest available version
724
my %db = Pakfire::dblist("all");
726
if (defined $db{$pak}) {
727
### Get and parse latest available metadata
728
if (getmetafile("$pak")) {
729
%metadata = parsemetafile("$Conf::dbdir/meta/meta-$pak");
731
$metadata{'Available'} = "yes";
732
### Rename version info fields
733
$metadata{'AvailableProgVersion'} = delete $metadata{'ProgVersion'};
734
$metadata{'AvailableRelease'} = delete $metadata{'Release'};
739
### Parse installed pak metadata
740
if (&isinstalled($pak) == 0) {
741
%installed_metadata = parsemetafile("$Conf::dbdir/installed/meta-$pak");
743
if ("$type" eq "latest" && exists($metadata{'AvailableProgVersion'})) {
744
### Add installed version info to latest metadata
745
$metadata{'ProgVersion'} = $installed_metadata{'ProgVersion'};
746
$metadata{'Release'} = $installed_metadata{'Release'};
748
### Use metadata of installed pak
749
%metadata = %installed_metadata;
751
$metadata{'Installed'} = 'yes';
753
$metadata{'Installed'} = 'no';
825
758
sub upgradecore {
826
# Safety check for lazy testers:
827
# Before we upgrade to the latest release, we re-install the previous release
828
# to make sure that the tester has always been on the latest version.
829
my $tree = &get_tree();
830
$Conf::core_mine-- if ($tree eq "testing" || $tree eq "unstable");
832
message("CORE UPGR: Upgrading from release $Conf::core_mine to $core_release");
834
my @seq = ($Conf::core_mine .. $core_release);
837
foreach $release (@seq) {
839
getpak("core-upgrade-$release");
842
foreach $release (@seq) {
844
upgradepak("core-upgrade-$release");
847
system("echo $core_release > $Conf::coredir/mine");
759
getcoredb("noforce");
760
eval(`grep "core_" $Conf::dbdir/lists/core-list.db`);
761
if ("$core_release" > "$Conf::core_mine") {
762
# Safety check for lazy testers:
763
# Before we upgrade to the latest release, we re-install the previous release
764
# to make sure that the tester has always been on the latest version.
765
my $tree = &get_tree();
766
$Conf::core_mine-- if ($tree eq "testing" || $tree eq "unstable");
768
message("CORE UPGR: Upgrading from release $Conf::core_mine to $core_release");
770
my @seq = `seq $Conf::core_mine $core_release`;
773
foreach $release (@seq) {
775
getpak("core-upgrade-$release");
778
foreach $release (@seq) {
780
upgradepak("core-upgrade-$release");
783
system("echo $core_release > $Conf::coredir/mine");
786
message("CORE ERROR: No new upgrades available. You are on release $Conf::core_mine.");
850
790
sub isinstalled {
977
### This subroutine returns pakfire status information in a hash.
978
# Usage is without arguments
980
# Add core version info
981
my %status = &Pakfire::coredbinfo();
983
# Add last update info
984
$status{'LastUpdate'} = &General::age("/opt/pakfire/db/core/mine");
985
$status{'LastCoreListUpdate'} = &General::age("/opt/pakfire/db/lists/core-list.db");
986
$status{'LastServerListUpdate'} = &General::age("/opt/pakfire/db/lists/server-list.db");
987
$status{'LastPakListUpdate'} = &General::age("/opt/pakfire/db/lists/packages_list.db");
989
# Add number of available package updates
990
$status{'CoreUpdateAvailable'} = (defined $status{'AvailableRelease'}) ? "yes" : "no";
991
$status{'PakUpdatesAvailable'} = &Pakfire::updates_available();
993
# Add if reboot is required
994
$status{'RebootRequired'} = &Pakfire::reboot_required();
928
my $return = "Core-Version: $Conf::version\n";
929
$return .= "Core-Update-Level: $Conf::core_mine\n";
930
$return .= "Last update: " . &General::age("/opt/pakfire/db/core/mine") . " ago\n";
931
$return .= "Last core-list update: " . &General::age("/opt/pakfire/db/lists/core-list.db") . " ago\n";
932
$return .= "Last server-list update: " . &General::age("/opt/pakfire/db/lists/server-list.db") . " ago\n";
933
$return .= "Last packages-list update: " . &General::age("/opt/pakfire/db/lists/packages_list.db") . " ago\n";
935
# Get availability of core updates
936
$return .= "Core-Update available: " . &Pakfire::coreupdate_available() . "\n";
938
# Get availability of package updates
939
$return .= "Package-Updates available: " . &Pakfire::updates_available() . "\n";
941
# Test if reboot is required
942
$return .= "Reboot required: " . &Pakfire::reboot_required() . "\n";
1000
950
# Append architecture
1001
951
my ($sysname, $nodename, $release, $version, $machine) = POSIX::uname();
953
# We only support armv6l for 32 bit arm
954
if ($machine =~ m/armv[67]/) {
1003
958
return $machine;