[Bps-public-commit] r19672 - in Net-Google-Code/branches/write: . lib/Net/Google lib/Net/Google/Code lib/Net/Google/Code/Issue lib/Net/Google/Code/Role t xt
sunnavy at bestpractical.com
sunnavy at bestpractical.com
Thu May 14 22:37:42 EDT 2009
Author: sunnavy
Date: Thu May 14 22:37:41 2009
New Revision: 19672
Added:
Net-Google-Code/branches/write/lib/Net/Google/Code/Role/Pageable.pm
Net-Google-Code/branches/write/t/sample/20.code.downloads.html
Removed:
Net-Google-Code/branches/write/lib/Net/Google/Code/Role.pm
Net-Google-Code/branches/write/t/sample/10.downloads.xml
Modified:
Net-Google-Code/branches/write/ (props changed)
Net-Google-Code/branches/write/Changes
Net-Google-Code/branches/write/MANIFEST
Net-Google-Code/branches/write/META.yml
Net-Google-Code/branches/write/Makefile.PL
Net-Google-Code/branches/write/lib/Net/Google/Code.pm
Net-Google-Code/branches/write/lib/Net/Google/Code/Download.pm
Net-Google-Code/branches/write/lib/Net/Google/Code/Issue.pm
Net-Google-Code/branches/write/lib/Net/Google/Code/Issue/Attachment.pm
Net-Google-Code/branches/write/lib/Net/Google/Code/Issue/Comment.pm
Net-Google-Code/branches/write/lib/Net/Google/Code/Issue/PropChange.pm
Net-Google-Code/branches/write/lib/Net/Google/Code/Issue/Search.pm
Net-Google-Code/branches/write/lib/Net/Google/Code/Role/Fetchable.pm
Net-Google-Code/branches/write/lib/Net/Google/Code/Role/URL.pm
Net-Google-Code/branches/write/lib/Net/Google/Code/Wiki.pm
Net-Google-Code/branches/write/t/20.code.t
Net-Google-Code/branches/write/xt/perlcritic.t
Log:
r21214 at sunnavys-mb (orig r19658): sunnavy | 2009-05-14 14:57:49 +0800
do *not* parse downloads via feeds: current feed only list 20 downloads, not all. this change results in the uselessness of XML::Atom requirement
r21215 at sunnavys-mb (orig r19659): sunnavy | 2009-05-14 15:38:33 +0800
make a Pageable role to encapsulate the action of getting all the rows in all the pages. ( currently we just want the list of 1st columns, which is like the primary key for each row)
r21216 at sunnavys-mb (orig r19660): sunnavy | 2009-05-14 15:43:37 +0800
no need to check inc/.author by ourselves any more
r21217 at sunnavys-mb (orig r19661): sunnavy | 2009-05-14 15:57:44 +0800
remove Role.pm
r21218 at sunnavys-mb (orig r19662): sunnavy | 2009-05-14 16:05:52 +0800
update version to 0.05
r21219 at sunnavys-mb (orig r19663): sunnavy | 2009-05-14 16:11:55 +0800
pod improve
Modified: Net-Google-Code/branches/write/Changes
==============================================================================
--- Net-Google-Code/branches/write/Changes (original)
+++ Net-Google-Code/branches/write/Changes Thu May 14 22:37:41 2009
@@ -1,5 +1,12 @@
Revision history for Net-Google-Code
+0.05 Thu May 14 16:00:07 CST 2009
+
+* load_downloads doesn't parse feed any more, instead, it parses the
+ downloads list page now.
+* added Role/Pageable.pm
+* removed Role.pm
+
0.04 Tue May 12 16:07:09 CST 2009
refactor version.
Modified: Net-Google-Code/branches/write/MANIFEST
==============================================================================
--- Net-Google-Code/branches/write/MANIFEST (original)
+++ Net-Google-Code/branches/write/MANIFEST Thu May 14 22:37:41 2009
@@ -19,8 +19,8 @@
lib/Net/Google/Code/Issue/Comment.pm
lib/Net/Google/Code/Issue/PropChange.pm
lib/Net/Google/Code/Issue/Search.pm
-lib/Net/Google/Code/Role.pm
lib/Net/Google/Code/Role/Fetchable.pm
+lib/Net/Google/Code/Role/Pageable.pm
lib/Net/Google/Code/Role/URL.pm
lib/Net/Google/Code/Wiki.pm
lib/Net/Google/Code/Wiki/Comment.pm
@@ -37,10 +37,10 @@
t/20.code.t
t/sample/02.issue.html
t/sample/10.download.html
-t/sample/10.downloads.xml
t/sample/11.TestPage.html
t/sample/11.TestPage.wiki
t/sample/11.wikis.html
+t/sample/20.code.downloads.html
t/sample/20.code.html
xt/kwalitee.t
xt/perlcritic.t
Modified: Net-Google-Code/branches/write/META.yml
==============================================================================
--- Net-Google-Code/branches/write/META.yml (original)
+++ Net-Google-Code/branches/write/META.yml Thu May 14 22:37:41 2009
@@ -22,7 +22,6 @@
Moose: 0
Params::Validate: 0
WWW::Mechanize: 0
- XML::Atom: 0
resources:
license: http://dev.perl.org/licenses/
-version: 0.04
+version: 0.05
Modified: Net-Google-Code/branches/write/Makefile.PL
==============================================================================
--- Net-Google-Code/branches/write/Makefile.PL (original)
+++ Net-Google-Code/branches/write/Makefile.PL Thu May 14 22:37:41 2009
@@ -12,7 +12,6 @@
requires 'WWW::Mechanize';
requires 'HTML::TreeBuilder';
requires 'Params::Validate';
-requires 'XML::Atom';
requires 'Term::ReadPassword';
recursive_author_tests('xt/');
Modified: Net-Google-Code/branches/write/lib/Net/Google/Code.pm
==============================================================================
--- Net-Google-Code/branches/write/lib/Net/Google/Code.pm (original)
+++ Net-Google-Code/branches/write/lib/Net/Google/Code.pm Thu May 14 22:37:41 2009
@@ -1,9 +1,15 @@
package Net::Google::Code;
use Moose;
-with 'Net::Google::Code::Role';
+with 'Net::Google::Code::Role::Fetchable', 'Net::Google::Code::Role::URL',
+ 'Net::Google::Code::Role::Pageable';
-our $VERSION = '0.04';
+our $VERSION = '0.05';
+
+has 'project' => (
+ isa => 'Str',
+ is => 'rw',
+);
has 'labels' => (
isa => 'ArrayRef',
@@ -111,26 +117,19 @@
sub load_downloads {
- my $self = shift;
-
- require XML::Atom::Feed;
- my $content = $self->fetch( $self->base_feeds_url . 'downloads/basic' );
- my $feed = XML::Atom::Feed->new( \$content );
- my @fentries = $feed->entries;
-
+ my $self = shift;
+ my $content = $self->fetch( $self->base_feeds_url . 'downloads/list' );
+ my @names = $self->first_columns( $content );
my @downloads;
- foreach my $entry (@fentries) {
- require Net::Google::Code::Download;
- my $title = $entry->title;
- # title is like: Net-Google-Code-0.01.tar.gz (37.4 KB)
- my ($filename) = ( $title =~ /^\s*(.+)\s+\(.+\)\s*$/ );
+ require Net::Google::Code::Download;
+ for my $name ( @names ) {
my $download = Net::Google::Code::Download->new(
project => $self->project,
- name => $filename
+ name => $name,
);
$download->load;
push @downloads, $download;
- }
+ }
$self->downloads( \@downloads );
}
Modified: Net-Google-Code/branches/write/lib/Net/Google/Code/Download.pm
==============================================================================
--- Net-Google-Code/branches/write/lib/Net/Google/Code/Download.pm (original)
+++ Net-Google-Code/branches/write/lib/Net/Google/Code/Download.pm Thu May 14 22:37:41 2009
@@ -3,7 +3,12 @@
use Moose;
use Params::Validate qw(:all);
-with 'Net::Google::Code::Role';
+with 'Net::Google::Code::Role::Fetchable', 'Net::Google::Code::Role::URL';
+
+has 'project' => (
+ isa => 'Str',
+ is => 'rw',
+);
has 'name' => (
isa => 'Str',
@@ -146,6 +151,8 @@
=item parse
+=item project
+
=item name
=item size
Modified: Net-Google-Code/branches/write/lib/Net/Google/Code/Issue.pm
==============================================================================
--- Net-Google-Code/branches/write/lib/Net/Google/Code/Issue.pm (original)
+++ Net-Google-Code/branches/write/lib/Net/Google/Code/Issue.pm Thu May 14 22:37:41 2009
@@ -1,10 +1,15 @@
package Net::Google::Code::Issue;
use Moose;
use Params::Validate qw(:all);
-with 'Net::Google::Code::Role';
+with 'Net::Google::Code::Role::Fetchable', 'Net::Google::Code::Role::URL';
use Net::Google::Code::Issue::Comment;
use Net::Google::Code::Issue::Attachment;
+has 'project' => (
+ isa => 'Str',
+ is => 'rw',
+);
+
has 'state' => (
isa => 'HashRef',
is => 'rw',
@@ -267,6 +272,8 @@
=item parse
+=item project
+
=item id
=item status
Modified: Net-Google-Code/branches/write/lib/Net/Google/Code/Issue/Attachment.pm
==============================================================================
--- Net-Google-Code/branches/write/lib/Net/Google/Code/Issue/Attachment.pm (original)
+++ Net-Google-Code/branches/write/lib/Net/Google/Code/Issue/Attachment.pm Thu May 14 22:37:41 2009
@@ -90,7 +90,7 @@
=head1 NAME
-Net::Google::Code::Issue::Attachment
+Net::Google::Code::Issue::Attachment - Issue's Attachment
=head1 DESCRIPTION
Modified: Net-Google-Code/branches/write/lib/Net/Google/Code/Issue/Comment.pm
==============================================================================
--- Net-Google-Code/branches/write/lib/Net/Google/Code/Issue/Comment.pm (original)
+++ Net-Google-Code/branches/write/lib/Net/Google/Code/Issue/Comment.pm Thu May 14 22:37:41 2009
@@ -84,7 +84,7 @@
=head1 NAME
-Net::Google::Code::Issue::Comment -
+Net::Google::Code::Issue::Comment - Issue's Comment
=head1 DESCRIPTION
Modified: Net-Google-Code/branches/write/lib/Net/Google/Code/Issue/PropChange.pm
==============================================================================
--- Net-Google-Code/branches/write/lib/Net/Google/Code/Issue/PropChange.pm (original)
+++ Net-Google-Code/branches/write/lib/Net/Google/Code/Issue/PropChange.pm Thu May 14 22:37:41 2009
@@ -13,7 +13,7 @@
=head1 NAME
-Net::Google::Code::Issue::PropChange -
+Net::Google::Code::Issue::PropChange - Issue's PropChange
=head1 DESCRIPTION
Modified: Net-Google-Code/branches/write/lib/Net/Google/Code/Issue/Search.pm
==============================================================================
--- Net-Google-Code/branches/write/lib/Net/Google/Code/Issue/Search.pm (original)
+++ Net-Google-Code/branches/write/lib/Net/Google/Code/Issue/Search.pm Thu May 14 22:37:41 2009
@@ -2,7 +2,13 @@
use Moose;
use Params::Validate qw(:all);
use Moose::Util::TypeConstraints;
-with 'Net::Google::Code::Role';
+with 'Net::Google::Code::Role::URL',
+ 'Net::Google::Code::Role::Fetchable', 'Net::Google::Code::Role::Pageable';
+
+has 'project' => (
+ isa => 'Str',
+ is => 'rw',
+);
our %CAN = (
'all' => 1,
@@ -41,10 +47,10 @@
if ( scalar @_ ) {
my %args = @_;
$self->_can( $args{_can} ) if defined $args{_can};
- $self->_q( $args{_q} ) if defined $args{_q};
+ $self->_q( $args{_q} ) if defined $args{_q};
}
- $self->fetch( $self->base_url . 'issues/list');
+ $self->fetch( $self->base_url . 'issues/list' );
my $mech = $self->mech;
$mech->submit_form(
form_number => 2,
@@ -53,64 +59,24 @@
'q' => $self->_q,
}
);
- die "Server threw an error "
- . $mech->response->status_line
- . 'when search'
+ die "Server threw an error " . $mech->response->status_line . 'when search'
unless $mech->response->is_success;
my $content = $mech->response->content;
if ( $mech->title =~ /Issue\s+(\d+)/ ) {
-# only get one ticket
- @{$self->ids} = $1;
- return 1;
+ # get only one ticket
+ $self->ids( [$1] );
}
elsif ( $mech->title =~ /Issues/ ) {
-# get a ticket list
- $self->ids([]); # clean previous ids
- my $tree = $self->html_tree;
- $tree->parse_content($content);
- my $pagination = $tree->look_down( class => 'pagination' );
- if ( my ( $start, $end, $total ) =
- $pagination->content_array_ref->[0] =~
- /(\d+)\s+-\s+(\d+)\s+of\s+(\d+)/ )
- {
-
- my @ids = $tree->look_down( class => 'vt id col_0' );
- @ids =
- map { $_->content_array_ref->[0]->content_array_ref->[0] } @ids;
- $self->ids( [ @{$self->ids}, @ids ] );
-
- while ( scalar @{$self->ids} < $total ) {
- if ($mech->follow_link( text_regex => qr/Next\s+/ ) ) {
- if ( $mech->response->is_success ) {
- my $content = $mech->content;
- my $tree = $self->html_tree;
- $tree->parse_content($content);
- my @ids = $tree->look_down( class => 'vt id col_0' );
- @ids =
- map {
- $_->content_array_ref->[0]->content_array_ref->[0]
- } @ids;
- $self->ids( [ @{$self->ids}, @ids ] );
- }
- else {
- die "failed to follow link: Next";
- }
- }
- else {
- # XXX sometimes google's result number is wrong. google--
- warn "didn't find enough tickets, sometimes it's google's fault instead of ours ;)";
- last;
- }
- }
- }
- return 1;
+ # get a ticket list
+ my @ids = $self->first_columns($content);
+ $self->ids( \@ids );
}
else {
warn "no idea what the content like";
- return
+ return;
}
}
@@ -122,14 +88,16 @@
=head1 NAME
-Net::Google::Code::Issue::Search -
+Net::Google::Code::Issue::Search - Issues Search API
=head1 DESCRIPTION
=head1 INTERFACE
-=head2 search ( _can => 'all', _q = 'foo' )
+=over 4
+
+=item search ( _can => 'all', _q = 'foo' )
search with values $self->_can and $self->_q if without arguments.
if there're arguments for _can or _q, this call will set $self->_can or
@@ -137,11 +105,14 @@
return true if search is successful, false on the other hand.
+=item project
-=head2 ids
+=item ids
this should be called after a successful search.
returns issue ids as a arrayref.
+=back
+
=head1 AUTHOR
sunnavy C<< <sunnavy at bestpractical.com> >>
Modified: Net-Google-Code/branches/write/lib/Net/Google/Code/Role/Fetchable.pm
==============================================================================
--- Net-Google-Code/branches/write/lib/Net/Google/Code/Role/Fetchable.pm (original)
+++ Net-Google-Code/branches/write/lib/Net/Google/Code/Role/Fetchable.pm Thu May 14 22:37:41 2009
@@ -48,7 +48,11 @@
=head1 INTERFACE
-=head2 fetch
+=over 4
+
+=item fetch
+
+=back
=head1 AUTHOR
Added: Net-Google-Code/branches/write/lib/Net/Google/Code/Role/Pageable.pm
==============================================================================
--- (empty file)
+++ Net-Google-Code/branches/write/lib/Net/Google/Code/Role/Pageable.pm Thu May 14 22:37:41 2009
@@ -0,0 +1,105 @@
+package Net::Google::Code::Role::Pageable;
+use Moose::Role;
+use Params::Validate ':all';
+use WWW::Mechanize;
+with 'Net::Google::Code::Role::Fetchable';
+use Scalar::Util qw/blessed/;
+no Moose::Role;
+
+sub first_columns {
+ my $self = shift;
+ my $html = shift;
+ my $tree;
+ if ( blessed $html ) {
+ $tree = $html;
+ }
+ else {
+ require HTML::TreeBuilder;
+ $tree = HTML::TreeBuilder->new;
+ $tree->parse_content($html);
+ $tree->elementify;
+ }
+
+ my @columns;
+
+ my $pagination = $tree->look_down( class => 'pagination' );
+ if ( my ( $start, $end, $total ) =
+ $pagination->as_text =~ /(\d+)\s+-\s+(\d+)\s+of\s+(\d+)/ )
+ {
+ push @columns, $self->_first_columns($tree);
+
+ while ( scalar @columns < $total ) {
+ if ( $self->mech->follow_link( text_regex => qr/Next\s+/ ) ) {
+ if ( $self->mech->response->is_success ) {
+ push @columns,
+ $self->_first_columns( $self->mech->content );
+ }
+ else {
+ die "failed to follow 'Next' link";
+ }
+ }
+ else {
+ warn "didn't find enough rows";
+ last;
+ }
+ }
+ }
+ return @columns;
+}
+
+sub _first_columns {
+ my $self = shift;
+ my $html = shift;
+ my $tree;
+ if ( blessed $html ) {
+ $tree = $html;
+ }
+ else {
+ require HTML::TreeBuilder;
+ $tree = HTML::TreeBuilder->new;
+ $tree->parse_content($html);
+ $tree->elementify;
+ }
+
+ my @columns;
+ my @tags = $tree->look_down( class => 'vt id col_0' );
+ for my $tag (@tags) {
+ my $column = $tag->as_text;
+ $column =~ s/^\s+//;
+ $column =~ s/\s+$//;
+ push @columns, $column;
+ }
+ return @columns;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Net::Google::Code::Role::Pageable - Pageable Role
+
+
+=head1 DESCRIPTION
+
+=head1 INTERFACE
+
+=over 4
+
+=item first_columns
+
+=back
+
+=head1 AUTHOR
+
+sunnavy C<< <sunnavy at bestpractical.com> >>
+
+=head1 LICENCE AND COPYRIGHT
+
+Copyright 2009 Best Practical Solutions.
+
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+
Modified: Net-Google-Code/branches/write/lib/Net/Google/Code/Role/URL.pm
==============================================================================
--- Net-Google-Code/branches/write/lib/Net/Google/Code/Role/URL.pm (original)
+++ Net-Google-Code/branches/write/lib/Net/Google/Code/Role/URL.pm Thu May 14 22:37:41 2009
@@ -1,7 +1,8 @@
package Net::Google::Code::Role::URL;
use Moose::Role;
-requires 'project';
+# requires don't support attribute yet :/
+# requires 'project';
has 'base_url' => (
isa => 'Str',
Modified: Net-Google-Code/branches/write/lib/Net/Google/Code/Wiki.pm
==============================================================================
--- Net-Google-Code/branches/write/lib/Net/Google/Code/Wiki.pm (original)
+++ Net-Google-Code/branches/write/lib/Net/Google/Code/Wiki.pm Thu May 14 22:37:41 2009
@@ -2,7 +2,12 @@
use Moose;
use Params::Validate qw(:all);
-with 'Net::Google::Code::Role';
+with 'Net::Google::Code::Role::Fetchable', 'Net::Google::Code::Role::URL';
+
+has 'project' => (
+ isa => 'Str',
+ is => 'rw',
+);
has 'name' => (
isa => 'Str',
@@ -144,6 +149,8 @@
=item parse_source
+=item project
+
=item name
=item source
Modified: Net-Google-Code/branches/write/t/20.code.t
==============================================================================
--- Net-Google-Code/branches/write/t/20.code.t (original)
+++ Net-Google-Code/branches/write/t/20.code.t Thu May 14 22:37:41 2009
@@ -10,11 +10,11 @@
use_ok('Net::Google::Code');
my $homepage_file = "$Bin/sample/20.code.html";
-my $downloads_file = "$Bin/sample/10.downloads.xml";
+my $downloads_file = "$Bin/sample/20.code.downloads.html";
my $download_file = "$Bin/sample/10.download.html";
my $wikis_file = "$Bin/sample/11.wikis.html";
-my $svn_file = "$Bin/sample/11.TestPage.wiki";
+my $wiki_svn_file = "$Bin/sample/11.TestPage.wiki";
my $wiki_file = "$Bin/sample/11.TestPage.html";
my $mock = Test::MockModule->new('Net::Google::Code');
@@ -59,8 +59,8 @@
# test downloads
$project->load_downloads;
-is( scalar @{ $project->downloads }, 1, 'have 1 download' );
-my $download = $project->downloads->[0];
+is( scalar @{ $project->downloads }, 2, 'have 2 downloads' );
+my $download = $project->downloads->[1];
isa_ok( $download, 'Net::Google::Code::Download' );
is( $download->name, 'Net-Google-Code-0.01.tar.gz', 'download name' );
is( $download->size, '37.4 KB', 'download size' );
@@ -74,7 +74,7 @@
shift;
my $url = shift;
if ( $url =~ /svn/ ) {
- read_file($svn_file);
+ read_file($wiki_svn_file);
}
else {
read_file($wiki_file);
Added: Net-Google-Code/branches/write/t/sample/20.code.downloads.html
==============================================================================
--- (empty file)
+++ Net-Google-Code/branches/write/t/sample/20.code.downloads.html Thu May 14 22:37:41 2009
@@ -0,0 +1,738 @@
+
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+ <script type="text/javascript">
+
+
+
+ var codesite_token = "1e80acf41d325e863ad42260ff3d5a87";
+
+ </script>
+ <title>Downloads -
+ net-google-code -
+
+ Google Code</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
+
+ <link type="text/css" rel="stylesheet" href="http://www.gstatic.com/codesite/ph/13924206732975079159/css/ph_core.css">
+
+ <link type="text/css" rel="stylesheet" href="http://www.gstatic.com/codesite/ph/13924206732975079159/css/ph_list.css" >
+
+
+
+ <link type="application/atom+xml" rel="alternate" href="/feeds/p/net-google-code/downloads/basic">
+
+
+<!--[if IE]>
+ <link type="text/css" rel="stylesheet" href="http://www.gstatic.com/codesite/ph/13924206732975079159/css/d_ie.css" >
+<![endif]-->
+</head>
+<body class="t2">
+ <div id="gaia">
+
+ <span>
+
+ <b>sunnavy at gmail.com</b>
+
+
+ | <a href="/u/sunnavy/" id="projects-dropdown" onclick="return false;">My favorites</a>
+
+ | <a href="/u/sunnavy/" onclick="_CS_click('/gb/ph/profile');" title="Profile, Updates, and Settings">Profile</a>
+ | <a href="http://www.google.com/accounts/Logout?continue=http%3A%2F%2Fcode.google.com%2Fp%2Fnet-google-code%2Fdownloads%2Flist" onclick="_CS_click('/gb/ph/signout');">Sign out</a>
+
+ </span>
+
+ </div>
+ <div class="gbh" style="left: 0pt;"></div>
+ <div class="gbh" style="right: 0pt;"></div>
+
+
+ <div style="height: 1px"></div>
+ <table style="padding:0px; margin: 20px 0px 0px 0px; width:100%" cellpadding="0" cellspacing="0">
+ <tr style="height: 58px;">
+ <td style="width: 55px; text-align:center;">
+ <a href="/p/net-google-code/">
+
+
+
+ <img src="http://www.gstatic.com/codesite/ph/images/defaultlogo.png"
+ alt="Project Logo">
+
+
+
+ </a>
+ </td>
+ <td style="padding-left: 0.8em">
+
+ <div id="pname" style="margin: 0px 0px -3px 0px">
+ <a href="/p/net-google-code/" style="text-decoration:none; color:#000">net-google-code</a>
+ </div>
+ <div id="psum">
+ <i><a id="project_summary_link" href="/p/net-google-code/" style="text-decoration:none; color:#000">a simple client library for google code</a></i>
+ </div>
+
+ </td>
+ <td style="white-space:nowrap; text-align:right">
+
+ <form action="/hosting/search">
+ <input size="30" name="q" value="">
+ <input type="submit" name="projectsearch" value="Search projects" >
+ </form>
+
+ </tr>
+ </table>
+
+
+<table id="mt" cellspacing="0" cellpadding="0" width="100%" border="0">
+ <tr>
+ <th onclick="if (!cancelBubble) _go('/p/net-google-code/');">
+ <div class="tab inactive">
+ <div class="round4"></div>
+ <div class="round2"></div>
+ <div class="round1"></div>
+ <div class="box-inner">
+ <a onclick="cancelBubble=true;" href="/p/net-google-code/">Project Home</a>
+ </div>
+ </div>
+ </th><td> </td>
+
+
+
+
+ <th onclick="if (!cancelBubble) _go('/p/net-google-code/downloads/list');">
+ <div class="tab active">
+ <div class="round4"></div>
+ <div class="round2"></div>
+ <div class="round1"></div>
+ <div class="box-inner">
+ <a onclick="cancelBubble=true;" href="/p/net-google-code/downloads/list">Downloads</a>
+ </div>
+ </div>
+ </th><td> </td>
+
+
+
+
+
+ <th onclick="if (!cancelBubble) _go('/p/net-google-code/w/list');">
+ <div class="tab inactive">
+ <div class="round4"></div>
+ <div class="round2"></div>
+ <div class="round1"></div>
+ <div class="box-inner">
+ <a onclick="cancelBubble=true;" href="/p/net-google-code/w/list">Wiki</a>
+ </div>
+ </div>
+ </th><td> </td>
+
+
+
+
+
+ <th onclick="if (!cancelBubble) _go('/p/net-google-code/issues/list');">
+ <div class="tab inactive">
+ <div class="round4"></div>
+ <div class="round2"></div>
+ <div class="round1"></div>
+ <div class="box-inner">
+ <a onclick="cancelBubble=true;" href="/p/net-google-code/issues/list">Issues</a>
+ </div>
+ </div>
+ </th><td> </td>
+
+
+
+
+
+ <th onclick="if (!cancelBubble) _go('/p/net-google-code/source/checkout');">
+ <div class="tab inactive">
+ <div class="round4"></div>
+ <div class="round2"></div>
+ <div class="round1"></div>
+ <div class="box-inner">
+ <a onclick="cancelBubble=true;" href="/p/net-google-code/source/checkout">Source</a>
+ </div>
+ </div>
+ </th><td> </td>
+
+
+ <th onclick="if (!cancelBubble) _go('/p/net-google-code/admin');">
+ <div class="tab inactive">
+ <div class="round4"></div>
+ <div class="round2"></div>
+ <div class="round1"></div>
+ <div class="box-inner">
+ <a onclick="cancelBubble=true;" href="/p/net-google-code/admin">Administer</a>
+ </div>
+ </div>
+ </th>
+ <td width="100%"> </td>
+ </tr>
+</table>
+<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0" class="st">
+ <tr>
+
+
+
+
+ <td>
+ <div class="issueList">
+<div class="isf">
+
+
+
+ <span class="inIssueEntry">
+ <a href="entry">New download</a>
+ </span> |
+
+
+ <span class="inIssueList">
+ <span>Search</span>
+ <form action="list" method="GET" style="display:inline">
+ <select id="can" name="can" style="font-size:92%">
+ <option disabled="disabled">Search within:</option>
+
+ <option value="1" > All downloads</option>
+ <option value="3" > Featured downloads</option>
+ <option value="2" selected="selected"> Current downloads</option>
+
+
+ <option value="4" > Deprecated downloads</option>
+
+ </select>
+ <span>for</span>
+ <input type="text" size="32" id="q" name="q" value="" style="font-size:92%" >
+
+ <input type="hidden" name="colspec" value="Filename Summary Uploaded Size DownloadCount" >
+ <input type="submit" value="Search" style="font-size:92%" >
+ </form>
+ </span>
+
+</div>
+</div>
+
+ </td>
+
+
+
+
+
+
+
+ <td height="4" align="right" valign="top" class="bevel-right">
+ <div class="round4"></div>
+ <div class="round2"></div>
+ <div class="round1"></div>
+ </td>
+ </tr>
+</table>
+<script type="text/javascript">
+ var cancelBubble = false;
+ function _go(url) { document.location = url; }
+</script>
+
+<div id="maincol">
+
+
+<!-- IE -->
+
+
+
+
+<script type="text/javascript">
+function _showBelow(){}
+function _toggleStar(){}
+function _rowRolloverOn(){}
+function _rowRolloverOff(){}
+function _goIssue(){}
+function _goFile(){}
+</script>
+
+<div id="colcontrol">
+<div class="bubble_bg">
+ <div class="round4"></div>
+ <div class="round2"></div>
+ <div class="round1"></div>
+ <div class="box-inner" id="bub">
+ <div style="margin-bottom: 6px;">
+
+
+ <div class="pagination">
+
+ 1 - 2
+ of 2
+
+ </div>
+
+
+
+
+
+
+ <form id="colspecform" action="list" method="GET" autocomplete="off" style="display:inline">
+ <input type="hidden" name="can" value=2 >
+ <input type="hidden" name="q" value="" >
+ <input type="hidden" name="sort" value="" >
+ <span id="columnspec" style="display:none;"><span style="font-size: 95%">Columns: </span><input type="text" size="60" style="font-size: 80%" name="colspec" id="colspec"
+ value="Filename Summary Uploaded Size DownloadCount" /> <input type="submit" style="font-size: 80%" name="nobtn" value="Update" >
+
+ </span>
+ </form>
+ </div>
+ <table cellspacing="0" cellpadding="2" border="0" class="results" id="resultstable" width="100%">
+ <tbody>
+ <tr id="headingrow"><th style="border-left: 0"> </th>
+
+
+ <th class="col_0" nowrap="nowrap" onclick="_showBelow('pop_0',this)"><a href="#" style="text-decoration: none">Filename</a></th>
+
+
+
+
+ <th class="col_1" nowrap="nowrap" id="summaryheading" onclick="_showBelow('pop_1',this)" width="100%"><a href="#" style="text-decoration: none">Summary + Labels</a></th>
+
+
+
+
+
+ <th class="col_2" nowrap="nowrap" onclick="_showBelow('pop_2',this)"><a href="#" style="text-decoration: none">Uploaded</a></th>
+
+
+
+
+
+ <th class="col_3" nowrap="nowrap" onclick="_showBelow('pop_3',this)"><a href="#" style="text-decoration: none">Size</a></th>
+
+
+
+
+
+ <th class="col_4" nowrap="nowrap" onclick="_showBelow('pop_4',this)"><a href="#" style="text-decoration: none">DownloadCount</a></th>
+
+
+
+ <th onclick="return _showBelow('pop__dot',this)" style="width:3ex"><a href="#columnprefs" style="text-decoration: none; background: none; margin-right:0; padding-right:0">...</a></th>
+ </tr>
+
+
+
+ <tr onmouseover="_rowRolloverOn(this)" onmouseout="_rowRolloverOff(this); cancelBubble=false">
+ <td class="vt" nowrap="nowrap" style="padding:2px 2px 0 2px">
+ </td>
+
+
+
+
+ <td class="vt id col_0">
+ <a href="http://net-google-code.googlecode.com/files/Net-Google-Code-0.04.tar.gz" style="white-space:nowrap"
+
+ >
+
+ Net-Google-Code-0.04.tar.gz
+
+
+</a>
+ </td>
+
+
+
+
+
+
+
+
+
+ <td class="vt col_1" width="100%"
+ onclick="if (!cancelBubble) _go('detail?name=Net-Google-Code-0.04.tar.gz&can=2&q=')"
+ ><a onclick="cancelBubble=true;" href="detail?name=Net-Google-Code-0.04.tar.gz&can=2&q=">
+
+ Net-Google-Code-0.04
+
+
+</a>
+
+<a
+ onclick="cancelBubble=true;"
+ class="label" href="list?q=label:0.04"
+ >0.04</a>
+
+
+ </td>
+
+
+
+
+
+
+
+
+
+
+ <td class="vt col_2" onclick="if (!cancelBubble) _go('detail?name=Net-Google-Code-0.04.tar.gz&can=2&q=')"
+ ><a onclick="cancelBubble=true;" href="detail?name=Net-Google-Code-0.04.tar.gz&can=2&q=" style="white-space:nowrap">
+
+ 60 minutes ago
+
+
+</a></td>
+
+
+
+
+
+
+
+
+ <td class="vt col_3" onclick="if (!cancelBubble) _go('detail?name=Net-Google-Code-0.04.tar.gz&can=2&q=')"
+ ><a onclick="cancelBubble=true;" href="detail?name=Net-Google-Code-0.04.tar.gz&can=2&q=" style="white-space:nowrap">
+
+ 48.0 KB
+
+
+</a></td>
+
+
+
+
+
+
+
+
+ <td class="vt col_4" onclick="if (!cancelBubble) _go('detail?name=Net-Google-Code-0.04.tar.gz&can=2&q=')"
+ ><a onclick="cancelBubble=true;" href="detail?name=Net-Google-Code-0.04.tar.gz&can=2&q=" style="white-space:nowrap">
+
+ 0
+
+
+</a></td>
+
+
+ <td> </td>
+ </tr>
+
+ <tr onmouseover="_rowRolloverOn(this)" onmouseout="_rowRolloverOff(this); cancelBubble=false">
+ <td class="vt" nowrap="nowrap" style="padding:2px 2px 0 2px">
+ </td>
+
+
+
+
+ <td class="vt id col_0">
+ <a href="http://net-google-code.googlecode.com/files/Net-Google-Code-0.01.tar.gz" style="white-space:nowrap"
+
+ >
+
+ Net-Google-Code-0.01.tar.gz
+
+
+</a>
+ </td>
+
+
+
+
+
+
+
+
+
+ <td class="vt col_1" width="100%"
+ onclick="if (!cancelBubble) _go('detail?name=Net-Google-Code-0.01.tar.gz&can=2&q=')"
+ ><a onclick="cancelBubble=true;" href="detail?name=Net-Google-Code-0.01.tar.gz&can=2&q=">
+
+ Net-Google-Code-0.01
+
+
+</a>
+
+<a
+ onclick="cancelBubble=true;"
+ class="label" href="list?q=label:0.01"
+ >0.01</a>
+<a
+ onclick="cancelBubble=true;"
+ class="label" href="list?q=label:simple"
+ >simple</a>
+
+
+ </td>
+
+
+
+
+
+
+
+
+
+
+ <td class="vt col_2" onclick="if (!cancelBubble) _go('detail?name=Net-Google-Code-0.01.tar.gz&can=2&q=')"
+ ><a onclick="cancelBubble=true;" href="detail?name=Net-Google-Code-0.01.tar.gz&can=2&q=" style="white-space:nowrap">
+
+ Jan 06
+
+
+</a></td>
+
+
+
+
+
+
+
+
+ <td class="vt col_3" onclick="if (!cancelBubble) _go('detail?name=Net-Google-Code-0.01.tar.gz&can=2&q=')"
+ ><a onclick="cancelBubble=true;" href="detail?name=Net-Google-Code-0.01.tar.gz&can=2&q=" style="white-space:nowrap">
+
+ 37.4 KB
+
+
+</a></td>
+
+
+
+
+
+
+
+
+ <td class="vt col_4" onclick="if (!cancelBubble) _go('detail?name=Net-Google-Code-0.01.tar.gz&can=2&q=')"
+ ><a onclick="cancelBubble=true;" href="detail?name=Net-Google-Code-0.01.tar.gz&can=2&q=" style="white-space:nowrap">
+
+ 16
+
+
+</a></td>
+
+
+ <td> </td>
+ </tr>
+
+
+ </tbody>
+ </table>
+
+
+ <div class="pagination">
+
+ 1 - 2
+ of 2
+
+ </div>
+
+
+
+
+ <div style="margin-top: 1px; font-size: small">
+
+
+ </div>
+
+
+ <div id="pop_0" class="popup">
+ <table cellspacing="0" cellpadding="0" border="0">
+ <tr onmouseover="_rowRolloverOn(this)" onmouseout="_rowRolloverOff(this)" onclick="_closeAllPopups(this);_sortUp('filename')"><td>Sort Up</td></tr>
+ <tr onmouseover="_rowRolloverOn(this)" onmouseout="_rowRolloverOff(this)" onclick="_closeAllPopups(this);_sortDown('filename')"><td>Sort Down</td></tr>
+ <tr onmouseover="_rowRolloverOn(this)" onmouseout="_rowRolloverOff(this)" onclick="_closeAllPopups(this);_toggleColumn('hide_col_0')"><td>Hide Column</td></tr>
+ </table>
+ </div>
+
+
+
+
+ <div id="pop_1" class="popup">
+ <table cellspacing="0" cellpadding="0" border="0">
+ <tr onmouseover="_rowRolloverOn(this);_closeSubmenus()" onmouseout="_rowRolloverOff(this)" onclick="_closeAllPopups(this);_sortUp('summary')"><td>Sort Up</td></tr>
+ <tr onmouseover="_rowRolloverOn(this);_closeSubmenus()" onmouseout="_rowRolloverOff(this)" onclick="_closeAllPopups(this);_sortDown('summary')"><td>Sort Down</td></tr>
+
+ <tr onmouseover="_rowRolloverOn(this);" onmouseout="_rowRolloverOff(this)"><td onmouseover="_showRight('filter_1', this);">Show only <img src="http://www.gstatic.com/codesite/ph/images/triangle.gif" border="0/"></td></tr>
+
+ <tr onmouseover="_rowRolloverOn(this);_closeSubmenus()" onmouseout="_rowRolloverOff(this)" onclick="_closeAllPopups(this);_toggleColumn('hide_col_1')"><td>Hide Column</td></tr>
+ </table>
+ </div>
+
+
+
+
+
+ <div id="pop_2" class="popup">
+ <table cellspacing="0" cellpadding="0" border="0">
+ <tr onmouseover="_rowRolloverOn(this);_closeSubmenus()" onmouseout="_rowRolloverOff(this)" onclick="_closeAllPopups(this);_sortUp('uploaded')"><td>Sort Up</td></tr>
+ <tr onmouseover="_rowRolloverOn(this);_closeSubmenus()" onmouseout="_rowRolloverOff(this)" onclick="_closeAllPopups(this);_sortDown('uploaded')"><td>Sort Down</td></tr>
+
+ <tr onmouseover="_rowRolloverOn(this);_closeSubmenus()" onmouseout="_rowRolloverOff(this)" onclick="_closeAllPopups(this);_toggleColumn('hide_col_2')"><td>Hide Column</td></tr>
+
+ </table>
+ </div>
+
+
+
+
+
+ <div id="pop_3" class="popup">
+ <table cellspacing="0" cellpadding="0" border="0">
+ <tr onmouseover="_rowRolloverOn(this);_closeSubmenus()" onmouseout="_rowRolloverOff(this)" onclick="_closeAllPopups(this);_sortUp('size')"><td>Sort Up</td></tr>
+ <tr onmouseover="_rowRolloverOn(this);_closeSubmenus()" onmouseout="_rowRolloverOff(this)" onclick="_closeAllPopups(this);_sortDown('size')"><td>Sort Down</td></tr>
+
+ <tr onmouseover="_rowRolloverOn(this);_closeSubmenus()" onmouseout="_rowRolloverOff(this)" onclick="_closeAllPopups(this);_toggleColumn('hide_col_3')"><td>Hide Column</td></tr>
+
+ </table>
+ </div>
+
+
+
+
+
+ <div id="pop_4" class="popup">
+ <table cellspacing="0" cellpadding="0" border="0">
+ <tr onmouseover="_rowRolloverOn(this);_closeSubmenus()" onmouseout="_rowRolloverOff(this)" onclick="_closeAllPopups(this);_sortUp('downloadcount')"><td>Sort Up</td></tr>
+ <tr onmouseover="_rowRolloverOn(this);_closeSubmenus()" onmouseout="_rowRolloverOff(this)" onclick="_closeAllPopups(this);_sortDown('downloadcount')"><td>Sort Down</td></tr>
+
+ <tr onmouseover="_rowRolloverOn(this);_closeSubmenus()" onmouseout="_rowRolloverOff(this)" onclick="_closeAllPopups(this);_toggleColumn('hide_col_4')"><td>Hide Column</td></tr>
+
+ </table>
+ </div>
+
+
+
+
+ <div id="filter_0" class="popup subpopup">
+ <table cellspacing="0" cellpadding="0" border="0">
+
+ </table>
+ </div>
+
+ <div id="filter_1" class="popup subpopup">
+ <table cellspacing="0" cellpadding="0" border="0">
+
+ <tr onmouseover="_rowRolloverOn(this)" onmouseout="_rowRolloverOff(this)" onclick="_closeAllPopups(this);_filterTo('label','simple');">
+ <td>simple</td></tr>
+
+ <tr onmouseover="_rowRolloverOn(this)" onmouseout="_rowRolloverOff(this)" onclick="_closeAllPopups(this);_filterTo('label','0.01');">
+ <td>0.01</td></tr>
+
+ <tr onmouseover="_rowRolloverOn(this)" onmouseout="_rowRolloverOff(this)" onclick="_closeAllPopups(this);_filterTo('label','0.04');">
+ <td>0.04</td></tr>
+
+ </table>
+ </div>
+
+ <div id="filter_2" class="popup subpopup">
+ <table cellspacing="0" cellpadding="0" border="0">
+
+ </table>
+ </div>
+
+ <div id="filter_3" class="popup subpopup">
+ <table cellspacing="0" cellpadding="0" border="0">
+
+ </table>
+ </div>
+
+ <div id="filter_4" class="popup subpopup">
+ <table cellspacing="0" cellpadding="0" border="0">
+
+ </table>
+ </div>
+
+ <div id="pop__dot" class="popup">
+ <table cellspacing="0" cellpadding="0" border="0">
+ <tr><th>Show columns:</th></tr>
+
+ <tr onmouseover="_rowRolloverOn(this)" onmouseout="_rowRolloverOff(this)" onclick="_closeAllPopups(this);_toggleColumn('hide_col_0')"><td> <span class="col_0">♦</span> Filename</td></tr>
+
+ <tr onmouseover="_rowRolloverOn(this)" onmouseout="_rowRolloverOff(this)" onclick="_closeAllPopups(this);_toggleColumn('hide_col_1')"><td> <span class="col_1">♦</span> Summary</td></tr>
+
+ <tr onmouseover="_rowRolloverOn(this)" onmouseout="_rowRolloverOff(this)" onclick="_closeAllPopups(this);_toggleColumn('hide_col_2')"><td> <span class="col_2">♦</span> Uploaded</td></tr>
+
+ <tr onmouseover="_rowRolloverOn(this)" onmouseout="_rowRolloverOff(this)" onclick="_closeAllPopups(this);_toggleColumn('hide_col_3')"><td> <span class="col_3">♦</span> Size</td></tr>
+
+ <tr onmouseover="_rowRolloverOn(this)" onmouseout="_rowRolloverOff(this)" onclick="_closeAllPopups(this);_toggleColumn('hide_col_4')"><td> <span class="col_4">♦</span> DownloadCount</td></tr>
+
+
+ <tr onmouseover="_rowRolloverOn(this)" onmouseout="_rowRolloverOff(this)" onclick="_closeAllPopups(this);addcol('UploadedBy')"><td> UploadedBy</td></tr>
+
+ <tr onmouseover="_rowRolloverOn(this)" onmouseout="_rowRolloverOff(this)" onclick="_closeAllPopups(this); document.getElementById('columnspec').style.display=''; return true;"><td> Edit column spec...</td></tr>
+ </table>
+ </div>
+ </div>
+ <div class="round1"></div>
+ <div class="round2"></div>
+ <div class="round4"></div>
+</div>
+</div>
+<script type="text/javascript" src="http://www.gstatic.com/codesite/ph/13924206732975079159/js/dit_scripts_20081013.js"></script>
+
+<script type="text/javascript">
+ var cancelBubble = false;
+ var _allColumnNames = [
+ 'filename', 'summary', 'uploaded', 'size', 'downloadcount'
+ ];
+
+ function addcol(colname) {
+ var colspec = _getElById('colspec');
+ colspec.value += ' ' + colname;
+ document.getElementById('colspecform').submit();
+ }
+ _onload();
+</script>
+
+ <script type="text/javascript" src="http://www.gstatic.com/codesite/ph/13924206732975079159/js/core_scripts_20081103.js"></script>
+ <script type="text/javascript" src="/js/codesite_product_dictionary_ph.pack.04102009.js"></script>
+
+
+
+ </div>
+<div id="footer" dir="ltr">
+
+ <div class="text">
+
+ ©2009 Google -
+ <a href="/">Code Home</a> -
+ <a href="/tos.html">Terms of Service</a> -
+ <a href="http://www.google.com/privacy.html">Privacy Policy</a> -
+ <a href="/more/">Site Directory</a> -
+ <a href="/p/support/">Project Hosting Help</a>
+
+ </div>
+</div>
+<script type="text/javascript">
+/**
+ * Reports analytics.
+ * It checks for the analytics functionality (window._gat) every 100ms
+ * until the analytics script is fully loaded in order to invoke siteTracker.
+ */
+function _CS_reportAnalytics() {
+ window.setTimeout(function() {
+ if (window._gat) {
+ var siteTracker = _gat._getTracker("UA-18071-1");
+ siteTracker._initData();
+ siteTracker._trackPageview();
+
+ } else {
+ _CS_reportAnalytics();
+ }
+ }, 100);
+}
+</script>
+
+
+
+ <div class="hostedBy" style="margin-top: -20px;">
+ <span style="vertical-align: top;">Hosted by</span>
+ <a href="/hosting/">
+ <img src="http://www.gstatic.com/codesite/ph/images/google_code_tiny.gif" width="107" height="24" alt="Google Code">
+ </a>
+ </div>
+
+
+
+
+
+
+
+ </body>
+</html>
+
Modified: Net-Google-Code/branches/write/xt/perlcritic.t
==============================================================================
--- Net-Google-Code/branches/write/xt/perlcritic.t (original)
+++ Net-Google-Code/branches/write/xt/perlcritic.t Thu May 14 22:37:41 2009
@@ -9,8 +9,5 @@
plan skip_all =>
"Perl::Critic 1.090 and Test::Perl::Critic 1.01 required for testing PBP compliance";
}
-elsif ( !-e 'inc/.author' ) {
- plan skip_all => 'no inc/.author, will not run this test ;)';
-}
Test::Perl::Critic::all_critic_ok();
More information about the Bps-public-commit
mailing list