From cc595325d6dc7f5bbf398357cacaf490e40794f8 Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Fri, 7 Feb 2020 16:51:33 +0000 Subject: [PATCH] Bug 19735: Add support for max_ver This patchset adds support for extracting 'max_ver' from the cpanfile so we can use version ranges properly and report errors if we have modules installed that do not fit within that version range. Test plan: 1) Manually modify the module version of a required module in the cpanfile to have a max version greater than the version you have installed. 2) Run through the install proceedure and note the new warning that a module needs upgrade for the module in question. 3) The module should also be reported in the about page Signed-off-by: Jonathan Druart Signed-off-by: Martin Renvoize --- C4/Installer/PerlModules.pm | 12 ++++++- about.pl | 1 + installer/install.pl | 34 ++++++++++++++----- .../intranet-tmpl/prog/en/modules/about.tt | 2 +- .../prog/en/modules/installer/step1.tt | 16 ++++++++- 5 files changed, 54 insertions(+), 11 deletions(-) diff --git a/C4/Installer/PerlModules.pm b/C4/Installer/PerlModules.pm index f76bb4a38b..3f13c47ffd 100644 --- a/C4/Installer/PerlModules.pm +++ b/C4/Installer/PerlModules.pm @@ -60,10 +60,20 @@ sub versions_info { my $module_infos = { cur_ver => 0, - min_ver => $reqs->requirements_for_module($module), required => $type eq 'requires', }; + my $vers = $reqs->structured_requirements_for_module($module); + for my $req (@$vers) { + if ( $req->[0] eq '>=' || $req->[0] eq '>' ) { + $module_infos->{min_ver} = $req->[1]; + } elsif ( $req->[0] eq '<=' || $req->[0] eq '<' ) { + $module_infos->{max_ver} = $req->[1]; + } else { + push @{$module_infos->{exc_ver}}, $req->[1]; + } + } + my $attr; $Readonly::XS::MAGIC_COOKIE="Do NOT use or require Readonly::XS unless you're me."; diff --git a/about.pl b/about.pl index fa52ce41f0..184e9375db 100755 --- a/about.pl +++ b/about.pl @@ -558,6 +558,7 @@ foreach my $pm_type(@pm_types) { current => ($pm_type eq 'current_pm' ? 1 : 0), require => $stats->{'required'}, reqversion => $stats->{'min_ver'}, + maxversion => $stats->{'max_ver'} } ); } diff --git a/installer/install.pl b/installer/install.pl index c9e119d6bc..851accb319 100755 --- a/installer/install.pl +++ b/installer/install.pl @@ -101,24 +101,42 @@ if ( $step && $step == 1 ) { my $perl_modules = C4::Installer::PerlModules->new; $perl_modules->versions_info; - my $modules = $perl_modules->get_attr('missing_pm'); - if ( scalar(@$modules) ) { - my @components = (); - foreach (@$modules) { + my $missing_modules = $perl_modules->get_attr('missing_pm'); + my $upgrade_modules = $perl_modules->get_attr('upgrade_pm'); + if ( scalar(@$missing_modules) || scalar(@$upgrade_modules) ) { + my @missing = (); + my @upgrade = (); + foreach (@$missing_modules) { my ( $module, $stats ) = each %$_; $checkmodule = 0 if $stats->{'required'}; push( - @components, + @missing, { name => $module, - version => $stats->{'min_ver'}, + min_version => $stats->{'min_ver'}, + max_version => $stats->{'max_ver'}, require => $stats->{'required'} } ); } - @components = sort { $a->{'name'} cmp $b->{'name'} } @components; + foreach (@$upgrade_modules) { + my ( $module, $stats ) = each %$_; + $checkmodule = 0 if $stats->{'required'}; + push( + @upgrade, + { + name => $module, + min_version => $stats->{'min_ver'}, + max_version => $stats->{'max_ver'}, + require => $stats->{'required'} + } + ); + } + @missing = sort { $a->{'name'} cmp $b->{'name'} } @missing; + @upgrade = sort { $a->{'name'} cmp $b->{'name'} } @upgrade; $template->param( - missing_modules => \@components, + missing_modules => \@missing, + upgrade_modules => \@upgrade, checkmodule => $checkmodule, op => $op ); diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/about.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/about.tt index a67d4e5317..61927acbbc 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/about.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/about.tt @@ -168,7 +168,7 @@ [% END %] [% END %] [% IF ( ro.name ) %] - [% ro.name | html %] ([% ro.reqversion | html %]) + [% ro.name | html %] ([% ro.reqversion | html %][% IF ro.maxversion %] - [% ro.maxversion | html %][% END %]) [% END %] [% IF ( ro.name == '' ) %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/installer/step1.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/installer/step1.tt index 339af4fff3..d314036b99 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/installer/step1.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/installer/step1.tt @@ -61,7 +61,21 @@
    [% FOREACH missing_module IN missing_modules %]
  • [% missing_module.name | html %] [% IF ( missing_module.require ) %]Required[% END %] -
    Version: [% missing_module.version | html %] +
    Version: [% missing_module.min_version | html %] +
  • + [% END %] +
+ [% END %] + + [% IF ( upgrade_modules ) %] +

Web installer › Perl modules due for upgrade

+

Some Perl modules require upgrade. Important: Required modules must be installed at the correct version before you may continue.
+

    + [% FOREACH upgrade_module IN upgrade_modules %] +
  • [% upgrade_module.name | html %] [% IF ( upgrade_module.require ) %]Required[% END %] +
    Installed version: [% upgrade_module.version | html %] +
    Minimum version: [% upgrade_module.min_version | html %] +
    Maximum version: [% upgrade_module.max_version | html %]
  • [% END %]
-- 2.39.5