[Cpan-forum-commit] rev 172 - in trunk: . bin lib/CPAN lib/CPAN/Forum

svn at pti.co.il svn at pti.co.il
Fri Aug 25 18:15:52 IDT 2006


Author: gabor
Date: 2006-08-25 18:15:51 +0300 (Fri, 25 Aug 2006)
New Revision: 172

Modified:
   trunk/
   trunk/bin/populate.pl
   trunk/bin/upgrade_to_0_12.pl
   trunk/lib/CPAN/Forum.pm
   trunk/lib/CPAN/Forum/Posts.pm
Log:
make sure rss feed of single module and of a module author works



Property changes on: trunk
___________________________________________________________________
Name: svk:merge
   - 8c4c90e1-83eb-0310-96eb-e7cb62807872:/local/cpan-forum:10999
   + 8c4c90e1-83eb-0310-96eb-e7cb62807872:/local/cpan-forum:11000

Modified: trunk/bin/populate.pl
===================================================================
--- trunk/bin/populate.pl	2006-08-25 15:15:43 UTC (rev 171)
+++ trunk/bin/populate.pl	2006-08-25 15:15:51 UTC (rev 172)
@@ -16,13 +16,12 @@
 
 
 
-my %opts = (
-    dir      => "$Bin/../db",
-);
+my %opts;
 
 GetOptions(\%opts, "sendmail", "source=s", "dir=s", "fetch", "help") 
     or usage();
 usage() if $opts{help};
+usage() if not $opts{dir};
 
 sub usage {
     print <<"END_USAGE";
@@ -77,11 +76,14 @@
 foreach my $d (@distributions) {
 
     # skip scripts
-    next LINE if not $d->prefix or $d->prefix =~ m{^\w/\w\w/\w+/scripts/};   
+    if (not $d->prefix or $d->prefix =~ m{^\w/\w\w/\w+/scripts/}) {
+        warn "no prefix line $.\n";
+        next LINE;
+    }
 
     my $name        = $d->dist;
     if (not $name) {
-        #warn "No name: " . $d->prefix . "\n";
+        warn "No name: line: $. prefix:" . $d->prefix . "\n";
         next LINE;
     }
     
@@ -90,10 +92,28 @@
 
     my %new = (
         version => ($d->version() || ""),
-        pauseid => ($d->cpanid()  || ""),
     );
 
 
+    my $pauseid = ($d->cpanid()  || "");
+    my $p;
+    if ($pauseid) {
+        eval {
+            $p = CPAN::Forum::Authors->find_or_create({ pauseid => $pauseid });
+        };
+        if ($@) {
+            warn "$name\n";
+            warn $@;
+            next LINE;
+        }
+    }
+    if (not $p) {
+        warn "No PAUSEID?" . $d->prefix . "\n";
+        next LINE;
+    }
+    $new{pauseid} = $p->id;
+
+
     my ($g) = CPAN::Forum::Groups->search(name => $name);
     if ($g) {
         my $changed;
@@ -111,27 +131,20 @@
             }
         }
 
-        $g->update if $changed;
+        if ($changed) {
+            $g->update;
+        }
         next LINE;
     }
 
-    $message{new} .= sprintf "%s   %s\n", $name, $new{version}, $new{pauseid};
-    my $pause;
-    eval {
-        $pause = CPAN::Forum::Authors->find_or_create({ pauseid => $new{pauseid} });
-    };
-    if ($@) {
-        warn "$name\n";
-        warn $@;
-        next LINE;
-    }
+    $message{new} .= sprintf "Creating %s   %s\n", $name, $new{version}, $pauseid;
 
     eval {
         my $g = CPAN::Forum::Groups->create({
             name    => $name,
             gtype   => $CPAN::Forum::DBI::group_types{Distribution}, 
             version => $new{version},
-            pauseid => $pause->id,
+            pauseid => $new{pauseid},
         });
     };
     if ($@) {

Modified: trunk/bin/upgrade_to_0_12.pl
===================================================================
--- trunk/bin/upgrade_to_0_12.pl	2006-08-25 15:15:43 UTC (rev 171)
+++ trunk/bin/upgrade_to_0_12.pl	2006-08-25 15:15:51 UTC (rev 172)
@@ -55,4 +55,9 @@
 			announcements    BOOLEAN
 );
 
+CREATE TABLE authors (
+			id               INTEGER PRIMARY KEY,
+			pauseid          VARCHAR(100) UNIQUE NOT NULL
+);
 
+

Modified: trunk/lib/CPAN/Forum/Posts.pm
===================================================================
--- trunk/lib/CPAN/Forum/Posts.pm	2006-08-25 15:15:43 UTC (rev 171)
+++ trunk/lib/CPAN/Forum/Posts.pm	2006-08-25 15:15:51 UTC (rev 172)
@@ -15,6 +15,14 @@
 __PACKAGE__->set_sql(count_like   => "SELECT count(*) FROM __TABLE__ WHERE %s LIKE '%s'");
 #__PACKAGE__->add_constraint('subject_too_long', subject => sub { length $_[0] <= 70 and $_[0] !~ /</});
 #__PACKAGE__->add_constraint('text_format', text => \&check_text_format);
+__PACKAGE__->set_sql(post_by_pauseid => qq{
+                        SELECT posts.id id
+                        FROM posts
+                        WHERE gid IN (
+                            SELECT DISTINCT groups.id 
+                            FROM groups, authors
+                            WHERE groups.pauseid=authors.id and authors.pauseid=?)
+                        ORDER BY date DESC});
 
 sub retrieve_latest { 
     my ($class, $count) = @_;

Modified: trunk/lib/CPAN/Forum.pm
===================================================================
--- trunk/lib/CPAN/Forum.pm	2006-08-25 15:15:43 UTC (rev 171)
+++ trunk/lib/CPAN/Forum.pm	2006-08-25 15:15:51 UTC (rev 172)
@@ -2187,17 +2187,28 @@
 sub rss {
     my $self = shift;
     
-    my $cnt = $self->config("rss_size") || 10;
+    my $limit  = $self->config("rss_size") || 10;
     my @params = @{$self->param("path_parameters")};
     my $it;
-    if (@params > 1 and $params[0] eq "dist") {
-        my $dist = $params[1];
-        $self->log->debug("rss of dist: '$dist'");
-        my ($group) = CPAN::Forum::Groups->search({ name => $dist });
-        $it = CPAN::Forum::Posts->search(gid => $group->id, {order_by => 'date DESC'}),
-    } else {
-        $it = CPAN::Forum::Posts->retrieve_latest($cnt);
+    if (@params > 1) {
+        if ($params[0] eq 'dist') {
+            my $dist = $params[1];
+            $self->log->debug("rss of dist: '$dist'");
+            my ($group) = CPAN::Forum::Groups->search({ name => $dist });
+            $it = CPAN::Forum::Posts->search(gid => $group->id, {order_by => 'date DESC'});
+        }
+        elsif ($params[0] eq 'author') {
+            my $pauseid = uc $params[1];
+            $self->log->debug("rss of author: '$pauseid'");
+            $it = CPAN::Forum::Posts->search_post_by_pauseid($pauseid);
+        }
+        else {
+            $self->log->warnings("rss requested for $params[0]");
+        }
     }
+    else {
+        $it = CPAN::Forum::Posts->retrieve_latest($limit);
+    }
 
     require XML::RSS::SimpleGen;
     my $url = "http://$ENV{HTTP_HOST}/";
@@ -2209,7 +2220,7 @@
     $rss->webmaster($admin->email);
 
     my $prefix = "";
-    while (my $post = $it->next() and $cnt--) {
+    while (my $post = $it->next() and $limit--) {
         $rss->item($url. "posts/" . $post->id(), $prefix . $post->subject); # TODO _subject_escape ?
     }
 #   $rss->save("file.rss");



More information about the Cpan-forum-commit mailing list