summaryrefslogtreecommitdiff
path: root/Rakefile
blob: 48b87e0fa1b5f99261d475a5f1a6844d0a97a610 (plain)
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
161
162
163
164
165
# -*- encoding: utf-8 -*-
$:.unshift File.expand_path("../lib", __FILE__)
require 'bundler/gem_helper'
Bundler::GemHelper.install_tasks

def sudo?
  ENV['BUNDLER_SUDO_TESTS']
end

begin
  require 'rspec/core/rake_task'
  require 'ronn'

  desc "Run specs"
  RSpec::Core::RakeTask.new do |t|
    t.rspec_opts = %w(-fs --color)
    t.ruby_opts  = %w(-w)
  end
  task :spec => "man:build"

  begin
    require 'ci/reporter/rake/rspec'

    namespace :ci do
      desc "Run specs with Hudson output"
      RSpec::Core::RakeTask.new(:spec)
      task :spec => ["ci:setup:rspec", "man:build"]
    end

  rescue LoadError
    namespace :ci do
      task :spec do
        abort "Run `rake ci:deps` to be able to run the CI specs"
      end

      desc "Install CI dependencies"
      task :deps do
        sh "gem list ci_reporter | (grep 'ci_reporter' 1> /dev/null) || gem install ci_reporter --no-ri --no-rdoc"
      end
      task :deps => "spec:deps"
    end
  end

  namespace :spec do
    desc "Run the spec suite with the sudo tests"
    task :sudo => ["set_sudo", "clean", "spec"]

    task :set_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

    namespace :rubygems do
      # 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(rg) do |t|
          t.rspec_opts = %w(-fs --color)
          t.ruby_opts  = %w(-w)
        end

        task "clone_rubygems_#{rg}" do
          unless File.directory?("tmp/rubygems_#{rg}")
            system("git clone git://github.com/rubygems/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 rg => "clone_rubygems_#{rg}"
        task "rubygems:all" => rg
      end
    end

    namespace :ruby do
      # 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-p302 1.9.2-p0).each do |ruby|
        ruby_cmd = File.expand_path("~/.rvm/bin/ruby-#{ruby}")

        desc "Run specs on Ruby #{ruby}"
        RSpec::Core::RakeTask.new(ruby) do |t|
          t.rspec_opts = %w(-fs --color)
          t.ruby_opts  = %w(-w)
        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 ruby => "ensure_ruby_#{ruby}"
        task "ruby:all" => ruby
      end
    end

  end

rescue LoadError
  task :spec do
    abort "Run `rake spec:deps` to be able to run the specs"
  end

  namespace :spec do
    desc "Ensure spec dependencies are installed"
    task :deps do
      sh "gem list ronn | (grep 'ronn' 1> /dev/null) || gem install ronn --no-ri --no-rdoc"
      sh "gem list rspec | (grep 'rspec (2.0' 1> /dev/null) || gem install rspec --no-ri --no-rdoc"
    end
  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_all_pages => "#{roff}.txt"
  end

  desc "Build the man pages"
  task :build => "man:build_all_pages"

  desc "Clean up from the built man pages"
  task :clean do
    rm_rf "lib/bundler/man"
  end
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

task :default => :spec