X-Git-Url: https://git.deb.at/?a=blobdiff_plain;f=lib%2FPackages%2FSrcPage.pm;h=62e8f7f62d289fd4c9f34c2f92c302d53bc8a549;hb=e9e5399ad699b724ed7d236b43f76b3ff85050bd;hp=aaee2a909919f1a4f207ca6f924a48fb97850894;hpb=f46c14dbc13274569f533b19e27c61960ea9bacd;p=deb%2Fpackages.git diff --git a/lib/Packages/SrcPage.pm b/lib/Packages/SrcPage.pm index aaee2a9..62e8f7f 100644 --- a/lib/Packages/SrcPage.pm +++ b/lib/Packages/SrcPage.pm @@ -12,37 +12,29 @@ our @ISA = qw( Packages::Page ); #FIXME: change parameters so that we can use the version from Packages::Page sub merge_data { - my ($self, $pkg, $version, $data) = @_; - - my %data = ( package => $pkg, - version => $version, - ); - chomp($data); - $data =~ s/\n\s+/\377/g; - while ($data =~ /^(\S+):\s*(.*)\s*$/mg) { - my ($key, $value) = ($1, $2); - $key =~ tr [A-Z] [a-z]; - $data{$key} = $value; - } -# debug( "Merge package:\n".Dumper(\%data), 3 ); + my ($self, $pkg, $suite, $archive, $data) = @_; + + my %data = split /\00/o, $data; + $data{package} = $pkg; + $data{suite} = $suite; + $data{archive} = $archive; + return $self->merge_package( \%data ); } -sub gettext { return $_[0]; } - our @DEP_FIELDS = qw( build-depends build-depends-indep build-conflicts build-conflicts-indep); sub merge_package { my ($self, $data) = @_; - ($data->{package} && $data->{version}) || return; + ($data->{package} && $data->{suite} && $data->{archive}) || return; $self->{package} ||= $data->{package}; ($self->{package} eq $data->{package}) || return; - debug( "merge package $data->{package}/$data->{version} into $self (".($self->{version}||'').")", 2 ); + debug( "merge package $data->{package}/$data->{version} into $self (".($self->{version}||'').")", 2 ) if DEBUG; if (!$self->{version} || (version_cmp( $data->{version}, $self->{version} ) > 0)) { - debug( "added package is newer, replacing old information" ); + debug( "added package is newer, replacing old information" ) if DEBUG; $self->{data} = $data; @@ -62,12 +54,8 @@ sub merge_package { $self->{uploaders} = \@uploaders; if ($data->{files}) { - $self->{files} = []; - foreach my $sf ( split( /\377/, $data->{files} ) ) { - next unless $sf; - # md5, size, name - push @{$self->{files}}, [ split( /\s+/, $sf) ]; - } + my @files = split /\01/so, $data->{files}; + $self->{files} = \@files; } foreach (@DEP_FIELDS) { @@ -76,6 +64,8 @@ sub merge_package { $self->{version} = $data->{version}; } + + return 1; } #FIXME: should be mergable with the Packages::Page version @@ -121,7 +111,31 @@ sub get_version_string { sub get_dep_field { my ($self, $dep_field) = @_; - return $self->{dep_fields}{$dep_field}[1]; + my @deps; + foreach my $dep (@{$self->{dep_fields}{$dep_field}[1]}) { + my @or_deps; + foreach my $or_dep ( @$dep ) { + my $p_name = $or_dep->[0]; + my $p_version = $or_dep->[1] ? "$or_dep->[1] $or_dep->[2]" : undef; + my $arch_neg; + my $arch_str = ''; + if ($or_dep->[3] && @{$or_dep->[3]}) { + # as either all or no archs have to be prepended with + # exlamation marks, use the first and delete the others + if ($or_dep->[3][0] =~ /^!/) { + $arch_neg = 1; + foreach (@{$or_dep->[3]}) { + $_ =~ s/^!//go; + } + } + $arch_str = join(" ",sort(@{$or_dep->[3]})); + } + + push @or_deps, [ $p_name, $p_version, $arch_neg, $arch_str ]; + } + push @deps, [ 0, @or_deps ]; + } + return \@deps; } 1;