[lintian] 02/03: L::Relation: Add a restriction_less method
This is an automated email from the git hooks/post-receive script.
nthykier pushed a commit to branch master
in repository lintian.
commit 6afef010f28e0f5f1e867e42c5aaa374de24fc9b
Author: Niels Thykier <niels@thykier.net>
Date: Sat Feb 6 08:24:47 2016 +0000
L::Relation: Add a restriction_less method
Signed-off-by: Niels Thykier <niels@thykier.net>
---
lib/Lintian/Collect/Source.pm | 21 +++++----------------
lib/Lintian/Relation.pm | 27 +++++++++++++++++++++++++++
2 files changed, 32 insertions(+), 16 deletions(-)
diff --git a/lib/Lintian/Collect/Source.pm b/lib/Lintian/Collect/Source.pm
index 040fb14..e0312c8 100644
--- a/lib/Lintian/Collect/Source.pm
+++ b/lib/Lintian/Collect/Source.pm
@@ -537,30 +537,19 @@ sub relation {
=item relation_noarch (FIELD)
The same as L</relation (FIELD)>, but ignores architecture
-restrictions in the FIELD field.
+restrictions and build profile restrictions in the FIELD field.
-Needs-Info requirements for using I<relation_noarch>: L<Same as field|Lintian::Collect/field ([FIELD[, DEFAULT]])>
+Needs-Info requirements for using I<relation_noarch>: L<Same as relation|Lintian::Collect/relation (FIELD)>
=cut
sub relation_noarch {
my ($self, $field) = @_;
$field = lc $field;
- return $self->{relation_noarch}->{$field}
- if exists $self->{relation_noarch}->{$field};
+ return $self->{relation_noarch}{$field}
+ if exists $self->{relation_noarch}{$field};
- my $result;
- if ($field =~ /^build-(depends|conflicts)-all$/) {
- my $type = $1;
- my @fields = ("build-$type", "build-$type-indep", "build-$type-arch");
- $result
- = Lintian::Relation->and(map { $self->relation_noarch($_) } @fields);
- } elsif ($field =~ /^build-(depends|conflicts)(?:-(?:arch|indep))?$/) {
- my $value = $self->field($field);
- $result = Lintian::Relation->new_noarch($value);
- } else {
- croak("unknown relation field $field");
- }
+ my $result = $self->relation($field)->restriction_less;
$self->{relation_noarch}{$field} = $result;
return $result;
}
diff --git a/lib/Lintian/Relation.pm b/lib/Lintian/Relation.pm
index 63805fb..9ec7520 100644
--- a/lib/Lintian/Relation.pm
+++ b/lib/Lintian/Relation.pm
@@ -357,6 +357,33 @@ sub duplicates {
} keys %dups;
}
+=item restriction_less()
+
+Returns a restriction-less variant of this relation (or this relation
+object if it has no restrictions).
+
+=cut
+
+sub restriction_less {
+ my ($self) = @_;
+ my @worklist = ($self);
+ my $has_restrictions = 0;
+ while (my $current = pop(@worklist)) {
+ my $rel_type = $current->[0];
+ if ($rel_type eq 'PRED') {
+ if (defined($current->[4]) or defined($current->[6])) {
+ $has_restrictions = 1;
+ last;
+ }
+ next;
+ }
+ next if $rel_type eq 'PRED-UNPARSABLE';
+ push(@worklist, @$current[1 .. $#$current]);
+ }
+ return $self if not $has_restrictions;
+ return Lintian::Relation->new_norestriction($self->unparse);
+}
+
=item implies(RELATION)
Returns true if the relationship implies RELATION, meaning that if the
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/lintian/lintian.git
Reply to: