[libconfig-model-dpkg-perl] 07/07: improve dual dependency and << requirement
dod at debian.org
dod at debian.org
Mon Aug 21 17:54:31 UTC 2017
This is an automated email from the git hooks/post-receive script.
dod pushed a commit to branch master
in repository libconfig-model-dpkg-perl.
commit 0ffb04736130480d1e9d38adcc62d34629c266e6
Author: Dominique Dumont <dod at debian.org>
Date: Mon Aug 21 19:53:54 2017 +0200
improve dual dependency and << requirement
---
lib/Config/Model/Dpkg/Dependency.pm | 86 +++++++++++++++++++------------
t/dependency-check.t | 24 +++++----
t/model_tests.d/dpkg-control-test-conf.pl | 10 ++--
t/model_tests.d/dpkg-test-conf.pl | 2 +-
4 files changed, 73 insertions(+), 49 deletions(-)
diff --git a/lib/Config/Model/Dpkg/Dependency.pm b/lib/Config/Model/Dpkg/Dependency.pm
index e949f26..b24b62c 100644
--- a/lib/Config/Model/Dpkg/Dependency.pm
+++ b/lib/Config/Model/Dpkg/Dependency.pm
@@ -505,14 +505,13 @@ sub check_perl_lib_dep {
$logger->debug("called for $dep_name with $actual_dep with apply_fix $apply_fix");
my ($old_perl_dep) = grep { $_->{name} eq 'perl' } @$input;
- my $old_perl_versioned_op = $old_perl_dep->{dep}[0] ;
- my $old_perl_versioned_dep = $old_perl_dep->{dep}[1] ;
+ my $old_perl_versioned_dep = $old_perl_dep->{dep}[1] // '';
# The dependency should be in the form perl (>= 5.10.1) | libtest-simple-perl (>= 0.88)".
# cf http://pkg-perl.alioth.debian.org/policy.html#debian_control_handling
# If the Perl version is not available in sid, the order of the dependency should be reversed
# libcpan-meta-perl | perl (>= 5.13.10)
- # because buildd will use the first available alternative
+ # because Debian build daemons use the first available alternative
# check for dual life module, module name follows debian convention...
my $cpan_name = $debian_map{$dep_name};
@@ -565,6 +564,7 @@ sub check_perl_lib_dep {
version->parse( $cpan_dep_v )
);
+ # return when module is not and was never part of core
return 1 unless defined $v_decimal;
my $v_normal = version->new($v_decimal)->normal;
@@ -574,45 +574,60 @@ sub check_perl_lib_dep {
$logger->debug("dual life $dep_str found in Perl core $v_normal (req perl is $old_perl_versioned_dep)");
}
- if ( not defined $dep_v and $old_perl_versioned_dep ) {
+ if ( not defined $dep_v and $old_perl_versioned_dep and $old_perl_versioned_dep gt $v_decimal) {
# when alternate lib version is not defined (because the requirement is satisfied by all
# available versions of the lib), the actual requirement is held by the versioned dep of perl
# hence, it must be preserved
- $logger->debug("preserving old perl versioned dep $old_perl_versioned_dep instead of $v_normal"
- ." for $dep_name");
+ my $p_data = Module::CoreList->find_version($v_decimal);
+ $dep_v = $p_data->{$cpan_name};
+ $depend->{dep} = [ '>=', $dep_v ];
+ $logger->debug("preserving old perl versioned dep $old_perl_versioned_dep instead of $v_normal"
+ ." for $dep_name (implies dep > $dep_v)");
$v_normal = $old_perl_versioned_dep;
}
- my ($has_older_perl) = $self->check_versioned_dep( { name => 'perl', dep => ['>=', $v_normal]} );
- if ((not defined $old_perl_versioned_op or $old_perl_versioned_op =~ />/) and not $deprecated) {
- $ideal_perl_dep{name} = 'perl';
+
+ my ($has_older_perl) = $self->check_versioned_dep( { name => 'perl', dep => ['>=', $v_normal]} );
+ my ($has_older_lib) = $self->check_versioned_dep( $depend );
+
+ # Perl module is being or was removed from core
+ if ($deprecated or $removed) {
if ( $has_older_perl ) {
- my $oper = $old_perl_versioned_op // '>=';
- $logger->debug("Found older perl for a greater-than perl dep. Ideal perl dep is 'perl $oper $v_normal'");
- $ideal_perl_dep{dep} = [ $oper, $v_normal ];
+ my $max_ver_normal = version->new($deprecated)->normal ;
+ $max_ver_normal =~ s/^v//;
+ $logger->debug("Found older perl for a soon to be removed lib. Using perl << $max_ver_normal dependency'");
+ $ideal_perl_dep{name} = 'perl';
+ $ideal_perl_dep{dep} = [ '<<', $max_ver_normal ];
}
else {
- $logger->debug("Did no find older perl for a greater-than perl dep. Ideal perl dep is plain 'perl'");
+ # e.g. perl (<< 5.8.0) i.e. lower than obsolete perl -> remove dependency from ideal perl dep
+ $logger->debug("Did not find older perl for an obsolete module. Perl dep should be removed");
}
- }
- if (defined $old_perl_versioned_op and $old_perl_versioned_op =~ /</) {
+ # always specify the library dependency
+ $ideal_lib_dep{name} = $dep_name;
+ $ideal_lib_dep{dep} = [ '>=', $dep_v ] if $dep_v and $has_older_lib;
+
+ }
+ else {
+ # Perl module is part of core (this was tested before)
+ $ideal_perl_dep{name} = 'perl';
if ( $has_older_perl ) {
- $logger->debug("Found older perl for a lower-than perl dep. Ideal perl dep is 'perl $old_perl_versioned_op $v_normal'");
- $ideal_perl_dep{name} = 'perl';
- $ideal_perl_dep{dep} = [ $old_perl_versioned_op, $v_normal ];
+ $logger->debug("Found older perl for a greater-than perl dep. Ideal perl dep is 'perl >= $v_normal'");
+ $ideal_perl_dep{dep} = [ '>=', $v_normal ];
}
else {
- # e.g. perl (<< 5.8.0)m i.e. lower than obsolete perl -> remove dependency from ideal perl dep
- $logger->debug("Did not find older perl for a lower-than perl dep. Perl dep should be removed");
+ $logger->debug("Did no find older perl for a greater-than perl dep. Ideal perl dep is plain 'perl'");
}
- }
- # we assume that lib dep is always >= ...
- if ($removed or $deprecated or $has_older_perl) {
- my ($has_older_lib) = $self->check_versioned_dep( $depend );
+ # we need to specify the libray dependency even this one has no
+ # version requirement and the dependency is satisfied by Perl core
+ # because dual dependency will eventually be removed. Better keep this info
$ideal_lib_dep{name} = $dep_name;
- $ideal_lib_dep{dep} = [ '>=', $dep_v ] if $dep_v and $has_older_lib;
+
+ if ($dep_v) {
+ $ideal_lib_dep{dep} = [ '>=', $dep_v ] if $dep_v and $has_older_lib;
+ }
}
my %perl_version = $self->get_available_version( 'perl');
@@ -624,10 +639,13 @@ sub check_perl_lib_dep {
"older than perl in sid ($sid_perl_version)"
);
- my @ordered_ideal_dep
- = $removed || $deprecated ? ( \%ideal_lib_dep, \%ideal_perl_dep )
- : $has_older_perl_in_sid ? ( \%ideal_perl_dep, \%ideal_lib_dep )
- : ( \%ideal_lib_dep, \%ideal_perl_dep ) ;
+ my $perl_dep_first = $has_older_perl_in_sid && ! $deprecated;
+
+ my @pre_ordered_ideal_dep
+ = $perl_dep_first ? ( \%ideal_perl_dep, \%ideal_lib_dep )
+ : ( \%ideal_lib_dep, \%ideal_perl_dep ) ;
+
+ my @ordered_ideal_dep = grep {defined $_->{name} } @pre_ordered_ideal_dep;
my $ideal_dep = $self->struct_to_dep( @ordered_ideal_dep );
@@ -637,21 +655,21 @@ sub check_perl_lib_dep {
if ( $actual_dep ne $ideal_dep ) {
my $msg = "Dependency of dual life package should be '$ideal_dep' not '$actual_dep'";
if ($apply_fix) {
- @$input = grep {defined $_->{name} } @ordered_ideal_dep ; # notify_change called in check_value
+ @$input = @ordered_ideal_dep ; # notify_change called in check_value
if ($logger->is_info) {
- $logger->info("fixed dependency with: $ideal_dep, was ". $self->struct_to_dep($depend));
+ $logger->info("fixed dependency with: '$ideal_dep', was '$actual_dep'");
}
push $msgs->@*, $msg;
}
else {
$self->{nb_of_fixes}++;
my $msg = "Dependency of dual life package should be '$ideal_dep' not '$actual_dep'";
+ if ($deprecated) {
+ $msg .= " (deprecated from perl $deprecated)" ;
+ }
if ($removed) {
$msg .= " (removed from perl $removed)" ;
}
- elsif ($deprecated) {
- $msg .= " (deprecated from perl $deprecated)" ;
- }
$self->add_warning ($msg);
$logger->info("will warn: $msg (fix++)");
}
diff --git a/t/dependency-check.t b/t/dependency-check.t
index b575611..47ea1df 100644
--- a/t/dependency-check.t
+++ b/t/dependency-check.t
@@ -5,7 +5,7 @@ BEGIN {
# of getting values through the internet
no warnings 'once';
%Config::Model::Dpkg::Dependency::cache = (
- 'libarchive-extract-perl' => 'jessie 0.68-1 sid 0.68-1',
+ 'libarchive-extract-perl' => 'squeeze 0.65-1 jessie 0.68-1 sid 0.68-1',
'perl-modules' => 'lenny 5.10.0-19lenny3 squeeze 5.10.1-17 sid 5.10.1-17 experimental 5.12.0-2 experimental 5.12.2-2',
'perl' => 'squeeze 5.10.1-17 wheezy 5.14.2-21 jessie 5.18.1-3 sid 5.18.1-4',
'debhelper' => 'etch 5.0.42 backports/etch 7.0.15~bpo40+2 lenny 7.0.15 backports/lenny 8.0.0~bpo50+2 squeeze 8.0.0 wheezy 8.1.2 sid 8.1.2',
@@ -218,19 +218,23 @@ my @chain_tests = (
=> [ { name => 'libcpan-meta-perl'}]
=> [ { name => 'perl', dep => [qw/>= 5.13.10/]} ,{ name => 'libcpan-meta-perl'}],
+ 'libcpan-meta-perl (>= 2.101550)'
+ => [ { name => 'libcpan-meta-perl', dep => [qw/>= 2.101550/]}]
+ => [ { name => 'perl', dep => [qw/>= 5.13.10/]} ,{ name => 'libcpan-meta-perl'}],
+
'libmodule-build-perl perl 5.10'
=> [ { name => 'perl', dep => [qw/>= 5.10/]}, { name => 'libmodule-build-perl'}]
- => [ { name => 'libmodule-build-perl'}],
+ => [ { name => 'libmodule-build-perl'} ],
'libmodule-build-perl perl-modules 5.10'
=> [ { name => 'perl-modules', dep => [qw/>= 5.10/]}, { name => 'libmodule-build-perl'}]
- => [ { name => 'libmodule-build-perl'}],
+ => [ { name => 'libmodule-build-perl'}, { name => 'perl', dep => [qw/<< 5.19.0/]} ],
# test Debian #719225
- 'libarchive-extract-perl'
+ 'libarchive-extract-perl >= 0.68'
=> [ { name => 'libarchive-extract-perl', dep => [qw/>= 0.68/]} ,
- { name => 'perl', dep => [qw/perl >= 5.17.9/]} ]
- => [ { name => 'libarchive-extract-perl'} ,],
+ { name => 'perl', dep => [qw/<< 5.17.9/]} ]
+ => 1,
'libarchive-extract-perl'
=> [ { name => 'perl', dep => [qw/>= 5.17.9/] }, { name => 'libarchive-extract-perl'} ]
@@ -239,7 +243,7 @@ my @chain_tests = (
'libmodule-build-perl to fix'
=> [ { name => 'perl', dep => [qw/>= 5.11.3/]},
{ name => 'libmodule-build-perl', dep => [qw/>= 0.360000/ ]}]
- => [ { name => 'libmodule-build-perl'} ] ,
+ => [ { name => 'libmodule-build-perl'}, { name => 'perl', dep => [qw/<< 5.19.0/]} ] ,
# test that cme does not restrict needlessly the alternate Perl version
'libmodule-metadata-perl to fix'
@@ -252,14 +256,14 @@ my @chain_tests = (
# test for #682730
'module removed from corelist - 1 '
=> [ { name => 'libclass-isa-perl'}, { name => 'perl', dep => [qw/<< 5.11.1-13/]} ]
- => 1,
+ => [ { name => 'libclass-isa-perl'}, { name => 'perl', dep => [qw/<< 5.11.0/]} ],
'module removed from corelist - 2'
=> [ { name => 'libclass-isa-perl'}, { name => 'perl', dep => [qw/<< 5.08.1-13/]} ]
=> [ { name => 'libclass-isa-perl'} ],
'module part of core perl forever'
=> [ { name => 'libtest-simple-perl' } ]
- => [ { name => 'perl' } ],
+ => [ { name => 'perl' }, { name => 'libtest-simple-perl' } ],
);
@@ -401,7 +405,7 @@ is($perl_bdi->has_fixes,2, "test presence of fixes");
is($perl_bdi->has_fixes,0, "test that fixes are gone");
is($perl_bdi->has_warning,0,"check that warnings are gone");
-is($perl_bdi->fetch,"libmodule-build-perl","check fixed B-D-I dependency value");
+is($perl_bdi->fetch,"libmodule-build-perl | perl (<< 5.19.0)","check fixed B-D-I dependency value");
print scalar $inst->list_changes,"\n" if $trace ;
is($inst->c_count, 1,"check that fixes are tracked with notify changes") ;
diff --git a/t/model_tests.d/dpkg-control-test-conf.pl b/t/model_tests.d/dpkg-control-test-conf.pl
index 3b2d7b2..0da1651 100644
--- a/t/model_tests.d/dpkg-control-test-conf.pl
+++ b/t/model_tests.d/dpkg-control-test-conf.pl
@@ -20,10 +20,12 @@ providing the following file:
check => {
'source Source', "libdist-zilla-plugins-cjm-perl",
'source Build-Depends:0', "debhelper (>= 7)",
- 'source Build-Depends-Indep:0', "libcpan-meta-perl | perl (>= 5.13.10)", # fixed
+ # not really happy about the versioned dep of libmeta-cpan-perl created ex-nihilo.
+ # this is a side effect of other compromises in dual dependency handling which should be harmless
+ 'source Build-Depends-Indep:0', "libcpan-meta-perl (>= 2.110440) | perl (>= 5.13.10)", # fixed
'source Build-Depends-Indep:1', "libdist-zilla-perl", # fixed
'source Build-Depends-Indep:5', "libpath-class-perl",
- 'source Build-Depends-Indep:6', "libmodule-build-perl (>= 0.360000)", # fixed
+ 'source Build-Depends-Indep:6', "libmodule-build-perl (>= 0.360000) | perl (<< 5.19.0)", # fixed
'source Build-Depends-Indep:7', "udev [linux-any] | makedev [linux-any]",
'source X-Comment' => qr/Debian #810023/,
'binary:libdist-zilla-plugins-cjm-perl X-Comment' => qr/Debian #810023/,
@@ -135,8 +137,8 @@ providing the following file:
{
# test for #682730
name => 'libclass-meta-perl',
- load_warnings => [ ( qr/Vcs-Git/) x 2 ],
- check => { 'source Build-Depends-Indep:1' => 'libclass-isa-perl | perl (<< 5.10.1-13)' },
+ load_warnings => [ qr/dual life/, ( qr/Vcs-Git/) x 2, qr/dual life/ ],
+ check => { 'source Build-Depends-Indep:1' => 'libclass-isa-perl | perl (<< 5.11.0)' },
apply_fix => 1,
},
{
diff --git a/t/model_tests.d/dpkg-test-conf.pl b/t/model_tests.d/dpkg-test-conf.pl
index 8bb0027..1c7adf7 100644
--- a/t/model_tests.d/dpkg-test-conf.pl
+++ b/t/model_tests.d/dpkg-test-conf.pl
@@ -74,7 +74,7 @@ sub add {
apply_fix => 1 ,
check => {
'control source Build-Depends-Indep:0' => 'perl',
- 'control source Build-Depends-Indep:1' => 'perl (>= 5.9.5) | libversion-perl',
+ 'control source Build-Depends-Indep:1' => 'perl (>= 5.9.5) | libversion-perl (>= 0.7203)',
# check that duplicated dependency is removed
'control source Build-Depends-Indep:2' => 'libdist-zilla-perl',
'bugfiles:libversion bug-script' => qr/dummy script/,
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libconfig-model-dpkg-perl.git
More information about the Pkg-perl-cvs-commits
mailing list