Skip to content

Commit

Permalink
Item12708: Fix dependency checking for configure
Browse files Browse the repository at this point in the history
Move the parsing of module versions into Foswiki:Configure::Dependency
so there is only one version with unit tests.

Eliminate any loading of modules to recover version strings.  This can
cause all sorts of issues to configure.

This resolves issues with not detecting pseudo-installed modules.

git-svn-id: http://svn.foswiki.org/trunk@17202 0b4bb1d4-4e5a-0410-9cc4-b2b747904278
  • Loading branch information
GeorgeClark authored and GeorgeClark committed Jan 4, 2014
1 parent 132db03 commit ed010d3
Show file tree
Hide file tree
Showing 7 changed files with 177 additions and 223 deletions.
4 changes: 2 additions & 2 deletions UnitTestContrib/test/unit/ConfigureTests.pm
Expand Up @@ -1556,8 +1556,8 @@ qr/^Foswiki::Contrib::OptionalDependency version >=14754 required(.*)^ -- perl m
);

#print "===== INSTALLED =======\n$installed\n";
$this->assert_matches( qr/^File::Spec(.*)loaded/ms, $installed,
'Installed module File::Spec' );
$this->assert_matches( qr/^File::Spec(.*)installed/ms,
$installed, 'Installed module File::Spec' );

#
# Now uninistall the package
Expand Down
54 changes: 29 additions & 25 deletions UnitTestContrib/test/unit/DependencyTests.pm
Expand Up @@ -44,7 +44,7 @@ sub test_check_dep_last_resort1 {
my ( $ok, $message ) = $dep->check();
$this->assert_equals( 1, $ok );
$this->assert_matches(
qr/Foswiki::Contrib::UnitTestContrib::LastResortWontLoad version v1.2.3_100 loaded/,
qr/Foswiki::Contrib::UnitTestContrib::LastResortWontLoad version v1.2.3_100 installed/,
$message
);
}
Expand Down Expand Up @@ -77,7 +77,7 @@ sub test_check_foswiki_rev {
);
my ( $ok, $message ) = $dep->check();
$this->assert_equals( 1, $ok );
$this->assert_matches( qr/^Foswiki version Foswiki-(.*) loaded$/,
$this->assert_matches( qr/^Foswiki version Foswiki-(.*) installed$/,
$message );

}
Expand All @@ -86,28 +86,28 @@ sub test_check_dep_carp {
my ($this) = @_;

# Check a normally installed dependency
# 1, Carp v1.03 loaded
# 1, Carp v1.03 installed
my $dep =
new Foswiki::Configure::Dependency( type => "cpan", module => "Carp" );
my ( $ok, $message ) = $dep->check();
$this->assert_equals( 1, $ok );
$this->assert_matches( qr/Carp version .* loaded/, $message );
$this->assert_matches( qr/Carp version .* installed/, $message );

}

sub test_check_dep_carp_with_version {
my ($this) = @_;

# Check a normally installed dependency
# 1, Carp v1.03 loaded
# 1, Carp v1.03 installed
my $dep = new Foswiki::Configure::Dependency(
type => "cpan",
module => "Carp",
version => 0.1
);
my ( $ok, $message ) = $dep->check();
$this->assert_equals( 1, $ok );
$this->assert_matches( qr/Carp version .* loaded/, $message );
$this->assert_matches( qr/Carp version .* installed/, $message );

}

Expand All @@ -134,31 +134,33 @@ sub test_check_dep_version_with_superior {
my ($this) = @_;

# Check a normal installed dependency with a superior sign
# 1, HTML::Parser v1.05 loaded
# 1, HTML::Parser v1.05 installed
my $dep = new Foswiki::Configure::Dependency(
type => "cpan",
module => "HTML::Parser",
version => ">=0.9"
);
my ( $ok, $message ) = $dep->check();
$this->assert_equals( 1, $ok );
$this->assert_matches( qr/HTML::Parser version \d+\.\d+ loaded/, $message );
$this->assert_matches( qr/HTML::Parser version \d+\.\d+ installed/,
$message );

}

sub test_check_dep_version_with_inferior {
my ($this) = @_;

# Check a normal installed dependency with an inferior
# 1, HTML::Parser v1.05 loaded
# 1, HTML::Parser v1.05 installed
my $dep = new Foswiki::Configure::Dependency(
type => "cpan",
module => "HTML::Parser",
version => "<21.1"
);
my ( $ok, $message ) = $dep->check();
$this->assert_equals( 1, $ok, $HTML::Parser::VERSION );
$this->assert_matches( qr/HTML::Parser version \d+\.\d+ loaded/, $message );
$this->assert_matches( qr/HTML::Parser version \d+\.\d+ installed/,
$message );

}

Expand All @@ -185,7 +187,7 @@ sub test_check_dep_version_with_rev {
my ($this) = @_;

# Check a normal installed dependency with a $Rev$ version number
# 1, Foswiki::Contrib::JSCalendarContrib v1234 loaded
# 1, Foswiki::Contrib::JSCalendarContrib v1234 installed
my $dep = new Foswiki::Configure::Dependency(
type => "perl",
module => "Foswiki::Plugins::SmiliesPlugin",
Expand All @@ -194,7 +196,7 @@ sub test_check_dep_version_with_rev {
my ( $ok, $message ) = $dep->check();
$this->assert_equals( 1, $ok, $message );
$this->assert_matches(
qr/Foswiki::Plugins::SmiliesPlugin version .* loaded/, $message );
qr/Foswiki::Plugins::SmiliesPlugin version .* installed/, $message );
$this->assert( $message =~ /version (\d+) /, $message );
my $revision = $1;
$this->assert( $revision ne '999999' );
Expand All @@ -204,7 +206,7 @@ sub test_check_dep_version_with_implied_svn {
my ($this) = @_;

# Check a normal installed dependency with a svn version number
# 1, Foswiki::Contrib::UnitTestContrib::MultiDottedVersion v1234 loaded
# 1, Foswiki::Contrib::UnitTestContrib::MultiDottedVersion v1234 installed
my $dep = new Foswiki::Configure::Dependency(
type => "perl",
module => "Foswiki::Contrib::UnitTestContrib::MultiDottedVersion",
Expand All @@ -213,8 +215,9 @@ sub test_check_dep_version_with_implied_svn {
my ( $ok, $message ) = $dep->check();
$this->assert_equals( 1, $ok, $message );
$this->assert_matches(
qr/Foswiki::Contrib::UnitTestContrib::MultiDottedVersion .* loaded/,
$message );
qr/Foswiki::Contrib::UnitTestContrib::MultiDottedVersion .* installed/,
$message
);
$this->assert( $message =~ /version (\d+) /, $message );
my $revision = $1;
$this->assert( $revision ne '999999' );
Expand All @@ -224,7 +227,7 @@ sub test_check_dep_version_with_explicit_svn {
my ($this) = @_;

# Check a normal installed dependency with a svn version number
# 1, Foswiki::Contrib::UnitTestContrib::MultiDottedVersion v1234 loaded
# 1, Foswiki::Contrib::UnitTestContrib::MultiDottedVersion v1234 installed
my $dep = new Foswiki::Configure::Dependency(
type => "perl",
module => "Foswiki::Contrib::UnitTestContrib::MultiDottedVersion",
Expand All @@ -233,8 +236,9 @@ sub test_check_dep_version_with_explicit_svn {
my ( $ok, $message ) = $dep->check();
$this->assert_equals( 1, $ok, $message );
$this->assert_matches(
qr/Foswiki::Contrib::UnitTestContrib::MultiDottedVersion .* loaded/,
$message );
qr/Foswiki::Contrib::UnitTestContrib::MultiDottedVersion .* installed/,
$message
);
$this->assert( $message =~ /version (\d+) /, $message );
my $revision = $1;
$this->assert( $revision ne '999999' );
Expand All @@ -244,7 +248,7 @@ sub test_check_dep_version_with_unsatisfied_explicit_svn {
my ($this) = @_;

# Check a normal installed dependency with a svn version number
# 1, Foswiki::Contrib::UnitTestContrib::MultiDottedVersion v1234 loaded
# 1, Foswiki::Contrib::UnitTestContrib::MultiDottedVersion v1234 installed
my $dep = new Foswiki::Configure::Dependency(
type => "perl",
module => "Foswiki::Contrib::UnitTestContrib::MultiDottedVersion",
Expand All @@ -265,7 +269,7 @@ sub test_check_dep_version_with_unsatisfied_svn {
my ($this) = @_;

# Check a normal installed dependency with a svn version number
# 1, Foswiki::Contrib::UnitTestContrib::MultiDottedVersion v1234 loaded
# 1, Foswiki::Contrib::UnitTestContrib::MultiDottedVersion v1234 installed
my $dep = new Foswiki::Configure::Dependency(
type => "perl",
module => "Foswiki::Contrib::UnitTestContrib::MultiDottedVersion",
Expand All @@ -286,7 +290,7 @@ sub test_check_dep_version_with_multi_part_number {
my ($this) = @_;

# Check a normal installed dependency with a 1.23.4 version number
# 1, Foswiki::Contrib::UnitTestContrib::MultiDottedVersion v1.23.4 loaded
# 1, Foswiki::Contrib::UnitTestContrib::MultiDottedVersion v1.23.4 installed
my $dep = new Foswiki::Configure::Dependency(
type => "perl",
module => "Foswiki::Contrib::UnitTestContrib::MultiDottedVersion",
Expand All @@ -295,7 +299,7 @@ sub test_check_dep_version_with_multi_part_number {
my ( $ok, $message ) = $dep->check();
$this->assert_equals( 1, $ok, $message );
$this->assert_matches(
qr/Foswiki::Contrib::UnitTestContrib::MultiDottedVersion version 1\.23\.4 loaded/,
qr/Foswiki::Contrib::UnitTestContrib::MultiDottedVersion version 1\.23\.4 installed/,
$message
);
}
Expand Down Expand Up @@ -328,16 +332,16 @@ sub test_check_dep_version_with_underscore {
my ($this) = @_;

# Check a normal installed dependency with a version number that includes _
# 1, Algorithm::Diff v1.19_01 loaded
# 1, Algorithm::Diff v1.19_01 installed
my $dep = new Foswiki::Configure::Dependency(
type => "perl",
module => "Algorithm::Diff",
version => ">=1.18_45"
);
my ( $ok, $message ) = $dep->check();
$this->assert_equals( 1, $ok );
$this->assert_matches( qr/Algorithm::Diff version \d+\.\d+(?:_\d+)? loaded/,
$message );
$this->assert_matches(
qr/Algorithm::Diff version \d+\.\d+(?:_\d+)? installed/, $message );

}

Expand Down
8 changes: 5 additions & 3 deletions core/lib/Foswiki/Configure/Checkers/CGISetup.pm
Expand Up @@ -13,6 +13,7 @@ use strict;
use warnings;

use Foswiki::Configure qw/:cgi :auth/;
use Foswiki::Configure::Dependency ();

use Foswiki::Configure::Checkers::AUDITGROUP;
our @ISA = qw(Foswiki::Configure::Checkers::AUDITGROUP);
Expand Down Expand Up @@ -472,7 +473,7 @@ sub getExecEnv {
local $Foswiki::Net::LWPAvailable = 0 && $Foswiki::Net::LWPAvailable;
local $Foswiki::Net::noHTTPResponse = 1 || $Foswiki::Net::noHTTPResponse;
unless ( defined $Foswiki::VERSION ) {
( my $fwi, $Foswiki::VERSION ) = Foswiki::Configure::UI::extractModuleVersion( 'Foswiki', 1 );
( my $fwi, $Foswiki::VERSION ) = Foswiki::Configure::Dependency::extractModuleVersion( 'Foswiki', 1 );
$Foswiki::Version = '0.0' unless ($fwi);
}

Expand Down Expand Up @@ -599,7 +600,8 @@ sub analyzeFoswiki {
$Foswiki::cfg{ConfigurationFinished} = 1; # Necessary?

my ( $fwinst, $fwver ) =
Foswiki::Configure::UI::extractModuleVersion( 'Foswiki', 'magic' );
Foswiki::Configure::Dependency::extractModuleVersion( 'Foswiki',
'magic' );
my $mess;
if ($fwinst) {
$mess = "Foswiki.pm (Version: <strong>$fwver</strong>) found";
Expand Down Expand Up @@ -890,7 +892,7 @@ s,\[\[(https?://[^\]]+)\]\[([^\]]+)\](?:\[[^\]]*\])?\],$dlink"$1">$2</a>,gms;
push @{ $info->{users} }, $who;
my $prevVer = $info->{minimumVersion};
$prevVer =~ s/(\d+(\.\d*)?).*/$1/;
$ver =~ s/(\d+(\.\d*)?).*/$1/;
$ver =~ s/(\d+(\.\d*)?).*/$1/;
if ( $ver > $prevVer ) {
$info->{minimumVersion} = $ver;
$info->{minVersionUser} = $who;
Expand Down
3 changes: 2 additions & 1 deletion core/lib/Foswiki/Configure/Checkers/ScriptUrlPaths.pm
Expand Up @@ -5,6 +5,7 @@ use strict;
use warnings;

use Foswiki::Configure qw/:cgi :auth/;
use Foswiki::Configure::Dependency ();

require Foswiki::Configure::Checkers::URLPATH;
our @ISA = ('Foswiki::Configure::Checkers::URLPATH');
Expand Down Expand Up @@ -120,7 +121,7 @@ sub testPath {
local $Foswiki::Net::noHTTPResponse = 1 || $Foswiki::Net::noHTTPResponse;

unless ( defined $Foswiki::VERSION ) {
( my $fwi, $Foswiki::VERSION ) = Foswiki::Configure::UI::extractModuleVersion( 'Foswiki', 1 );
( my $fwi, $Foswiki::VERSION ) = Foswiki::Configure::Dependency::extractModuleVersion( 'Foswiki', 1 );
$Foswiki::Version = '0.0' unless ($fwi);
}

Expand Down

0 comments on commit ed010d3

Please sign in to comment.