]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 192054: Bugzilla dependencies upgrade messages in wrong order
authormkanat%bugzilla.org <>
Wed, 21 Mar 2007 02:36:45 +0000 (02:36 +0000)
committermkanat%bugzilla.org <>
Wed, 21 Mar 2007 02:36:45 +0000 (02:36 +0000)
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> (module owner) a=mkanat

Bugzilla/Install/Requirements.pm

index 4c62564d7874014cd80968df8ff37d40a012cc48..07729554cc7387487466da117957b13b8ed7f813 100644 (file)
@@ -106,6 +106,12 @@ sub OPTIONAL_MODULES {
         version => '1.20',
         feature => 'Graphical Reports, New Charts, Old Charts'
     },
+    {
+        package => 'Chart',
+        module  => 'Chart::Base',
+        version => '1.0',
+        feature => 'New Charts, Old Charts'
+    },
     {
         package => 'Template-GD',
         # This module tells us whether or not Template-GD is installed
@@ -114,12 +120,6 @@ sub OPTIONAL_MODULES {
         version => 0,
         feature => 'Graphical Reports'
     },
-    {
-        package => 'Chart',
-        module  => 'Chart::Base',
-        version => '1.0',
-        feature => 'New Charts, Old Charts'
-    },
     {
         package => 'GDGraph',
         module  => 'GD::Graph',
@@ -264,7 +264,7 @@ sub check_requirements {
 
     print "\n", install_string('checking_modules'), "\n" if $output;
     my $root = ROOT_USER;
-    my %missing = _check_missing(REQUIRED_MODULES, $output);
+    my $missing = _check_missing(REQUIRED_MODULES, $output);
 
     print "\n", install_string('checking_dbd'), "\n" if $output;
     my $have_one_dbd = 0;
@@ -275,19 +275,19 @@ sub check_requirements {
     }
 
     print "\n", install_string('checking_optional'), "\n" if $output;
-    my %missing_optional = _check_missing(OPTIONAL_MODULES, $output);
+    my $missing_optional = _check_missing(OPTIONAL_MODULES, $output);
 
     # If we're running on Windows, reset the input line terminator so that
     # console input works properly - loading CGI tends to mess it up
     $/ = "\015\012" if ON_WINDOWS;
 
-    my $pass = !scalar(keys %missing) && $have_one_dbd;
+    my $pass = !scalar(@$missing) && $have_one_dbd;
     return {
         pass     => $pass,
         one_dbd  => $have_one_dbd,
-        missing  => \%missing,
-        optional => \%missing_optional,
-        any_missing => !$pass || scalar(keys %missing_optional),
+        missing  => $missing,
+        optional => $missing_optional,
+        any_missing => !$pass || scalar(@$missing_optional),
     };
 }
 
@@ -295,14 +295,14 @@ sub check_requirements {
 sub _check_missing {
     my ($modules, $output) = @_;
 
-    my %missing;
+    my @missing;
     foreach my $module (@$modules) {
         unless (have_vers($module, $output)) {
-            $missing{$module->{package}} = $module;
+            push(@missing, $module);
         }
     }
 
-    return %missing;
+    return \@missing;
 }
 
 sub print_module_instructions {
@@ -337,7 +337,7 @@ EOT
     }
 
     # Required Modules
-    if (my %missing = %{$check_results->{missing}}) {
+    if (my @missing = @{$check_results->{missing}}) {
         print <<EOT;
 ***********************************************************************
 * REQUIRED MODULES                                                    *
@@ -351,8 +351,8 @@ EOT
 EOT
 
         print "COMMANDS:\n\n";
-        foreach my $package (keys %missing) {
-            my $command = install_command($missing{$package});
+        foreach my $package (@missing) {
+            my $command = install_command($package);
             print "    $command\n";
         }
         print "\n";
@@ -386,7 +386,7 @@ EOT
 
     return unless $output;
 
-    if (my %missing = %{$check_results->{optional}}) {
+    if (my @missing = @{$check_results->{optional}}) {
         print <<EOT;
 **********************************************************************
 * OPTIONAL MODULES                                                   *
@@ -402,12 +402,8 @@ EOT
 **********************************************************************
 
 EOT
-        # We want to sort them so that they are ordered by feature.
-        my @missing_names = sort {$missing{$a}->{feature} 
-                                  cmp $missing{$b}->{feature}} (keys %missing);
-
         # Now we have to determine how large the table cols will be.
-        my $longest_name = max(map(length($_), @missing_names));
+        my $longest_name = max(map(length($_->{package}), @missing));
 
         # The first column header is at least 11 characters long.
         $longest_name = 11 if $longest_name < 11;
@@ -420,16 +416,16 @@ EOT
         printf "* \%${longest_name}s * %-${remaining_space}s *\n",
                'MODULE NAME', 'ENABLES FEATURE(S)';
         print '*' x 71 . "\n";
-        foreach my $name (@missing_names) {
+        foreach my $package (@missing) {
             printf "* \%${longest_name}s * %-${remaining_space}s *\n",
-                   $name, $missing{$name}->{feature};
+                   $package->{package}, $package->{feature};
         }
         print '*' x 71 . "\n";
 
         print "COMMANDS TO INSTALL:\n\n";
-        foreach my $module (@missing_names) {
-            my $command = install_command($missing{$module});
-            printf "%15s: $command\n", $module;
+        foreach my $module (@missing) {
+            my $command = install_command($module);
+            printf "%15s: $command\n", $module->{package};
         }
     }
 }
@@ -549,7 +545,6 @@ sub install_command {
     return sprintf $command, $package;
 }
 
-
 1;
 
 __END__
@@ -581,26 +576,46 @@ represent the name of the module and the version that we require.
 
 =over 4
 
-=item C<check_requirements($output)>
-
- Description: This checks what optional or required perl modules
-              are installed, like C<checksetup.pl> does.
-
- Params:      C<$output> - C<true> if you want the function to print
-                           out information about what it's doing,
-                           and the versions of everything installed.
-                           If you don't pass the minimum requirements,
-                           the will always print out something, 
-                           regardless of this parameter.
-
- Returns:    A hashref containing three values:
-             C<pass> - Whether or not we have all the mandatory 
-                       requirements.
-             C<missing> - A hash showing which mandatory requirements
-                          are missing. The key is the module name,
-                          and the value is the version we require.
-             C<optional> - Which optional modules are installed and
-                           up-to-date enough for Bugzilla.
+=item C<check_requirements>
+
+=over
+
+=item B<Description>
+
+This checks what optional or required perl modules are installed, like
+C<checksetup.pl> does.
+
+=item B<Params>
+
+=over
+
+=item C<$output> - C<true> if you want the function to print out information
+about what it's doing, and the versions of everything installed.
+
+=back
+
+=item B<Returns>
+
+A hashref containing these values:
+
+=over
+
+=item C<pass> - Whether or not we have all the mandatory requirements.
+
+=item C<missing> - An arrayref containing any required modules that
+are not installed or that are not up-to-date. Each item in the array is
+a hashref in the format of items from L</REQUIRED_MODULES>.
+
+=item C<optional> - The same as C<missing>, but for optional modules.
+
+=item C<have_one_dbd> - True if at least one C<DBD::> module is installed.
+
+=item C<any_missing> - True if there are any missing modules, even optional
+modules.
+
+=back
+
+=back
 
 =item C<check_graphviz($output)>