/[suikacvs]/webroot/commitfeed/mkcommitfeed.pl
Suika

Contents of /webroot/commitfeed/mkcommitfeed.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (show annotations) (download)
Mon Nov 24 05:21:35 2008 UTC (17 years, 7 months ago) by wakaba
Branch: MAIN
Changes since 1.1: +4 -1 lines
File MIME type: text/plain
++ ChangeLog	24 Nov 2008 05:21:19 -0000
	* mkcommitfeed-example: Allow shell special characters in
	arguments.

2008-11-24  Wakaba  <wakaba@suika.fam.cx>

1 #!/usr/bin/perl
2 use strict;
3
4 use Data::Dumper;
5 print Dumper \@ARGV;
6
7 use Getopt::Long;
8 use Pod::Usage;
9 use Time::Local;
10
11 my $file_name;
12 my $feed_url;
13 my $feed_title = 'ChangeLog';
14 my $feed_author_name;
15 my $feed_author_mail;
16 my $feed_author_url;
17 my $feed_lang = 'i-default';
18 my $feed_related_url;
19 my $feed_license_url;
20 my $feed_rights;
21 my $entry_content;
22 my $entry_author_name;
23 my $entry_author_mail;
24 my $entry_date;
25 my $entry_title;
26
27 GetOptions (
28 'entry-author-mail=s' => \$entry_author_mail,
29 'entry-author-name=s' => \$entry_author_name,
30 'entry-content=s' => \$entry_content,
31 'entry-title=s' => \$entry_title,
32 'feed-author-mail=s' => \$feed_author_mail,
33 'feed-author-name=s' => \$feed_author_name,
34 'feed-author-url=s' => \$feed_author_url,
35 'feed-lang=s' => \$feed_lang,
36 'feed-license-url=s' => \$feed_license_url,
37 'feed-related-url=s' => \$feed_related_url,
38 'feed-rights=s' => \$feed_rights,
39 'feed-title=s' => \$feed_title,
40 'feed-url=s' => \$feed_url,
41 'file-name=s' => \$file_name,
42 'help' => sub {
43 pod2usage (-exitval => 0, -verbose => 2);
44 },
45 ) or pod2usage (-exitval => 1, -verbose => 1);
46 pod2usage (-exitval => 1, -verbose => 1,
47 -msg => "Required argument --file-name is not specified.\n")
48 unless defined $file_name;
49 pod2usage (-exitval => 1, -verbose => 1,
50 -msg => "Required argument --feed-url is not specified.\n")
51 unless defined $feed_url;
52
53 unless (defined $entry_content) {
54 $entry_content = '';
55 $entry_content .= $_ while <>;
56 }
57
58 if ($entry_content =~ /^(\d+)-(\d+)-(\d+)\s+(.+)<([^<>]+)>/m) {
59 # $entry_date //= timegm (0, 0, 0, $3, $2-1, $1);
60 $entry_author_name //= $4;
61 $entry_author_mail //= $5;
62 $entry_author_name =~ s/\s+$//;
63 }
64 $entry_date //= time;
65
66 pod2usage (-exitval => 1, -verbose => 1,
67 -msg => "Required argument --entry-author-name is not specified.\n")
68 unless defined $entry_author_name;
69
70 unless (defined $entry_title) {
71 my $time = [gmtime $entry_date];
72 $entry_title = sprintf '%04d-%02d-%02d %s', 1900+$time->[5], 1+$time->[4],
73 $time->[3], $entry_author_name;
74 }
75
76 require Message::DOM::DOMImplementation;
77 my $dom = Message::DOM::DOMImplementation->new;
78 my $doc;
79
80 {
81 if (-f $file_name) {
82 open my $file, '<:encoding(utf8)', $file_name or die "$0: $file_name: $!";
83 local $/ = undef;
84 $doc = $dom->create_document;
85 $doc->inner_html (<$file>);
86 } else {
87 $doc = $dom->create_atom_feed_document
88 ($feed_url, $feed_title, $feed_lang);
89 }
90 }
91
92 $doc->dom_config
93