[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[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: