Просмотр исходного кода

Dpkg::Shlibs::Symbol::equals(): improve, make more general.

Now the function accepts named options and allows to optionally skip
comparision of versioning info (minver/dep_id) and tags. However,
by default, it compares all non-internal symbol properties.
Modestas Vainius лет назад: 16
Родитель
Сommit
4a9c97d4d7
2 измененных файлов с 22 добавлено и 13 удалено
  1. 21 12
      scripts/Dpkg/Shlibs/Symbol.pm
  2. 1 1
      scripts/Dpkg/Shlibs/SymbolFile.pm

+ 21 - 12
scripts/Dpkg/Shlibs/Symbol.pm

@@ -253,23 +253,32 @@ sub get_tag_value {
     return $self->{tags}{$tag};
 }
 
-# Checks if the symbol is equal to another one (by name and tag set)
+# Checks if the symbol is equal to another one (by name and optionally,
+# tag sets, versioning info (minver and depid))
 sub equals {
-    my ($self, $other) = @_;
+    my ($self, $other, %opts) = @_;
 
-    # Compare names and tag sets
     return 0 if $self->{symbol} ne $other->{symbol};
-    return 0 if scalar(@{$self->{tagorder}}) != scalar(@{$other->{tagorder}});
-
-    for (my $i = 0; $i < scalar(@{$self->{tagorder}}); $i++) {
-	my $tag = $self->{tagorder}->[$i];
-	return 0 if $tag ne $other->{tagorder}->[$i];
-	if (defined $self->{tags}{$tag} && defined $other->{tags}{$tag}) {
-	    return 0 if $self->{tags}{$tag} ne defined $other->{tags}{$tag};
-	} elsif (defined $self->{tags}{$tag} || defined $other->{tags}{$tag}) {
-	    return 0;
+
+    if (!exists $opts{versioning} || $opts{versioning}) {
+	return 0 if $self->{minver} ne $other->{minver};
+	return 0 if $self->{dep_id} ne $other->{dep_id};
+    }
+
+    if  (!exists $opts{tags} || $opts{tags}) {
+	return 0 if scalar(@{$self->{tagorder}}) != scalar(@{$other->{tagorder}});
+
+	for (my $i = 0; $i < scalar(@{$self->{tagorder}}); $i++) {
+	    my $tag = $self->{tagorder}->[$i];
+	    return 0 if $tag ne $other->{tagorder}->[$i];
+	    if (defined $self->{tags}{$tag} && defined $other->{tags}{$tag}) {
+		return 0 if $self->{tags}{$tag} ne defined $other->{tags}{$tag};
+	    } elsif (defined $self->{tags}{$tag} || defined $other->{tags}{$tag}) {
+		return 0;
+	    }
 	}
     }
+
     return 1;
 }
 

+ 1 - 1
scripts/Dpkg/Shlibs/SymbolFile.pm

@@ -504,7 +504,7 @@ sub lookup_pattern {
 	} elsif ($refpat->get_pattern_type() eq "generic") {
 	    for my $p (@{$object->{patterns}{generic}}) {
 		if (($inc_deprecated || !$p->{deprecated}) &&
-		    $p->equals($refpat))
+		    $p->equals($refpat, versioning => 0))
 		{
 		    $pat = $p;
 		    last;