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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
| | # -*- encoding: binary -*-
# most tasks are in the GNUmakefile which offers better parallelism
def tags
timefmt = '%Y-%m-%dT%H:%M:%SZ'
@tags ||= `git tag -l`.split(/\n/).map do |tag|
if %r{\Av[\d\.]+} =~ tag
header, subject, body = `git cat-file tag #{tag}`.split(/\n\n/, 3)
header = header.split(/\n/)
tagger = header.grep(/\Atagger /).first
body ||= "initial"
{
:time => Time.at(tagger.split(/ /)[-2].to_i).utc.strftime(timefmt),
:tagger_name => %r{^tagger ([^<]+)}.match(tagger)[1].strip,
:tagger_email => %r{<([^>]+)>}.match(tagger)[1].strip,
:id => `git rev-parse refs/tags/#{tag}`.chomp!,
:tag => tag,
:subject => subject,
:body => body,
}
end
end.compact.sort { |a,b| b[:time] <=> a[:time] }
end
cgit_url = "http://git.bogomips.org/cgit/ruby-tdb.git"
git_url = ENV['GIT_URL'] || 'git://git.bogomips.org/ruby-tdb.git'
web_url = "http://bogomips.org/ruby-tdb/"
desc 'prints news as an Atom feed'
task :news_atom do
require 'nokogiri'
new_tags = tags[0,10]
puts(Nokogiri::XML::Builder.new do
feed :xmlns => "http://www.w3.org/2005/Atom" do
id! "#{web_url}NEWS.atom.xml"
title "Ruby tdb news"
subtitle "Trivial Database bindings for Ruby"
link! :rel => "alternate", :type => "text/html",
:href => "#{web_url}NEWS.html"
updated(new_tags.empty? ? "1970-01-01T00:00:00Z" : new_tags.first[:time])
new_tags.each do |tag|
entry do
title tag[:subject]
updated tag[:time]
published tag[:time]
author {
name tag[:tagger_name]
email tag[:tagger_email]
}
url = "#{cgit_url}/tag/?id=#{tag[:tag]}"
link! :rel => "alternate", :type => "text/html", :href =>url
id! url
message_only = tag[:body].split(/\n.+\(\d+\):\n {6}/s).first.strip
content({:type =>:text}, message_only)
content(:type =>:xhtml) { pre tag[:body] }
end
end
end
end.to_xml)
end
desc 'prints RDoc-formatted news'
task :news_rdoc do
tags.each do |tag|
time = tag[:time].tr!('T', ' ').gsub!(/:\d\dZ/, ' UTC')
puts "=== #{tag[:tag].sub(/^v/, '')} / #{time}"
puts ""
body = tag[:body]
puts tag[:body].gsub(/^/sm, " ").gsub(/[ \t]+$/sm, "")
puts ""
end
end
desc "print release changelog for Rubyforge"
task :release_changes do
version = ENV['VERSION'] or abort "VERSION= needed"
version = "v#{version}"
vtags = tags.map { |tag| tag[:tag] =~ /\Av/ and tag[:tag] }.sort
prev = vtags[vtags.index(version) - 1]
if prev
system('git', 'diff', '--stat', prev, version) or abort $?
puts ""
system('git', 'log', "#{prev}..#{version}") or abort $?
else
system('git', 'log', version) or abort $?
end
end
desc "print release notes for Rubyforge"
task :release_notes do
spec = Gem::Specification.load('tdb.gemspec')
puts spec.description.strip
puts ""
puts "* #{spec.homepage}"
puts "* #{spec.email}"
puts "* #{git_url}"
_, _, body = `git cat-file tag v#{spec.version}`.split(/\n\n/, 3)
print "\nChanges:\n\n"
puts body
end
desc "post to RAA"
task :raa_update do
require 'net/http'
require 'net/netrc'
rc = Net::Netrc.locate('tdb-raa') or abort "~/.netrc not found"
password = rc.password
s = Gem::Specification.load('tdb.gemspec')
desc = [ s.description.strip ]
desc << ""
desc << "* #{s.email}"
desc << "* #{git_url}"
desc << "* #{cgit_url}"
desc = desc.join("\n")
uri = URI.parse('http://raa.ruby-lang.org/regist.rhtml')
form = {
:name => s.name,
:short_description => s.summary,
:version => s.version.to_s,
:status => 'experimental',
:owner => s.authors.first,
:email => s.email,
:category_major => 'Library',
:category_minor => 'Database',
:url => s.homepage,
:download => 'http://bogomips.org/ruby-tdb/files/',
:license => "LGPL",
:description_style => 'Plain',
:description => desc,
:pass => password,
:submit => 'Update',
}
res = Net::HTTP.post_form(uri, form)
p res
puts res.body
end
|