Packages::DoNewPkg: Support new backend format
[deb/packages.git] / lib / Packages / DoNewPkg.pm
1 package Packages::DoNewPkg;
2
3 use strict;
4 use warnings;
5
6 use POSIX;
7 use CGI ();
8 use Exporter;
9 our @ISA = qw( Exporter );
10 our @EXPORT = qw( do_newpkg );
11
12 use Packages::I18N::Locale;
13 use Packages::Search qw( :all );
14 use Packages::CGI;
15 use Packages::DB;
16 use Packages::Config qw( $TOPDIR @SECTIONS $ROOT );
17
18 sub do_newpkg {
19     my ($params, $opts, $page_content) = @_;
20
21     if ($params->{errors}{suite}) {
22         fatal_error( _g( "suite not valid or not specified" ) );
23     }
24     if (@{$opts->{suite}} > 1) {
25         fatal_error( sprintf( _g( "more than one suite specified for newpkg (%s)" ), "@{$opts->{suite}}" ) );
26     }
27
28     my $sort_func = sub { $_[0][0] cmp $_[1][0] };
29     $sort_func = sub { $_[0][1] <=> $_[1][1] or $_[0][0] cmp $_[1][0] }
30         if $opts->{mode} eq 'byage';
31
32     my $suite = $opts->{suite}[0];
33     my $one_archive = @{$opts->{archive}} == 1 ?
34         $opts->{archive}[0] : undef;
35     my $one_section = @{$opts->{section}} == 1 ?
36         $opts->{section}[0] : undef;
37
38     my @new_pkgs;
39     open NEWPKG, '<', "$TOPDIR/files/packages/newpkg_info_$suite"
40         or do {
41             warn "can't read newpkg_info_$suite: $!";
42             fatal_error( sprintf( _g("no newpkg information found for suite %s"),
43                                   $suite) );
44             return;
45     };
46     while (<NEWPKG>) {
47         chomp;
48         my @data = split /\s/, $_, 11;
49
50         next unless $data[2]; #removed packages
51         next unless $data[3] eq $suite;
52         next if $one_archive and $data[2] ne $one_archive;
53         next if $one_section and $data[5] ne $one_section;
54
55         debug( "new pkg: @data", 1 ) if DEBUG;
56         push @new_pkgs, \@data;
57     }
58     close NEWPKG;
59     
60     (my @date)= gmtime();
61     #FIXME: compute in the template
62     $page_content->{rss_timestamp} = strftime ("%Y-%m-%dT%H:%M+00:00", @date);
63
64     if (@new_pkgs) {
65         $page_content->{new_packages} = [ sort { &$sort_func($a,$b) } @new_pkgs ];
66     }
67
68     $page_content->{suite} = $suite;
69     $page_content->{section} = $one_section if $one_section;
70     $page_content->{archive} = $one_archive if $one_archive;
71     $page_content->{sections} = \@SECTIONS;
72
73 }
74
75 1;