buildr 1.4.1 → 1.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. data/CHANGELOG +68 -11
  2. data/_buildr +2 -0
  3. data/addon/buildr/hibernate.rb +8 -5
  4. data/addon/buildr/jetty.rb +1 -1
  5. data/addon/buildr/openjpa.rb +0 -2
  6. data/addon/buildr/xmlbeans.rb +1 -1
  7. data/buildr.gemspec +13 -9
  8. data/doc/_layouts/default.html +3 -1
  9. data/doc/contributing.textile +10 -2
  10. data/doc/css/default.css +6 -6
  11. data/doc/download.textile +7 -7
  12. data/doc/languages.textile +2 -2
  13. data/doc/more_stuff.textile +41 -33
  14. data/doc/packaging.textile +6 -3
  15. data/doc/releasing.textile +116 -0
  16. data/doc/scripts/install-linux.sh +7 -6
  17. data/doc/testing.textile +14 -0
  18. data/lib/buildr.rb +2 -2
  19. data/lib/buildr/core.rb +0 -6
  20. data/lib/buildr/core/application.rb +25 -2
  21. data/lib/buildr/core/build.rb +66 -15
  22. data/lib/buildr/core/compile.rb +10 -1
  23. data/lib/buildr/core/filter.rb +1 -1
  24. data/lib/buildr/core/progressbar.rb +8 -3
  25. data/lib/buildr/core/test.rb +57 -6
  26. data/lib/buildr/core/transports.rb +18 -13
  27. data/lib/buildr/core/util.rb +19 -3
  28. data/lib/buildr/groovy/compiler.rb +2 -2
  29. data/lib/buildr/ide/eclipse.rb +32 -12
  30. data/lib/buildr/java/ant.rb +3 -3
  31. data/lib/buildr/java/bdd.rb +1 -2
  32. data/lib/buildr/java/cobertura.rb +10 -9
  33. data/lib/buildr/java/commands.rb +22 -21
  34. data/lib/buildr/java/compiler.rb +2 -2
  35. data/lib/buildr/java/doc.rb +1 -1
  36. data/lib/buildr/java/ecj.rb +71 -0
  37. data/lib/buildr/java/emma.rb +1 -1
  38. data/lib/buildr/java/external.rb +9 -9
  39. data/lib/buildr/java/jruby.rb +5 -0
  40. data/lib/buildr/java/packaging.rb +4 -3
  41. data/lib/buildr/java/rjb.rb +4 -6
  42. data/lib/buildr/java/tests.rb +9 -4
  43. data/lib/buildr/packaging/archive.rb +7 -3
  44. data/lib/buildr/packaging/artifact.rb +153 -38
  45. data/lib/buildr/packaging/gems.rb +2 -3
  46. data/lib/buildr/packaging/package.rb +19 -12
  47. data/lib/buildr/packaging/tar.rb +1 -1
  48. data/lib/buildr/packaging/ziptask.rb +1 -1
  49. data/lib/buildr/scala/bdd.rb +7 -3
  50. data/lib/buildr/scala/compiler.rb +2 -2
  51. data/lib/buildr/scala/doc.rb +3 -3
  52. data/lib/buildr/scala/tests.rb +7 -3
  53. data/lib/buildr/version.rb +18 -0
  54. data/rakelib/all-in-one.rake +1 -1
  55. data/rakelib/doc.rake +13 -3
  56. data/rakelib/metrics.rake +39 -0
  57. data/spec/core/application_spec.rb +13 -12
  58. data/spec/core/build_spec.rb +166 -7
  59. data/spec/core/cc_spec.rb +1 -1
  60. data/spec/core/checks_spec.rb +1 -1
  61. data/spec/core/common_spec.rb +10 -1
  62. data/spec/core/compile_spec.rb +1 -1
  63. data/spec/core/extension_spec.rb +1 -1
  64. data/spec/core/generate_spec.rb +1 -1
  65. data/spec/core/project_spec.rb +1 -1
  66. data/spec/core/test_spec.rb +124 -11
  67. data/spec/core/transport_spec.rb +10 -3
  68. data/spec/core/util_spec.rb +18 -2
  69. data/spec/groovy/bdd_spec.rb +1 -1
  70. data/spec/groovy/compiler_spec.rb +3 -3
  71. data/spec/ide/eclipse_spec.rb +63 -1
  72. data/spec/ide/idea7x_spec.rb +1 -1
  73. data/spec/java/ant_spec.rb +1 -1
  74. data/spec/java/bdd_spec.rb +1 -1
  75. data/spec/java/cobertura_spec.rb +29 -2
  76. data/spec/java/commands_spec.rb +61 -2
  77. data/spec/java/compiler_spec.rb +3 -3
  78. data/spec/java/ecj_spec.rb +115 -0
  79. data/spec/java/emma_spec.rb +1 -1
  80. data/spec/java/external_spec.rb +10 -8
  81. data/spec/java/java_spec.rb +14 -6
  82. data/spec/java/packaging_spec.rb +41 -15
  83. data/spec/java/test_coverage_helper.rb +1 -1
  84. data/spec/java/tests_spec.rb +1 -1
  85. data/spec/packaging/archive_spec.rb +12 -1
  86. data/spec/packaging/artifact_namespace_spec.rb +1 -1
  87. data/spec/packaging/artifact_spec.rb +197 -7
  88. data/spec/packaging/packaging_spec.rb +12 -12
  89. data/spec/sandbox.rb +8 -3
  90. data/spec/scala/bdd_spec.rb +3 -3
  91. data/spec/scala/compiler_spec.rb +7 -7
  92. data/spec/scala/scala.rb +3 -3
  93. data/spec/scala/tests_spec.rb +3 -3
  94. data/spec/spec_helpers.rb +11 -1
  95. data/spec/version_requirement_spec.rb +1 -1
  96. metadata +212 -81
  97. data/rakelib/jekylltask.rb +0 -120
@@ -60,11 +60,10 @@ module Buildr
60
60
  spec.mark_version
61
61
  spec.validate
62
62
 
63
- File.open(name, 'w') do |io|
63
+ File.open(name, 'wb') do |io|
64
64
  Gem::Package.open(io, 'w', nil) do |pkg|
65
65
  pkg.metadata = spec.to_yaml
66
66
  file_map.each do |path, content|
67
- p "path #{path} content #{content}"
68
67
  next if content.nil? || File.directory?(content.to_s)
69
68
  pkg.add_file_simple(path, File.stat(content.to_s).mode & 0777, File.size(content.to_s)) do |os|
70
69
  File.open(content.to_s, "rb") do |file|
@@ -88,7 +87,7 @@ module Buildr
88
87
  end
89
88
  gem.spec do |spec|
90
89
  spec.name = id
91
- spec.version = version
90
+ spec.version = version.gsub('-','.') # RubyGems doesn't like '-' in version numbers
92
91
  spec.summary = full_comment
93
92
  spec.has_rdoc = true
94
93
  spec.rdoc_options << '--title' << comment
@@ -106,7 +106,7 @@ module Buildr
106
106
  # end
107
107
  #
108
108
  # Two other packaging types are:
109
- # * package :sources -- Creates a ZIP file with the source code and classifier 'sources', for use by IDEs.
109
+ # * package :sources -- Creates a JAR file with the source code and classifier 'sources', for use by IDEs.
110
110
  # * package :javadoc -- Creates a ZIP file with the Javadocs and classifier 'javadoc'. You can use the
111
111
  # javadoc method to further customize it.
112
112
  #
@@ -124,11 +124,11 @@ module Buildr
124
124
  #
125
125
  # The file name is determined from the specification passed to the package method, however, some
126
126
  # packagers need to override this. For example, package(:sources) produces a file with the extension
127
- # 'zip' and the classifier 'sources'. If you need to overwrite the default implementation, you should
127
+ # 'jar' and the classifier 'sources'. If you need to overwrite the default implementation, you should
128
128
  # also include a method named package_as_[type]_spec. For example:
129
129
  # def package_as_sources_spec(spec) #:nodoc:
130
- # # Change the source distribution to .jar extension
131
- # spec.merge({ :type=>:jar, :classifier=>'sources' })
130
+ # # Change the source distribution to .zip extension
131
+ # spec.merge({ :type=>:zip, :classifier=>'sources' })
132
132
  # end
133
133
  def package(*args)
134
134
  spec = Hash === args.last ? args.pop.dup : {}
@@ -168,7 +168,6 @@ module Buildr
168
168
  task 'package'=>package
169
169
  package.enhance [task('build')]
170
170
  package.enhance { info "Packaging #{File.basename(file_name)}" }
171
-
172
171
  if spec[:file]
173
172
  class << package ; self ; end.send(:define_method, :type) { spec[:type] }
174
173
  class << package ; self ; end.send(:define_method, :id) { nil }
@@ -176,19 +175,27 @@ module Buildr
176
175
  # Make it an artifact using the specifications, and tell it how to create a POM.
177
176
  package.extend ActsAsArtifact
178
177
  package.send :apply_spec, spec.only(*Artifact::ARTIFACT_ATTRIBUTES)
179
- # Another task to create the POM file.
180
- pom = package.pom
181
- pom.enhance do
182
- mkpath File.dirname(pom.name)
183
- File.open(pom.name, 'w') { |file| file.write pom.pom_xml }
178
+
179
+ # Create pom associated with package
180
+ class << package
181
+ def pom
182
+ unless @pom
183
+ pom_filename = Util.replace_extension(self.name, 'pom')
184
+ spec = {:group=>group, :id=>id, :version=>version, :type=>:pom}
185
+ @pom = Buildr.artifact(spec, pom_filename)
186
+ @pom.content @pom.pom_xml
187
+ end
188
+ @pom
189
+ end
184
190
  end
191
+
185
192
  file(Buildr.repositories.locate(package)=>package) { package.install }
186
193
 
187
194
  # Add the package to the list of packages created by this project, and
188
195
  # register it as an artifact. The later is required so if we look up the spec
189
196
  # we find the package in the project's target directory, instead of finding it
190
197
  # in the local repository and attempting to install it.
191
- Artifact.register package, pom
198
+ Artifact.register package, package.pom
192
199
  end
193
200
 
194
201
  task('install') { package.install if package.respond_to?(:install) }
@@ -225,7 +232,7 @@ module Buildr
225
232
  alias :package_as_tgz :package_as_tar
226
233
 
227
234
  def package_as_sources_spec(spec) #:nodoc:
228
- spec.merge(:type=>:zip, :classifier=>'sources')
235
+ spec.merge(:type=>:jar, :classifier=>'sources')
229
236
  end
230
237
 
231
238
  def package_as_sources(file_name) #:nodoc:
@@ -15,7 +15,7 @@
15
15
 
16
16
 
17
17
  require 'buildr/packaging/archive'
18
- gem 'archive-tar-minitar' ; autoload :Archive, 'archive/tar/minitar'
18
+ gem 'minitar' ; autoload :Archive, 'archive/tar/minitar'
19
19
 
20
20
 
21
21
  module Buildr
@@ -160,7 +160,7 @@ module Buildr
160
160
  trace "Extracting #{dest}"
161
161
  mkpath File.dirname(dest) rescue nil
162
162
  #entry.restore_permissions = true
163
- File.open(dest, 'w') {|f| f.write entry.read}
163
+ File.open(dest, 'wb') {|f| f.write entry.read}
164
164
  end
165
165
  end
166
166
  end
@@ -32,19 +32,23 @@ module Buildr::Scala
32
32
  @lang = :scala
33
33
  @bdd_dir = :spec
34
34
 
35
- VERSION = '1.6.2.1'
35
+ VERSION = '1.6.5'
36
36
 
37
37
  class << self
38
38
  def version
39
39
  Buildr.settings.build['scala.specs'] || VERSION
40
40
  end
41
41
 
42
+ def artifact
43
+ Buildr.settings.build['scala.specs.artifact'] || "specs_#{Buildr::Scala.version}"
44
+ end
45
+
42
46
  def dependencies
43
47
  unless @dependencies
44
48
  super
49
+ specs = (version =~ /:/) ? [version] : ["org.scala-tools.testing:#{artifact}:jar:#{version}"]
45
50
  # Add utility classes (e.g. SpecsSingletonRunner) and other dependencies
46
- @dependencies |= [ File.join(File.dirname(__FILE__)) ] +
47
- ["org.scala-tools.testing:specs:jar:#{version}"] +
51
+ @dependencies |= [ File.join(File.dirname(__FILE__)) ] + specs +
48
52
  Check.dependencies + JUnit.dependencies + Scalac.dependencies
49
53
  end
50
54
  @dependencies
@@ -19,7 +19,7 @@ require 'buildr/core/compile'
19
19
  require 'buildr/packaging'
20
20
 
21
21
  module Buildr::Scala
22
- DEFAULT_VERSION = '2.7.7' # currently the latest (Oct 31, 2009)
22
+ DEFAULT_VERSION = '2.8.0'
23
23
 
24
24
  class << self
25
25
 
@@ -225,7 +225,7 @@ module Buildr::Scala
225
225
  def scalac_args #:nodoc:
226
226
  args = []
227
227
  args << "-nowarn" unless options[:warnings]
228
- args << "-verbose" if Buildr.application.options.trace
228
+ args << "-verbose" if trace?(:scalac)
229
229
  args << "-g" if options[:debug]
230
230
  args << "-deprecation" if options[:deprecation]
231
231
  args << "-optimise" if options[:optimise]
@@ -22,7 +22,7 @@ module Buildr
22
22
  specify :language => :scala, :source_ext => 'scala'
23
23
 
24
24
  def generate(sources, target, options = {})
25
- cmd_args = [ '-d', target, Buildr.application.options.trace ? '-verbose' : '' ]
25
+ cmd_args = [ '-d', target, trace?(:scaladoc) ? '-verbose' : '' ]
26
26
  options.reject { |key, value| [:sourcepath, :classpath].include?(key) }.
27
27
  each { |key, value| value.invoke if value.respond_to?(:invoke) }.
28
28
  each do |key, value|
@@ -54,7 +54,7 @@ module Buildr
54
54
  end
55
55
 
56
56
  class VScaladoc < Base
57
- VERSION = '1.2-SNAPSHOT'
57
+ VERSION = '1.2-m1'
58
58
  Buildr.repositories.remote << 'http://scala-tools.org/repo-snapshots'
59
59
 
60
60
  class << self
@@ -68,7 +68,7 @@ module Buildr
68
68
  specify :language => :scala, :source_ext => 'scala'
69
69
 
70
70
  def generate(sources, target, options = {})
71
- cmd_args = [ '-d', target, (Buildr.application.options.trace ? '-verbose' : ''),
71
+ cmd_args = [ '-d', target, (trace?(:vscaladoc) ? '-verbose' : ''),
72
72
  '-sourcepath', project.compile.sources.join(File::PATH_SEPARATOR) ]
73
73
  options.reject { |key, value| [:sourcepath, :classpath].include?(key) }.
74
74
  each { |key, value| value.invoke if value.respond_to?(:invoke) }.
@@ -23,7 +23,7 @@ require 'buildr/java/tests'
23
23
  module Buildr::Scala
24
24
  # Scala::Check is available when using Scala::Test or Scala::Specs
25
25
  module Check
26
- VERSION = '1.6'
26
+ VERSION = '1.7'
27
27
 
28
28
  class << self
29
29
  def version
@@ -34,8 +34,12 @@ module Buildr::Scala
34
34
  Buildr.settings.build['scala.check.classifier'] || ""
35
35
  end
36
36
 
37
+ def artifact
38
+ Buildr.settings.build['scala.check.artifact'] || "scalacheck_#{Buildr::Scala.version}"
39
+ end
40
+
37
41
  def dependencies
38
- ["org.scala-tools.testing:scalacheck:jar:#{classifier}:#{version}"]
42
+ (version =~ /:/) ? [version] : ["org.scala-tools.testing:#{artifact}:jar:#{classifier}:#{version}"]
39
43
  end
40
44
 
41
45
  private
@@ -56,7 +60,7 @@ module Buildr::Scala
56
60
  # * :java_args -- Arguments passed as is to the JVM.
57
61
  class ScalaTest < Buildr::TestFramework::Java
58
62
 
59
- VERSION = '1.0.1'
63
+ VERSION = '1.2'
60
64
 
61
65
  class << self
62
66
  def version
@@ -0,0 +1,18 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with this
3
+ # work for additional information regarding copyright ownership. The ASF
4
+ # licenses this file to you under the Apache License, Version 2.0 (the
5
+ # "License"); you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations under
14
+ # the License.
15
+
16
+ module Buildr
17
+ VERSION = '1.4.2'.freeze
18
+ end
@@ -18,7 +18,7 @@ task "all-in-one" => 'all-in-one:all-in-one'
18
18
 
19
19
  namespace :'all-in-one' do
20
20
 
21
- version = "1.5.1"
21
+ version = "1.5.2"
22
22
  jruby_distro = "jruby-bin-#{version}.tar.gz"
23
23
  url = "http://jruby.org.s3.amazonaws.com/downloads/#{version}/#{jruby_distro}"
24
24
  dir = "jruby-#{version}"
@@ -36,7 +36,17 @@ end
36
36
 
37
37
 
38
38
  begin
39
- require 'rakelib/jekylltask'
39
+ require 'jekylltask'
40
+ module TocFilter
41
+ def toc(input)
42
+ input.scan(/<(h2)(?:>|\s+(.*?)>)([^<]*)<\/\1\s*>/mi).inject(%{<ol class="toc">}) { |toc, entry|
43
+ id = entry[1][/^id=(['"])(.*)\1$/, 2]
44
+ title = entry[2].gsub(/<(\w*).*?>(.*?)<\/\1\s*>/m, '\2').strip
45
+ toc << %{<li><a href="##{id}">#{title}</a></li>}
46
+ } << "</ol>"
47
+ end
48
+ end
49
+ Liquid::Template.register_filter(TocFilter)
40
50
 
41
51
  desc "Generate Buildr documentation in _site/"
42
52
  JekyllTask.new :jekyll do |task|
@@ -45,9 +55,9 @@ begin
45
55
  end
46
56
 
47
57
  rescue LoadError
48
- puts "Buildr uses the mojombo-jekyll to generate the Web site. You can install it by running rake doc:setup"
58
+ puts "Buildr uses the jekyll gem to generate the Web site. You can install it by running rake doc:setup"
49
59
  task 'doc:setup' do
50
- install_gem 'mojombo-jekyll', :source=>'http://gems.github.com', :version=>'0.5.4'
60
+ install_gem 'jekyll', :version=>'0.6.2'
51
61
  if `pygmentize -V`.empty?
52
62
  args = %w{easy_install Pygments}
53
63
  args.unshift 'sudo' unless Config::CONFIG['host_os'] =~ /windows/
@@ -0,0 +1,39 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with this
3
+ # work for additional information regarding copyright ownership. The ASF
4
+ # licenses this file to you under the Apache License, Version 2.0 (the
5
+ # "License"); you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations under
14
+ # the License.
15
+
16
+ namespace :metrics do
17
+ desc 'run Saikuro reports'
18
+ task :saikuro do
19
+ gem 'atoulme-Saikuro'
20
+ require 'saikuro'
21
+ output_dir = File.expand_path(File.join(File.dirname(__FILE__), "..", "_reports", "saikuro"))
22
+ base_dir = Pathname.new(File.expand_path(File.join(File.dirname(__FILE__), "..")))
23
+ rb_files = ["lib", "addon"].collect { |folder|
24
+ FileList[File.expand_path(File.join(File.dirname(__FILE__), "..", folder, "**", "*.rb"))]
25
+ }.flatten.collect {|path|
26
+ Pathname.new(path).relative_path_from(base_dir).to_s
27
+ }
28
+ SaikuroRunner.new.run(rb_files, output_dir)
29
+ end
30
+
31
+ desc 'generate ccn treemap'
32
+ task :ccn_treemap do
33
+ require 'saikuro_treemap'
34
+ SaikuroTreemap.generate_treemap :code_dirs => ['lib', 'addon'], :output_file => "_reports/saikuro_treemap.html"
35
+ end
36
+ end
37
+
38
+ desc 'Run all metrics tools'
39
+ task :metrics => ["metrics:saikuro", "metrics:ccn_treemap"]
@@ -14,7 +14,7 @@
14
14
  # the License.
15
15
 
16
16
 
17
- require File.join(File.dirname(__FILE__), '../spec_helpers')
17
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helpers'))
18
18
 
19
19
 
20
20
  describe Buildr::Application do
@@ -164,34 +164,34 @@ describe Buildr::Application do
164
164
 
165
165
  it 'should fail if required gem not found in remote repository' do
166
166
  Buildr.application.should_receive(:listed_gems).and_return([Gem::Dependency.new('foo', '>=1.1')])
167
- Gem::SourceInfoCache.should_receive(:search).and_return([])
167
+ Gem.source_index.should_receive(:search).at_least(:once).and_return([])
168
168
  lambda { Buildr.application.load_gems }.should raise_error(LoadError, /cannot be found/i)
169
169
  end
170
170
 
171
171
  it 'should fail if need to install gem and not running in interactive mode' do
172
172
  Buildr.application.should_receive(:listed_gems).and_return([Gem::Dependency.new('foo', '>=1.1')])
173
- Gem::SourceInfoCache.should_receive(:search).and_return([@spec])
173
+ Gem.source_index.should_receive(:search).and_return([@spec])
174
174
  $stdout.should_receive(:isatty).and_return(false)
175
175
  lambda { Buildr.application.load_gems }.should raise_error(LoadError, /this build requires the gems/i)
176
176
  end
177
177
 
178
178
  it 'should ask permission before installing required gems' do
179
179
  Buildr.application.should_receive(:listed_gems).and_return([Gem::Dependency.new('foo', '>=1.1')])
180
- Gem::SourceInfoCache.should_receive(:search).and_return([@spec])
180
+ Gem.source_index.should_receive(:search).and_return([@spec])
181
181
  $terminal.should_receive(:agree).with(/install/, true)
182
182
  lambda { Buildr.application.load_gems }.should raise_error
183
183
  end
184
184
 
185
185
  it 'should fail if permission not granted to install gem' do
186
186
  Buildr.application.should_receive(:listed_gems).and_return([Gem::Dependency.new('foo', '>=1.1')])
187
- Gem::SourceInfoCache.should_receive(:search).and_return([@spec])
187
+ Gem.source_index.should_receive(:search).and_return([@spec])
188
188
  $terminal.should_receive(:agree).and_return(false)
189
189
  lambda { Buildr.application.load_gems }.should raise_error(LoadError, /cannot build without/i)
190
190
  end
191
191
 
192
192
  it 'should install gem if permission granted' do
193
193
  Buildr.application.should_receive(:listed_gems).and_return([Gem::Dependency.new('foo', '>=1.1')])
194
- Gem::SourceInfoCache.should_receive(:search).and_return([@spec])
194
+ Gem.source_index.should_receive(:search).and_return([@spec])
195
195
  $terminal.should_receive(:agree).and_return(true)
196
196
  Util.should_receive(:ruby) do |*args|
197
197
  args.should include('install', 'foo', '-v', '1.2')
@@ -202,7 +202,7 @@ describe Buildr::Application do
202
202
 
203
203
  it 'should reload gem cache after installing required gems' do
204
204
  Buildr.application.should_receive(:listed_gems).and_return([Gem::Dependency.new('foo', '>=1.1')])
205
- Gem::SourceInfoCache.should_receive(:search).and_return([@spec])
205
+ Gem.source_index.should_receive(:search).and_return([@spec])
206
206
  $terminal.should_receive(:agree).and_return(true)
207
207
  Util.should_receive(:ruby)
208
208
  Gem.source_index.should_receive(:load_gems_in).with(Gem::SourceIndex.installed_spec_directories)
@@ -218,7 +218,7 @@ describe Buildr::Application do
218
218
 
219
219
  it 'should load newly installed gems' do
220
220
  Buildr.application.should_receive(:listed_gems).and_return([Gem::Dependency.new('foo', '>=1.1')])
221
- Gem::SourceInfoCache.should_receive(:search).and_return([@spec])
221
+ Gem.source_index.should_receive(:search).and_return([@spec])
222
222
  $terminal.should_receive(:agree).and_return(true)
223
223
  Util.should_receive(:ruby)
224
224
  Buildr.application.should_receive(:gem).with('foo', @spec.version.to_s)
@@ -227,25 +227,26 @@ describe Buildr::Application do
227
227
 
228
228
  it 'should default to >=0 version requirement if not specified' do
229
229
  write 'build.yaml', 'gems: foo'
230
- Gem::SourceInfoCache.should_receive(:search).with(Gem::Dependency.new('foo', '>=0')).and_return([])
230
+ $terminal.should_receive(:agree).and_return(true)
231
+ Gem.source_index.should_receive(:search).with(Gem::Dependency.new('foo', '>=0')).and_return([])
231
232
  lambda { Buildr.application.load_gems }.should raise_error
232
233
  end
233
234
 
234
235
  it 'should parse exact version requirement' do
235
236
  write 'build.yaml', 'gems: foo 2.5'
236
- Gem::SourceInfoCache.should_receive(:search).with(Gem::Dependency.new('foo', '=2.5')).and_return([])
237
+ Gem.source_index.should_receive(:search).with(Gem::Dependency.new('foo', '=2.5')).and_return([])
237
238
  lambda { Buildr.application.load_gems }.should raise_error
238
239
  end
239
240
 
240
241
  it 'should parse range version requirement' do
241
242
  write 'build.yaml', 'gems: foo ~>2.3'
242
- Gem::SourceInfoCache.should_receive(:search).with(Gem::Dependency.new('foo', '~>2.3')).and_return([])
243
+ Gem.source_index.should_receive(:search).with(Gem::Dependency.new('foo', '~>2.3')).and_return([])
243
244
  lambda { Buildr.application.load_gems }.should raise_error
244
245
  end
245
246
 
246
247
  it 'should parse multiple version requirements' do
247
248
  write 'build.yaml', 'gems: foo >=2.0 !=2.1'
248
- Gem::SourceInfoCache.should_receive(:search).with(Gem::Dependency.new('foo', ['>=2.0', '!=2.1'])).and_return([])
249
+ Gem.source_index.should_receive(:search).with(Gem::Dependency.new('foo', ['>=2.0', '!=2.1'])).and_return([])
249
250
  lambda { Buildr.application.load_gems }.should raise_error
250
251
  end
251
252
  end
@@ -14,8 +14,7 @@
14
14
  # the License.
15
15
 
16
16
 
17
- require File.join(File.dirname(__FILE__), '../spec_helpers')
18
-
17
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helpers'))
19
18
 
20
19
  describe 'local task', :shared=>true do
21
20
  it "should execute task for project in current directory" do
@@ -407,12 +406,158 @@ describe 'a release process', :shared=>true do
407
406
  @release.make
408
407
  file('buildfile').should contain('VERSION_NUMBER = "1.0.002-SNAPSHOT"')
409
408
  end
410
-
409
+
411
410
  it 'should commit the updated buildfile' do
412
411
  @release.stub!(:tag_release)
413
412
  @release.make
414
413
  file('buildfile').should contain('VERSION_NUMBER = "1.0.1-SNAPSHOT"')
415
414
  end
415
+
416
+ it 'should not consider "-rc" as "-SNAPSHOT"' do
417
+ write 'buildfile', "VERSION_NUMBER = '1.0.0-rc1'"
418
+ @release.stub!(:tag_release)
419
+ @release.make
420
+ file('buildfile').should contain('VERSION_NUMBER = "1.0.0-rc1"')
421
+ end
422
+
423
+ it 'should only commit the updated buildfile if the version changed' do
424
+ write 'buildfile', "VERSION_NUMBER = '1.0.0-rc1'"
425
+ @release.should_not_receive(:update_version_to_next)
426
+ @release.stub!(:tag_release)
427
+ @release.make
428
+ end
429
+ end
430
+
431
+ describe '#resolve_next_version' do
432
+
433
+ it 'should increment the version number if SNAPSHOT' do
434
+ @release.send(:resolve_next_version, "1.0.0-SNAPSHOT").should == '1.0.1-SNAPSHOT'
435
+ end
436
+
437
+ it 'should NOT increment the version number if no SNAPSHOT' do
438
+ @release.send(:resolve_next_version, "1.0.0").should == '1.0.0'
439
+ end
440
+
441
+ it 'should return the version specified by NEXT_VERSION env var' do
442
+ ENV['NEXT_VERSION'] = "version_from_env"
443
+ @release.send(:resolve_next_version, "1.0.0").should == 'version_from_env'
444
+ end
445
+
446
+ it 'should return the version specified by next_version' do
447
+ Release.next_version = "ze_next_version"
448
+ @release.send(:resolve_next_version, "1.0.0").should == 'ze_next_version'
449
+ end
450
+
451
+ it 'should return the version specified by next_version if next_version is a proc' do
452
+ Release.next_version = lambda {|version| "#{version}++"}
453
+ @release.send(:resolve_next_version, "1.0.0").should == '1.0.0++'
454
+ end
455
+
456
+ it "should return the version specified by 'NEXT_VERSION' env var even if next_version is non nil" do
457
+ ENV['NEXT_VERSION'] = "ze_version_from_env"
458
+ Release.next_version = lambda {|version| "#{version}++"}
459
+ @release.send(:resolve_next_version, "1.0.0").should == 'ze_version_from_env'
460
+ end
461
+
462
+ it "should return the version specified by 'next_version' env var even if next_version is non nil" do
463
+ ENV['NEXT_VERSION'] = nil
464
+ ENV['next_version'] = "ze_version_from_env_lowercase"
465
+ Release.next_version = lambda {|version| "#{version}++"}
466
+ @release.send(:resolve_next_version, "1.0.0").should == 'ze_version_from_env_lowercase'
467
+ end
468
+ after {
469
+ Release.next_version = nil
470
+ ENV['NEXT_VERSION'] = nil
471
+ ENV['next_version'] = nil
472
+ }
473
+ end
474
+
475
+ describe '#resolve_next_version' do
476
+
477
+ it 'should increment the version number if SNAPSHOT' do
478
+ @release.send(:resolve_next_version, "1.0.0-SNAPSHOT").should == '1.0.1-SNAPSHOT'
479
+ end
480
+
481
+ it 'should NOT increment the version number if no SNAPSHOT' do
482
+ @release.send(:resolve_next_version, "1.0.0").should == '1.0.0'
483
+ end
484
+
485
+ it 'should return the version specified by NEXT_VERSION env var' do
486
+ ENV['NEXT_VERSION'] = "version_from_env"
487
+ @release.send(:resolve_next_version, "1.0.0").should == 'version_from_env'
488
+ end
489
+
490
+ it 'should return the version specified by next_version' do
491
+ Release.next_version = "ze_next_version"
492
+ @release.send(:resolve_next_version, "1.0.0").should == 'ze_next_version'
493
+ end
494
+
495
+ it 'should return the version specified by next_version if next_version is a proc' do
496
+ Release.next_version = lambda {|version| "#{version}++"}
497
+ @release.send(:resolve_next_version, "1.0.0").should == '1.0.0++'
498
+ end
499
+
500
+ it "should return the version specified by 'NEXT_VERSION' env var even if next_version is non nil" do
501
+ ENV['NEXT_VERSION'] = "ze_version_from_env"
502
+ Release.next_version = lambda {|version| "#{version}++"}
503
+ @release.send(:resolve_next_version, "1.0.0").should == 'ze_version_from_env'
504
+ end
505
+
506
+ it "should return the version specified by 'next_version' env var even if next_version is non nil" do
507
+ ENV['NEXT_VERSION'] = nil
508
+ ENV['next_version'] = "ze_version_from_env_lowercase"
509
+ Release.next_version = lambda {|version| "#{version}++"}
510
+ @release.send(:resolve_next_version, "1.0.0").should == 'ze_version_from_env_lowercase'
511
+ end
512
+ after {
513
+ Release.next_version = nil
514
+ ENV['NEXT_VERSION'] = nil
515
+ ENV['next_version'] = nil
516
+ }
517
+ end
518
+
519
+ describe '#resolve_next_version' do
520
+
521
+ it 'should increment the version number if SNAPSHOT' do
522
+ @release.send(:resolve_next_version, "1.0.0-SNAPSHOT").should == '1.0.1-SNAPSHOT'
523
+ end
524
+
525
+ it 'should NOT increment the version number if no SNAPSHOT' do
526
+ @release.send(:resolve_next_version, "1.0.0").should == '1.0.0'
527
+ end
528
+
529
+ it 'should return the version specified by NEXT_VERSION env var' do
530
+ ENV['NEXT_VERSION'] = "version_from_env"
531
+ @release.send(:resolve_next_version, "1.0.0").should == 'version_from_env'
532
+ end
533
+
534
+ it 'should return the version specified by next_version' do
535
+ Release.next_version = "ze_next_version"
536
+ @release.send(:resolve_next_version, "1.0.0").should == 'ze_next_version'
537
+ end
538
+
539
+ it 'should return the version specified by next_version if next_version is a proc' do
540
+ Release.next_version = lambda {|version| "#{version}++"}
541
+ @release.send(:resolve_next_version, "1.0.0").should == '1.0.0++'
542
+ end
543
+
544
+ it "should return the version specified by 'NEXT_VERSION' env var even if next_version is non nil" do
545
+ ENV['NEXT_VERSION'] = "ze_version_from_env"
546
+ Release.next_version = lambda {|version| "#{version}++"}
547
+ @release.send(:resolve_next_version, "1.0.0").should == 'ze_version_from_env'
548
+ end
549
+
550
+ it "should return the version specified by 'next_version' env var even if next_version is non nil" do
551
+ ENV['NEXT_VERSION'] = nil
552
+ ENV['next_version'] = "ze_version_from_env_lowercase"
553
+ Release.next_version = lambda {|version| "#{version}++"}
554
+ @release.send(:resolve_next_version, "1.0.0").should == 'ze_version_from_env_lowercase'
555
+ end
556
+ after {
557
+ Release.next_version = nil
558
+ ENV['NEXT_VERSION'] = nil
559
+ ENV['next_version'] = nil
560
+ }
416
561
  end
417
562
 
418
563
  describe '#resolve_tag' do
@@ -487,12 +632,14 @@ describe 'a release process', :shared=>true do
487
632
 
488
633
  describe '#update_version_to_next' do
489
634
  before do
490
- write 'buildfile', 'THIS_VERSION = "1.0.0"'
635
+ write 'buildfile', "VERSION_NUMBER = '1.0.5-SNAPSHOT'"
636
+ @release.send(:this_version=, "1.0.5-SNAPSHOT")
491
637
  end
492
638
 
493
639
  it 'should update the buildfile with a new version number' do
494
640
  @release.send :update_version_to_next
495
- file('buildfile').should contain('THIS_VERSION = "1.0.1-SNAPSHOT"')
641
+ `cp buildfile /tmp/out`
642
+ file('buildfile').should contain('VERSION_NUMBER = "1.0.6-SNAPSHOT"')
496
643
  end
497
644
 
498
645
  it 'should commit the new buildfile on the trunk' do
@@ -516,11 +663,19 @@ describe 'a release process', :shared=>true do
516
663
  end
517
664
 
518
665
  it 'should inform the user of the new version' do
519
- lambda { @release.update_version_to_next }.should show_info('Current version is now 1.0.1-SNAPSHOT')
666
+ lambda { @release.update_version_to_next }.should show_info('Current version is now 1.0.6-SNAPSHOT')
520
667
  end
521
668
  after { Release.commit_message = nil }
522
669
  end
523
670
 
671
+
672
+ describe '#check' do
673
+ before { @release.send(:this_version=, "1.0.0-SNAPSHOT") }
674
+ it 'should fail if THIS_VERSION equals the next_version' do
675
+ @release.stub!(:resolve_next_version).and_return('1.0.0-SNAPSHOT')
676
+ lambda { @release.check }.should raise_error("The next version can't be equal to the current version 1.0.0-SNAPSHOT.\nUpdate THIS_VERSION/VERSION_NUMBER, specify Release.next_version or use NEXT_VERSION env var")
677
+ end
678
+ end
524
679
  end
525
680
 
526
681
 
@@ -528,6 +683,7 @@ describe GitRelease do
528
683
  it_should_behave_like 'a release process'
529
684
 
530
685
  before do
686
+ write 'buildfile', "VERSION_NUMBER = '1.0.0-SNAPSHOT'"
531
687
  @release = GitRelease.new
532
688
  Git.stub!(:git)
533
689
  Git.stub!(:current_branch).and_return('master')
@@ -547,9 +703,10 @@ describe GitRelease do
547
703
  end
548
704
  end
549
705
 
550
- describe '#release_check' do
706
+ describe '#check' do
551
707
  before do
552
708
  @release = GitRelease.new
709
+ @release.send(:this_version=, '1.0.0-SNAPSHOT')
553
710
  end
554
711
 
555
712
  it 'should accept a clean repository' do
@@ -624,6 +781,7 @@ describe SvnRelease do
624
781
  it_should_behave_like 'a release process'
625
782
 
626
783
  before do
784
+ write 'buildfile', "VERSION_NUMBER = '1.0.0-SNAPSHOT'"
627
785
  @release = SvnRelease.new
628
786
  Svn.stub!(:svn)
629
787
  Svn.stub!(:repo_url).and_return('http://my.repo.org/foo/trunk')
@@ -645,6 +803,7 @@ describe SvnRelease do
645
803
  before do
646
804
  Svn.stub!(:uncommitted_files).and_return([])
647
805
  @release = SvnRelease.new
806
+ @release.send(:this_version=, "1.0.0-SNAPSHOT")
648
807
  end
649
808
 
650
809
  it 'should accept to release from the trunk' do