-
Notifications
You must be signed in to change notification settings - Fork 3
/
Rakefile
109 lines (89 loc) · 2.72 KB
/
Rakefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
require "time"
HW = "perl ./hw.pl -c"
DIR = File.dirname(__FILE__)
Dir.chdir(DIR)
$:.unshift("./lib")
# タスク引数に@を使えるようにします。rake load@2009-07-01
# http://subtech.g.hatena.ne.jp/cho45/20080108/1199723301
Rake.application.top_level_tasks.map! do |a|
name, vals = *a.split(/@/, 2)
vals ? "#{name}[#{vals}]" : a
end
desc "指定した日付の記事をロードします。rake load@2009-06-30"
task :load,[:date] do |t, args|
raise "Usage: rake load@YYYY-MM-DD" unless args.date
date = Time.parse(args.date)
system("#{HW} -l #{date.strftime("%Y-%m-%d")}")
end
desc "はてなダイアリーを更新します(ちょっとした更新)。"
task :update do
system("#{HW} -t")
end
desc "はてなダイアリーを更新します。"
task :release do
system(HW)
end
desc "初期化します。"
task :init do
mkdir "text" unless File.exist?("text")
# config.txtはhw.plと同じディレクトリに置く。
# hw.plを直接実行する時にconfig.txtのパスを指定しなくても済むように。
unless File.exist?("config.txt")
open("config.txt", "w") do |io|
io << <<EOT
id:yourid
txt_dir:./text
touch:./text/touch.txt
client_encoding:utf-8
server_encoding:euc-jp
EOT
end
end
# クッキーのパーミッションを閉じる。
touch "cookie.txt" unless File.exist?("cookie.txt")
chmod(0600, "cookie.txt")
end
desc "touch.txtに現在時刻を書き込みます。現在までの修正はアップロードされなくなります。"
task :touch,[:date] do |t,args|
date = args.date ? Time.parse(args.date) : Time.now
open("./text/touch.txt", "w") do |io|
io << date.strftime("%Y%m%d%H%M%S")
end
end
desc "プレビューサーバを起動します。"
task :server,[:port] do |t,args|
require "hatena_preview_server"
HatenaPreviewServer.start("./text", args.port)
end
desc "更新されるファイル一覧を表示します。"
task :status do
touchdate = File.stat("./text/touch.txt").mtime
# puts "#{touchdate.strftime("%Y-%m-%d %H:%M")} text/touch.txt"
upfiles.each do |f|
mtime = File.stat(f).mtime
puts "#{mtime.strftime("%Y-%m-%d %H:%M")} #{f}"
end
end
desc "公開されている日記とのdiffを表示します。"
task :diff,[:date] do |t,args|
if args.date
system "#{HW} -D #{datearg(args)}"
else
upfiles.each do |f|
system "#{HW} -D #{f.pathmap("%n")}"
end
end
end
def upfiles
touchdate = File.stat("./text/touch.txt").mtime
result = []
FileList["text/*.txt"].each do |f|
next unless f =~ %r{/\d{4}-\d{2}-\d{2}(?:-.+)?\.txt$}
mtime = File.stat(f).mtime
result << f if touchdate < mtime
end
return result
end
def datearg(args)
return Time.parse(args.date).strftime("%Y-%m-%d")
end