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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
# coding:utf-8
$:.unshift File.expand_path("../lib", __FILE__)
require 'rubygems'
require 'rubygems/specification'
require 'bundler'
def gemspec
@gemspec ||= begin
file = File.expand_path('../bundler.gemspec', __FILE__)
eval(File.read(file), binding, file)
end
end
def sudo?
ENV['BUNDLER_SUDO_TESTS']
end
begin
require 'rspec/core/rake_task'
task :clear_tmp do
FileUtils.rm_rf(File.expand_path("../tmp", __FILE__))
end
desc "Run specs"
RSpec::Core::RakeTask.new do |t|
t.spec_opts = %w(-fs --color)
t.warning = true
end
task :spec => :build
namespace :spec do
task :sudo do
ENV['BUNDLER_SUDO_TESTS'] = '1'
end
task :clean do
if sudo?
system "sudo rm -rf #{File.expand_path('../tmp', __FILE__)}"
else
rm_rf 'tmp'
end
end
desc "Run the full spec suite including SUDO tests"
task :full => ["sudo", "clean", "spec"]
end
# Rubygems 1.3.5, 1.3.6, and HEAD specs
rubyopt = ENV["RUBYOPT"]
%w(master REL_1_3_5 REL_1_3_6).each do |rg|
desc "Run specs with Rubygems #{rg}"
RSpec::Core::RakeTask.new("spec_gems_#{rg}") do |t|
t.spec_opts = %w(-fs --color)
t.warning = true
end
task "rubygems_#{rg}" do
unless File.directory?("tmp/rubygems_#{rg}")
system("git clone git://github.com/jbarnette/rubygems.git tmp/rubygems_#{rg} && cd tmp/rubygems_#{rg} && git reset --hard #{rg}")
end
ENV["RUBYOPT"] = "-I#{File.expand_path("tmp/rubygems_#{rg}/lib")} #{rubyopt}"
end
task "spec_gems_#{rg}" => "rubygems_#{rg}"
task :ci => "spec_gems_#{rg}"
end
# Ruby 1.8.6, 1.8.7, and 1.9.2 specs
task "ensure_rvm" do
raise "RVM is not available" unless File.exist?(File.expand_path("~/.rvm/scripts/rvm"))
end
%w(1.8.6-p399 1.8.7-p249 1.9.2-head).each do |ruby|
ruby_cmd = File.expand_path("~/.rvm/bin/ruby-#{ruby}")
desc "Run specs on Ruby #{ruby}"
RSpec::Core::RakeTask.new("spec_ruby_#{ruby}") do |t|
t.spec_opts = %w(-fs --color)
t.warning = true
#t.ruby_cmd = ruby_cmd
end
task "ensure_ruby_#{ruby}" do
raise "Could not find Ruby #{ruby} at #{ruby_cmd}" unless File.exist?(ruby_cmd)
end
task "ensure_ruby_#{ruby}" => "ensure_rvm"
task "spec_ruby_#{ruby}" => "ensure_ruby_#{ruby}"
task :ci => "spec_ruby_#{ruby}"
end
rescue LoadError
task :spec do
abort "Run `gem install rspec` to be able to run specs"
end
end
namespace :man do
directory "lib/bundler/man"
Dir["man/*.ronn"].each do |ronn|
basename = File.basename(ronn, ".ronn")
roff = "lib/bundler/man/#{basename}"
file roff => ["lib/bundler/man", ronn] do
sh "ronn --roff --pipe #{ronn} > #{roff}"
end
file "#{roff}.txt" => roff do
sh "groff -Wall -mtty-char -mandoc -Tascii #{roff} | col -b > #{roff}.txt"
end
task :build => "#{roff}.txt"
end
end
desc "Build the man pages"
task :build => "man:build"
desc "Clean up from the built man pages"
task :clean do
rm_rf "lib/bundler/man"
end
namespace :vendor do
desc "Build the vendor dir"
task :build => :clean do
sh "git clone git://github.com/wycats/thor.git lib/bundler/vendor/tmp"
sh "mv lib/bundler/vendor/tmp/lib/* lib/bundler/vendor/"
rm_rf "lib/bundler/vendor/tmp"
end
desc "Clean the vendor dir"
task :clean do
rm_rf "lib/bundler/vendor"
end
end
desc "install the gem locally"
task :install => :package do
sh %{gem install pkg/#{gemspec.name}-#{gemspec.version}}
end
desc "validate the gemspec"
task :gemspec do
gemspec.validate
end
desc "Build the gem"
task :gem => [:gemspec, :build] do
mkdir_p "pkg"
sh "gem build bundler.gemspec"
mv "#{gemspec.full_name}.gem", "pkg"
end
desc "Install bundler"
task :install => :gem do
sh "gem install pkg/#{gemspec.full_name}.gem"
end
|