Can we change commits to go to kitty-dev? Begin forwarded message:
> From: [email protected] (Mail Delivery System) > Date: November 23, 2010 3:16:41 PM PST > To: [email protected] > Subject: Undelivered Mail Returned to Sender > > This is the mail system at host eris.apache.org. > > I'm sorry to have to inform you that your message could not > be delivered to one or more recipients. It's attached below. > > For further assistance, please send mail to postmaster. > > If you do so, please include this problem report. You can > delete your own text from the attached returned message. > > The mail system > > <[email protected]>: host mx1.us.apache.org[140.211.11.136] > said: 550 mail to [email protected] not accepted here (in > reply to RCPT TO command) > Reporting-MTA: dns; eris.apache.org > X-Postfix-Queue-ID: 3116A2388903 > X-Postfix-Sender: rfc822; [email protected] > Arrival-Date: Tue, 23 Nov 2010 23:16:21 +0000 (UTC) > > Final-Recipient: rfc822; [email protected] > Action: failed > Status: 5.0.0 > Remote-MTA: dns; mx1.us.apache.org > Diagnostic-Code: smtp; 550 mail to [email protected] not > accepted here > > From: [email protected] > Date: November 23, 2010 3:16:21 PM PST > To: [email protected] > Subject: svn commit: r1038377 - in /incubator/kitty/site: ./ trunk/ > trunk/cgi-bin/ trunk/content/ trunk/content/kitty/ trunk/lib/ > trunk/lib/path.pm trunk/lib/view.pm trunk/templates/ > > > Author: msacks > Date: Tue Nov 23 23:16:20 2010 > New Revision: 1038377 > > URL: http://svn.apache.org/viewvc?rev=1038377&view=rev > Log: > added cms site template > > Added: > incubator/kitty/site/ > incubator/kitty/site/trunk/ > incubator/kitty/site/trunk/cgi-bin/ > incubator/kitty/site/trunk/content/ > incubator/kitty/site/trunk/content/kitty/ > incubator/kitty/site/trunk/lib/ > incubator/kitty/site/trunk/lib/path.pm > incubator/kitty/site/trunk/lib/view.pm > incubator/kitty/site/trunk/templates/ > > Added: incubator/kitty/site/trunk/lib/path.pm > URL: > http://svn.apache.org/viewvc/incubator/kitty/site/trunk/lib/path.pm?rev=1038377&view=auto > ============================================================================== > --- incubator/kitty/site/trunk/lib/path.pm (added) > +++ incubator/kitty/site/trunk/lib/path.pm Tue Nov 23 23:16:20 2010 > @@ -0,0 +1,39 @@ > +package path; > +use ASF::Value; > + > +# taken from django's url.py > + > +our @patterns = ( > + [qr!\.mdtext$!, single_narrative => { template => > "single_narrative.html" }], > + > + [qr!/sitemap\.html$!, sitemap => { headers => { title => "Kitty > Sitemap" }} ], > + > +) ; > + > +# for specifying interdependencies between files > + > +our %dependencies = ( > + "/kitty/sitemap.html" => [ grep s!^content!!, glob > "content/kitty/*.mdtext" ], > +); > + > +1; > + > +=head1 LICENSE > + > + Licensed to the Apache Software Foundation (ASF) under one > + or more contributor license agreements. See the NOTICE file > + distributed with this work for additional information > + regarding copyright ownership. The ASF licenses this file > + to you under the Apache License, Version 2.0 (the > + "License"); you may not use this file except in compliance > + with the License. You may obtain a copy of the License at > + > + http://www.apache.org/licenses/LICENSE-2.0 > + > + Unless required by applicable law or agreed to in writing, > + software distributed under the License is distributed on an > + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY > + KIND, either express or implied. See the License for the > + specific language governing permissions and limitations > + under the License. > + > > Added: incubator/kitty/site/trunk/lib/view.pm > URL: > http://svn.apache.org/viewvc/incubator/kitty/site/trunk/lib/view.pm?rev=1038377&view=auto > ============================================================================== > --- incubator/kitty/site/trunk/lib/view.pm (added) > +++ incubator/kitty/site/trunk/lib/view.pm Tue Nov 23 23:16:20 2010 > @@ -0,0 +1,201 @@ > +package view; > + > +# > +# BUILD CONSTRAINT: all views must return $content, $extension. > +# additional return values (as seen below) are optional. However, > +# careful use of symlinks and dependency management in path.pm can > +# resolve most issues with this constraint. > +# > + > +use strict; > +use warnings; > +use Dotiac::DTL qw/Template/; > +use Dotiac::DTL::Addon::markup; > +use ASF::Util qw/read_text_file shuffle/; > +use File::Temp qw/tempfile/; > +use LWP::Simple; > + > +push @Dotiac::DTL::TEMPLATE_DIRS, "templates"; > + > +# This is most widely used view. It takes a > +# 'template' argument and a 'path' argument. > +# Assuming the path ends in foo.mdtext, any files > +# like foo.page/bar.mdtext will be parsed and > +# passed to the template in the "bar" (hash) > +# variable. > + > +sub single_narrative { > + my %args = @_; > + my $file = "content$args{path}"; > + my $template = $args{template}; > + $args{path} =~ s/\.mdtext$/\.html/; > + $args{breadcrumbs} = breadcrumbs($args{path}); > + > + read_text_file $file, \%args; > + > + my $page_path = $file; > + $page_path =~ s/\.[^.]+$/.page/; > + if (-d $page_path) { > + for my $f (grep -f, glob "$page_path/*.mdtext") { > + $f =~ m!/([^/]+)\.mdtext$! or die "Bad filename: $f\n"; > + $args{$1} = {}; > + read_text_file $f, $args{$1}; > + } > + } > + > +# $args{sidenav} = {}; > +# read_text_file "templates/sidenav.mdtext", $args{sidenav} ; > + > +# select STDOUT ; > +# $| = 1 ; > +# for my $ke (keys %args) { > +# print STDOUT "$ke \n"; > +# } > + > + return Dotiac::DTL::Template($template)->render(\%args), html => \%args; > +} > + > +# Has the same behavior as the above for foo.page/bar.txt > +# files, parsing them into a bar variable for the template. > +# Otherwise presumes the template is the path. > + > +sub news_page { > + my %args = @_; > + my $template = "content$args{path}"; > + $args{breadcrumbs} = breadcrumbs($args{path}); > + > + my $page_path = $template; > + $page_path =~ s/\.[^.]+$/.page/; > + if (-d $page_path) { > + for my $f (grep -f, glob "$page_path/*.mdtext") { > + $f =~ m!/([^/]+)\.mdtext$! or die "Bad filename: $f\n"; > + $args{$1} = {}; > + read_text_file $f, $args{$1}; > + } > + } > + > + for ((fetch_doap_url_list())[0..2]) { > + push @{$args{projects}}, parse_doap($_); > + } > + > + return Dotiac::DTL::Template($template)->render(\%args), html => \%args; > +} > + > +sub sitemap { > + my %args = @_; > + my $template = "content$args{path}"; > + $args{breadcrumbs} .= breadcrumbs($args{path}); > + my $dir = $template; > + $dir =~ s!/[^/]+$!!; > + opendir my $dh, $dir or die "Can't opendir $dir: $!\n"; > + my %data; > + for (map "$dir/$_", grep $_ ne "." && $_ ne ".." && $_ ne ".svn", > readdir $dh) { > + if (-f and /\.mdtext$/) { > + my $file = $_; > + $file =~ s/^content//; > + no warnings 'once'; > + for my $p (@path::patterns) { > + my ($re, $method, $args) = @$p; > + next unless $file =~ $re; > + my $s = view->can($method) or die "Can't locate method: > $method\n"; > + my ($content, $ext, $vars) = $s->(path => $file, %$args); > + $file =~ s/\.mdtext$/.$ext/; > + $data{$file} = $vars; > + last; > + } > + } > + } > + > + my $content = ""; > + > + for (sort keys %data) { > + $content .= "- [$data{$_}->{headers}->{title}]($_)\n"; > + for my $hdr (grep /^#/, split "\n", $data{$_}->{content}) { > + $hdr =~ /^(#+)\s+([^#]+)?\s+\1\s+\{#([^}]+)\}$/ or next; > + my $level = length $1; > + $level *= 4; > + $content .= " " x $level; > + $content .= "- [$2]($_#$3)\n"; > + } > + } > + $args{content} = $content; > + return Dotiac::DTL::Template($template)->render(\%args), html => \%args; > +} > + > +sub exports { > + my %args = @_; > + my $template = "content$args{path}"; > + $args{breadcrumbs} = breadcrumbs($args{path}); > + > + my $page_path = $template; > + $page_path =~ s/\.[^.]+$/.page/; > + if (-d $page_path) { > + for my $f (grep -f, glob "$page_path/*.mdtext") { > + $f =~ m!/([^/]+)\.mdtext$! or die "Bad filename: $f\n"; > + $args{$1} = {}; > + read_text_file $f, $args{$1}; > + } > + $args{table} = `xsltproc $page_path/eccnmatrix.xsl > $page_path/eccnmatrix.xml`; > + > + } > + > + return Dotiac::DTL::Template($template)->render(\%args), html => \%args; > +} > + > +sub parse_doap { > + my $url = shift; > + my $doap = get $url or die "Can't get $url: $!\n"; > + my ($fh, $filename) = tempfile("XXXXXX"); > + print $fh $doap; > + close $fh; > + my $result = eval `xsltproc lib/doap2perl.xsl $filename`; > + unlink $filename; > + return $result; > +} > + > +sub fetch_doap_url_list { > + my $xml = get > "http://svn.apache.org/repos/asf/infrastructure/site-tools/trunk/projects/files.xml" > + or die "Can't get doap file list: $!\n"; > + my ($fh, $filename) = tempfile("XXXXXX"); > + print $fh $xml; > + close $fh; > + chomp(my @urls = grep /^http/, `xsltproc lib/list2urls.xsl $filename`); > + unlink $filename; > + shuffle \...@urls; > + return @urls; > +} > + > +1; > + > +sub breadcrumbs { > + my @path = split m!/!, shift; > + pop @path; > + my @rv; > + my $relpath = ""; > + for (@path) { > + $relpath .= "$_/"; > + $_ ||= "Home"; > + push @rv, qq(<a href="$relpath">\u$_</a>); > + } > + return join " » ", @rv; > +} > + > + > +=head1 LICENSE > + > + Licensed to the Apache Software Foundation (ASF) under one > + or more contributor license agreements. See the NOTICE file > + distributed with this work for additional information > + regarding copyright ownership. The ASF licenses this file > + to you under the Apache License, Version 2.0 (the > + "License"); you may not use this file except in compliance > + with the License. You may obtain a copy of the License at > + > + http://www.apache.org/licenses/LICENSE-2.0 > + > + Unless required by applicable law or agreed to in writing, > + software distributed under the License is distributed on an > + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY > + KIND, either express or implied. See the License for the > + specific language governing permissions and limitations > + under the License. > > > >
