1 |
#!/usr/bin/perl |
2 |
|
3 |
use warnings; |
4 |
use strict; |
5 |
|
6 |
use Data::Dump qw/dump/; |
7 |
use File::Slurp; |
8 |
|
9 |
my $debug = 0; |
10 |
|
11 |
my $post; |
12 |
|
13 |
my ($n,$v); |
14 |
|
15 |
while(<>) { |
16 |
chomp; |
17 |
|
18 |
if ( $n ) { |
19 |
if ( /^-----/ ) { |
20 |
$post->{$n} .= " $v"; |
21 |
undef $n; |
22 |
} else { |
23 |
$v .= "$_\n"; |
24 |
next; |
25 |
} |
26 |
} elsif ( /([^:]+):(.*)/ ) { |
27 |
($n,$v) = ($1,$2); |
28 |
if ( length($v) > 0 ) { |
29 |
$v =~ s{^\s+}{}; |
30 |
$post->{$n} = $v; |
31 |
undef $n; |
32 |
} |
33 |
} elsif ( /^$/ ) { |
34 |
next; |
35 |
} elsif ( /^--------$/ ) { |
36 |
|
37 |
warn "# post = ", dump($post) if $debug; |
38 |
|
39 |
my $path = "posts/$post->{BASENAME}.html"; |
40 |
|
41 |
|
42 |
my $tags = join(' ', map { "categories/$_" } split( m/ /, $post->{CATEGORY} ) ); |
43 |
$tags .= ' ' if $tags; |
44 |
$tags .= join(' ', map { "tags/$_" } split( m/,/, $post->{TAGS} ) ); |
45 |
|
46 |
my ( $dd, $mm, $yyyy, $h, $m, $s, $ampm ) = split(m{[/ :]}, $post->{DATE}); |
47 |
$h += 12 if $ampm eq 'PM'; |
48 |
my $t = sprintf('%04d-%02d-%02dT%02d:%02d:%02d', $yyyy, $mm, $dd, $h, $m, $s); |
49 |
|
50 |
write_file $path, |
51 |
qq| |
52 |
[[!meta title="$post->{TITLE}" ]] |
53 |
[[!meta date="$t" ]] |
54 |
[[!meta updated="$t" ]] |
55 |
[[!tag $tags ]] |
56 |
| |
57 |
. "\n" |
58 |
. $post->{BODY} |
59 |
; |
60 |
|
61 |
my $cmd = qq|svn add $path && svn commit -m "$post->{TITLE}" && svn propset -rHEAD --revprop svn:date $t.000000Z|; |
62 |
warn "## $cmd\n"; |
63 |
system($cmd); |
64 |
warn "# $path $t ", -s $path, $/; |
65 |
|
66 |
$post = {}; |
67 |
} |
68 |
|
69 |
} |