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
|
#! /usr/bin/env rake
$LOAD_PATH.unshift('lib')
require 'rubygems'
require 'rake/gempackagetask'
require 'rake/contrib/rubyforgepublisher'
require 'diff/lcs'
require 'archive/tar/minitar'
require 'zlib'
DISTDIR = "diff-lcs-#{Diff::LCS::VERSION}"
TARDIST = "../#{DISTDIR}.tar.gz"
DATE_RE = %r<(\d{4})[./-]?(\d{2})[./-]?(\d{2})(?:[\sT]?(\d{2})[:.]?(\d{2})[:.]?(\d{2})?)?>
if ENV['RELEASE_DATE']
year, month, day, hour, minute, second = DATE_RE.match(ENV['RELEASE_DATE']).captures
year ||= 0
month ||= 0
day ||= 0
hour ||= 0
minute ||= 0
second ||= 0
ReleaseDate = Time.mktime(year, month, day, hour, minute, second)
else
ReleaseDate = nil
end
task :test do |t|
require 'test/unit/testsuite'
require 'test/unit/ui/console/testrunner'
runner = Test::Unit::UI::Console::TestRunner
$LOAD_PATH.unshift('tests')
$stderr.puts "Checking for test cases:" if t.verbose
Dir['tests/*test*.rb'].each do |testcase|
$stderr.puts "\t#{testcase}" if t.verbose
load testcase
end
suite = Test::Unit::TestSuite.new
ObjectSpace.each_object(Class) do |testcase|
suite << testcase.suite if testcase < Test::Unit::TestCase
end
runner.run(suite)
end
spec = eval(File.read("diff-lcs.gemspec"))
desc "Build the RubyGem for Diff::LCS."
task :gem => [ :test ]
Rake::GemPackageTask.new(spec) do |g|
g.need_tar = false
g.need_zip = false
g.package_dir = ".."
end
desc "Build an Diff::LCS .tar.gz distribution."
task :tar => [ TARDIST ]
file TARDIST => [ :test ] do |t|
current = File.basename(Dir.pwd)
Dir.chdir("..") do
begin
files = Dir["#{current}/**/*"].select { |dd| dd !~ %r{(?:/CVS/?|~$)} }
files.map! do |dd|
ddnew = dd.gsub(/^#{current}/, DISTDIR)
mtime = ReleaseDate || File.stat(dd).mtime
if File.directory?(dd)
{ :name => ddnew, :mode => 0755, :dir => true, :mtime => mtime }
else
if dd =~ %r{bin/}
mode = 0755
else
mode = 0644
end
data = File.read(dd)
{ :name => ddnew, :mode => mode, :data => data, :size => data.size,
:mtime => mtime }
end
end
ff = File.open(t.name.gsub(%r{^\.\./}o, ''), "wb")
gz = Zlib::GzipWriter.new(ff)
tw = Archive::Tar::Minitar::Writer.new(gz)
files.each do |entry|
if entry[:dir]
tw.mkdir(entry[:name], entry)
else
tw.add_file_simple(entry[:name], entry) { |os| os.write(entry[:data]) }
end
end
ensure
tw.close if tw
gz.close if gz
end
end
end
task TARDIST => [ :test ]
def sign(file)
sh %("C:\\Program Files\\Windows Privacy Tools\\GnuPG\\Gpg.exe" -ba #{file})
end
task :signtar => [ :tar ] do
sign TARDIST
end
task :signgem => [ :gem ] do
sign "../#{DISTDIR}.gem"
end
desc "Build everything."
task :default => [ :signtar, :signgem ] do
end
|