+ return if $data->{'original-maintainer'};
+ return unless $data->{maintainer};
+
+ my ($name, $mail) = split_name_mail( $data->{maintainer} );
+
+ # taken from etc/pkgbinarymangler/maintainermangler.overrides
+ return if $mail =~ /\@(ubuntu\.com|canonical\.com|lists\.ubuntu\.com|lists\.canonical\.com|ubuntu\.com\.au|kubuntu\.org)^/o;
+ return if $mail =~ /^(lamont\@debian\.org|q-funk\@iki\.fi|cjwatson\@debian\.org|patrick\.matthaei\@web\.de)^/o;
+
+ if ($mail eq 'adconrad@0c3.net') {
+ $data->{maintainer} = 'Adam Conrad <adconrad@ubuntu.com>';
+ return 1;
+ }
+ if ($mail eq 'mpitt@debian.org') {
+ $data->{maintainer} = 'Martin Pitt <martin.pitt@ubuntu.com>';
+ return 1;
+ }
+
+ $data->{'original-maintainer'} = $data->{maintainer};
+ foreach ($data->{section}) {
+ /^(main|restricted)$/ && do {
+ $data->{maintainer} = 'Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>';
+ last;
+ };
+ /^(uni|multi)verse$/ && do {
+ $data->{maintainer} = 'Ubuntu MOTU Developers <ubuntu-motu@lists.ubuntu.com>';
+ last;
+ };
+
+ die 'Huh?';
+ }
+
+ return 1;
+}
+
+sub handle_maintainer_fields {
+ my ($self, $data) = @_;
+ my (@uploaders, @orig_uploaders);
+
+ if ($data->{'original-maintainer'}) {
+ push @orig_uploaders, [ split_name_mail( $data->{'original-maintainer'} ) ];
+
+ $data->{uploaders} ||= '';
+ my @up_tmp = split( /\s*,\s*/,
+ $data->{uploaders} );
+ foreach my $up (@up_tmp) {
+ push @orig_uploaders, [ split_name_mail( $up ) ];
+ }
+ if ($data->{maintainer} ||= '') {
+ push @uploaders, [ split_name_mail( $data->{maintainer} ) ];
+ }
+ } else {
+ if ($data->{maintainer} ||= '') {
+ if ($self->override_maint($data)) {
+ return $self->handle_maintainer_fields($data);
+ }
+
+ push @uploaders, [ split_name_mail( $data->{maintainer} ) ];
+ }
+ if ($data->{uploaders}) {
+ my @up_tmp = split( /\s*,\s*/,
+ $data->{uploaders} );
+ foreach my $up (@up_tmp) {
+ if ($up ne $data->{maintainer}) { # weed out duplicates
+ push @uploaders, [ split_name_mail( $up ) ];
+ }
+ }
+ }
+ }
+
+ return (\@uploaders, \@orig_uploaders);
+}
+
+sub add_src_data {
+ my ($self, $src, $data) = @_;
+
+ my %data = split /\00/o, $data;
+
+ $self->{src}{package} = $src;
+ $self->{src}{version} = $data{version};
+ if ($data{files}) {
+ my @files = split /\01/so, $data{files};
+ $self->{src}{files} = \@files;
+ }
+ $self->{src}{directory} = $data{directory};
+ my ($uploaders, $orig_uploaders) = $self->handle_maintainer_fields(\%data);
+ $self->{src}{uploaders} = $uploaders;
+ $self->{src}{orig_uploaders} = $orig_uploaders if @$orig_uploaders;
+
+ return 1;
+}
+
+sub add_provided_by {
+ my ($self, $provided_by) = @_;
+
+ $self->{provided_by} ||= [];
+ push @{$self->{provided_by}}, @$provided_by;
+}
+
+sub is_virtual {
+ my ($self) = @_;
+
+ return (exists($self->{provided_by}) && !exists($self->{versions}));
+}
+
+our @TAKE_NEWEST = qw( description description-md5 essential priority section subsection tag
+ archive source source-version homepage maintainer original-maintainer uploaders);
+our @STORE_ALL = qw( version source source-version installed-size size
+ filename md5sum sha1 sha256 task