cmogstored 1.8.1 - use default system stack size
[cmogstored.git] / Rakefile
blobba82acac452f802f19bf96d29cd198e4e300e715
1 # this is only used for release-related tasks and should not
2 # be needed by normal development
4 include Rake::DSL if defined?(Rake::DSL)
6 url_base = "https://yhbt.net/cmogstored"
7 cgit_url = url_base + '.git'
8 git_url = 'https://yhbt.net/cmogstored.git'
10 def tags
11   timefmt = '%Y-%m-%dT%H:%M:%SZ'
12   @tags ||= `git tag -l`.split(/\n/).map do |tag|
13     if %r{\Av[\d\.]+} =~ tag
14       header, subject, body = `git cat-file tag #{tag}`.split(/\n\n/, 3)
15       header = header.split(/\n/)
16       tagger = header.grep(/\Atagger /).first
17       body ||= "initial"
18       {
19         :time => Time.at(tagger.split(/ /)[-2].to_i).utc.strftime(timefmt),
20         :tagger_name => %r{^tagger ([^<]+)}.match(tagger)[1].strip,
21         :tagger_email => %r{<([^>]+)>}.match(tagger)[1].strip,
22         :id => `git rev-parse refs/tags/#{tag}`.chomp!,
23         :tag => tag,
24         :subject => subject,
25         :body => body,
26       }
27     end
28   end.compact.sort { |a,b| b[:time] <=> a[:time] }
29 end
31 desc 'prints news as an Atom feed'
32 task :news_atom do
33   require 'builder' # gem install builder
34   new_tags = tags[0,10]
35   x = Builder::XmlMarkup.new
36   x.instruct! :xml, :encoding => 'UTF-8', :version => '1.0'
37   x.feed(:xmlns => "http://www.w3.org/2005/Atom") do
38     x.id "#{url_base}/NEWS.atom.xml"
39     x.title "cmogstored news"
40     x.subtitle "alternative mogstored implementation for MogileFS"
41     x.link :rel => 'alternate', :type => 'text/plain',
42            :href => "#{url_base}/NEWS"
43     x.updated(new_tags.empty? ? "1970-01-01T00:00:00Z" : new_tags.first[:time])
44     new_tags.each do |tag|
45       x.entry do
46         x.title tag[:subject]
47         x.updated tag[:time]
48         x.published tag[:time]
49         x.author {
50           x.name tag[:tagger_name]
51           x.email tag[:tagger_email]
52         }
53         url = "#{cgit_url}/tag/?id=#{tag[:tag]}"
54         x.link :rel => "alternate", :type => "text/html", :href => url
55         x.id url
56         x.content(:type =>:xhtml) do
57           x.div(:xmlns => 'http://www.w3.org/1999/xhtml') do
58             x.pre tag[:body]
59           end
60         end
61       end
62     end
63   end
64   puts x.target!
65 end
67 desc 'prints news as a text file'
68 task :news do
69   title = "cmogstored news"
70   puts title
71   puts('-' * title.length)
72   puts
73   tags.each do |tag|
74     time = tag[:time].tr!('T', ' ').gsub!(/:\d\dZ/, ' UTC')
75     line = "#{tag[:tag].sub(/^v/, '')} / #{time}"
76     puts line
77     puts("-" * line.length)
78     puts ""
80     puts tag[:body].gsub(/^/m, "  ").gsub(/[ \t]+$/m, "")
81     puts "" unless tag == tags.last
82   end
83 end
85 desc "dump changelog to stdout"
86 task :changelog do
87   since = "v1.0.0"
89   puts "cmogstored changelog since #{since}"
90   puts "Full changeset information is available at #{git_url}"
91   puts "See NEWS file for a user-oriented summary of changes"
92   puts ""
94   cmd = %w(git log --pretty=medium --date=iso --decorate) << "#{since}.."
95   system(*cmd) or abort $?
96 end
98 desc "compare dist tar.gz against contents in the git tree"
99 task :distcheck_git do
100   tgz = ENV["TGZ"] or abort "TGZ= not specified"
101   tgzfiles = `tar -ztf #{tgz}`.split(/\n/)
102   tgzfiles.map! { |f| f.gsub!(%r{^[^/]+/}, '') }
103   gitfiles = `git ls-files`.split(/\n/)
104   gitonly = gitfiles - tgzfiles
105   gitonly -= %w(build-aux/manpage-hack.mk)
106   if gitonly[0]
107     warn "The following files are missing from #{tgz}"
108     warn ""
109     gitonly.each { |f| warn f }
110     exit(1)
111   end