buildr 1.2.10 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. data/CHANGELOG +566 -268
  2. data/DISCLAIMER +7 -1
  3. data/KEYS +151 -0
  4. data/NOTICE +23 -8
  5. data/README +122 -22
  6. data/Rakefile +49 -229
  7. data/{lib → addon}/buildr/antlr.rb +23 -10
  8. data/addon/buildr/cobertura.rb +232 -0
  9. data/{lib → addon}/buildr/hibernate.rb +20 -4
  10. data/{lib → addon}/buildr/javacc.rb +27 -12
  11. data/addon/buildr/jdepend.rb +60 -0
  12. data/{lib → addon}/buildr/jetty.rb +34 -18
  13. data/addon/buildr/nailgun.rb +892 -0
  14. data/{lib → addon}/buildr/openjpa.rb +23 -6
  15. data/addon/buildr/org/apache/buildr/JettyWrapper$1.class +0 -0
  16. data/addon/buildr/org/apache/buildr/JettyWrapper$BuildrHandler.class +0 -0
  17. data/addon/buildr/org/apache/buildr/JettyWrapper.class +0 -0
  18. data/{lib/buildr/jetty → addon/buildr/org/apache/buildr}/JettyWrapper.java +19 -0
  19. data/{lib → addon}/buildr/xmlbeans.rb +39 -14
  20. data/bin/buildr +21 -7
  21. data/buildr.gemspec +50 -0
  22. data/doc/css/default.css +225 -0
  23. data/doc/css/print.css +95 -0
  24. data/doc/css/syntax.css +43 -0
  25. data/doc/images/apache-incubator-logo.png +0 -0
  26. data/doc/images/buildr-hires.png +0 -0
  27. data/doc/images/buildr.png +0 -0
  28. data/doc/images/note.png +0 -0
  29. data/doc/images/tip.png +0 -0
  30. data/doc/images/zbuildr.tif +0 -0
  31. data/doc/pages/artifacts.textile +317 -0
  32. data/doc/pages/building.textile +501 -0
  33. data/doc/pages/contributing.textile +178 -0
  34. data/doc/pages/download.textile +25 -0
  35. data/doc/pages/extending.textile +229 -0
  36. data/doc/pages/getting_started.textile +337 -0
  37. data/doc/pages/index.textile +63 -0
  38. data/doc/pages/mailing_lists.textile +17 -0
  39. data/doc/pages/more_stuff.textile +367 -0
  40. data/doc/pages/packaging.textile +592 -0
  41. data/doc/pages/projects.textile +449 -0
  42. data/doc/pages/recipes.textile +127 -0
  43. data/doc/pages/settings_profiles.textile +339 -0
  44. data/doc/pages/testing.textile +475 -0
  45. data/doc/pages/troubleshooting.textile +121 -0
  46. data/doc/pages/whats_new.textile +389 -0
  47. data/doc/print.haml +52 -0
  48. data/doc/print.toc.yaml +28 -0
  49. data/doc/scripts/buildr-git.rb +411 -0
  50. data/doc/scripts/install-jruby.sh +44 -0
  51. data/doc/scripts/install-linux.sh +64 -0
  52. data/doc/scripts/install-osx.sh +52 -0
  53. data/doc/site.haml +55 -0
  54. data/doc/site.toc.yaml +44 -0
  55. data/lib/buildr.rb +28 -45
  56. data/lib/buildr/core.rb +27 -0
  57. data/lib/buildr/core/application.rb +373 -0
  58. data/lib/buildr/core/application_cli.rb +134 -0
  59. data/lib/{core → buildr/core}/build.rb +91 -77
  60. data/lib/{core → buildr/core}/checks.rb +116 -95
  61. data/lib/buildr/core/common.rb +155 -0
  62. data/lib/buildr/core/compile.rb +594 -0
  63. data/lib/buildr/core/environment.rb +120 -0
  64. data/lib/buildr/core/filter.rb +258 -0
  65. data/lib/{core → buildr/core}/generate.rb +22 -5
  66. data/lib/buildr/core/help.rb +118 -0
  67. data/lib/buildr/core/progressbar.rb +156 -0
  68. data/lib/{core → buildr/core}/project.rb +468 -213
  69. data/lib/buildr/core/test.rb +690 -0
  70. data/lib/{core → buildr/core}/transports.rb +107 -127
  71. data/lib/buildr/core/util.rb +235 -0
  72. data/lib/buildr/ide.rb +19 -0
  73. data/lib/{java → buildr/ide}/eclipse.rb +86 -60
  74. data/lib/{java → buildr/ide}/idea.ipr.template +16 -0
  75. data/lib/buildr/ide/idea.rb +194 -0
  76. data/lib/buildr/ide/idea7x.ipr.template +290 -0
  77. data/lib/buildr/ide/idea7x.rb +210 -0
  78. data/lib/buildr/java.rb +26 -0
  79. data/lib/buildr/java/ant.rb +71 -0
  80. data/lib/buildr/java/bdd_frameworks.rb +267 -0
  81. data/lib/buildr/java/commands.rb +210 -0
  82. data/lib/buildr/java/compilers.rb +432 -0
  83. data/lib/buildr/java/deprecated.rb +141 -0
  84. data/lib/buildr/java/groovyc.rb +137 -0
  85. data/lib/buildr/java/jruby.rb +99 -0
  86. data/lib/buildr/java/org/apache/buildr/BuildrNail$Main.class +0 -0
  87. data/lib/buildr/java/org/apache/buildr/BuildrNail.class +0 -0
  88. data/lib/buildr/java/org/apache/buildr/BuildrNail.java +41 -0
  89. data/lib/buildr/java/org/apache/buildr/JavaTestFilter.class +0 -0
  90. data/lib/buildr/java/org/apache/buildr/JavaTestFilter.java +116 -0
  91. data/lib/buildr/java/packaging.rb +706 -0
  92. data/lib/{java → buildr/java}/pom.rb +20 -4
  93. data/lib/buildr/java/rjb.rb +142 -0
  94. data/lib/buildr/java/test_frameworks.rb +290 -0
  95. data/lib/buildr/java/version_requirement.rb +172 -0
  96. data/lib/buildr/packaging.rb +21 -0
  97. data/lib/{java → buildr/packaging}/artifact.rb +170 -179
  98. data/lib/buildr/packaging/artifact_namespace.rb +957 -0
  99. data/lib/buildr/packaging/artifact_search.rb +140 -0
  100. data/lib/buildr/packaging/gems.rb +102 -0
  101. data/lib/buildr/packaging/package.rb +233 -0
  102. data/lib/{tasks → buildr/packaging}/tar.rb +18 -1
  103. data/lib/{tasks → buildr/packaging}/zip.rb +153 -105
  104. data/rakelib/apache.rake +126 -0
  105. data/rakelib/changelog.rake +56 -0
  106. data/rakelib/doc.rake +103 -0
  107. data/rakelib/package.rake +44 -0
  108. data/rakelib/release.rake +53 -0
  109. data/rakelib/rspec.rake +81 -0
  110. data/rakelib/rubyforge.rake +45 -0
  111. data/rakelib/scm.rake +49 -0
  112. data/rakelib/setup.rake +59 -0
  113. data/rakelib/stage.rake +45 -0
  114. data/spec/application_spec.rb +316 -0
  115. data/spec/archive_spec.rb +494 -0
  116. data/spec/artifact_namespace_spec.rb +635 -0
  117. data/spec/artifact_spec.rb +738 -0
  118. data/spec/build_spec.rb +193 -0
  119. data/spec/checks_spec.rb +537 -0
  120. data/spec/common_spec.rb +579 -0
  121. data/spec/compile_spec.rb +561 -0
  122. data/spec/groovy_compilers_spec.rb +239 -0
  123. data/spec/java_bdd_frameworks_spec.rb +238 -0
  124. data/spec/java_compilers_spec.rb +446 -0
  125. data/spec/java_packaging_spec.rb +1042 -0
  126. data/spec/java_test_frameworks_spec.rb +414 -0
  127. data/spec/packaging_helper.rb +63 -0
  128. data/spec/packaging_spec.rb +589 -0
  129. data/spec/project_spec.rb +739 -0
  130. data/spec/sandbox.rb +116 -0
  131. data/spec/scala_compilers_spec.rb +239 -0
  132. data/spec/spec.opts +6 -0
  133. data/spec/spec_helpers.rb +283 -0
  134. data/spec/test_spec.rb +871 -0
  135. data/spec/transport_spec.rb +300 -0
  136. data/spec/version_requirement_spec.rb +115 -0
  137. metadata +188 -77
  138. data/lib/buildr/cobertura.rb +0 -89
  139. data/lib/buildr/jdepend.rb +0 -40
  140. data/lib/buildr/jetty/JettyWrapper$1.class +0 -0
  141. data/lib/buildr/jetty/JettyWrapper$BuildrHandler.class +0 -0
  142. data/lib/buildr/jetty/JettyWrapper.class +0 -0
  143. data/lib/buildr/scala.rb +0 -368
  144. data/lib/core/application.rb +0 -188
  145. data/lib/core/common.rb +0 -562
  146. data/lib/core/help.rb +0 -72
  147. data/lib/core/rake_ext.rb +0 -81
  148. data/lib/java/ant.rb +0 -71
  149. data/lib/java/compile.rb +0 -589
  150. data/lib/java/idea.rb +0 -159
  151. data/lib/java/java.rb +0 -432
  152. data/lib/java/packaging.rb +0 -581
  153. data/lib/java/test.rb +0 -795
  154. data/lib/tasks/concat.rb +0 -35
@@ -1,6 +1,23 @@
1
- require 'tasks/zip'
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
+
17
+ require 'buildr/packaging/zip'
2
18
  require 'archive/tar/minitar'
3
19
 
20
+
4
21
  module Buildr
5
22
 
6
23
  # The TarTask creates a new Tar file. You can include any number of files and and directories,
@@ -1,5 +1,21 @@
1
- require "zip/zip"
2
- require "zip/zipfilesystem"
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
+
17
+ require 'zip/zip'
18
+ require 'zip/zipfilesystem'
3
19
 
4
20
 
5
21
  module Buildr
@@ -16,7 +32,7 @@ module Buildr
16
32
 
17
33
  def initialize(root, path)
18
34
  @root = root
19
- @path = path.blank? ? path : "#{path}/"
35
+ @path = path.empty? ? path : "#{path}/"
20
36
  @includes = FileList[]
21
37
  @excludes = []
22
38
  # Expand source files added to this path.
@@ -29,11 +45,11 @@ module Buildr
29
45
  if File.directory?(path)
30
46
  in_directory path do |file, rel_path|
31
47
  dest = "#{@path}#{rel_path}"
32
- puts "Adding #{dest}" if Rake.application.options.trace
48
+ puts "Adding #{dest}" if Buildr.application.options.trace
33
49
  file_map[dest] = file
34
50
  end
35
51
  else
36
- puts "Adding #{@path}#{File.basename(path)}" if Rake.application.options.trace
52
+ puts "Adding #{@path}#{File.basename(path)}" if Buildr.application.options.trace
37
53
  file_map["#{@path}#{File.basename(path)}"] = path
38
54
  end
39
55
  end
@@ -57,22 +73,23 @@ module Buildr
57
73
  sans_path = options.reject { |k,v| k == :path }
58
74
  path(options[:path]).include *files + [sans_path]
59
75
  elsif options[:as]
60
- raise "You can only use the :as option in combination with the :path option" unless options.size == 1
61
- raise "You can only use one file with the :as option" unless files.size == 1
76
+ raise 'You can only use the :as option in combination with the :path option' unless options.size == 1
77
+ raise 'You can only use one file with the :as option' unless files.size == 1
62
78
  include_as files.first.to_s, options[:as]
63
79
  elsif options[:from]
64
- raise "You can only use the :from option in combination with the :path option" unless options.size == 1
65
- raise "You canont use the :from option with file names" unless files.empty?
66
- [options[:from]].flatten.each { |path| include_as path.to_s, "." }
80
+ raise 'You can only use the :from option in combination with the :path option' unless options.size == 1
81
+ raise 'You canont use the :from option with file names' unless files.empty?
82
+ [options[:from]].flatten.each { |path| include_as path.to_s, '.' }
67
83
  elsif options[:merge]
68
- raise "You can only use the :merge option in combination with the :path option" unless options.size == 1
84
+ raise 'You can only use the :merge option in combination with the :path option' unless options.size == 1
69
85
  files.each { |file| merge file }
70
86
  else
71
- raise "Unrecognized option #{options.keys.join(", ")}"
87
+ raise "Unrecognized option #{options.keys.join(', ')}"
72
88
  end
73
89
  self
74
90
  end
75
91
  alias :add :include
92
+ alias :<< :include
76
93
 
77
94
  # :call-seq:
78
95
  # exclude(*files) => self
@@ -87,28 +104,23 @@ module Buildr
87
104
  # merge(*files) => Merge
88
105
  # merge(*files, :path=>name) => Merge
89
106
  def merge(*args)
90
- options = args.pop if Hash === args.last
107
+ options = Hash === args.last ? args.pop : {}
91
108
  files = args.flatten
92
-
93
- if options.nil? || options.empty?
94
- files.collect do |file|
95
- @sources << proc { file.to_s }
96
- expander = ZipExpander.new(file)
97
- @actions << proc { |file_map| expander.expand(file_map, @path) }
98
- expander
99
- end.first
100
- elsif options[:path]
101
- sans_path = options.reject { |k,v| k == :path }
102
- path(options[:path]).merge *files + [sans_path]
103
- self
104
- else
105
- raise "Unrecognized option #{options.keys.join(", ")}"
109
+ rake_check_options options, :path
110
+ raise ArgumentError, "Expected at least one file to merge" if files.empty?
111
+ path = options[:path] || @path
112
+ expanders = files.collect do |file|
113
+ @sources << proc { file.to_s }
114
+ expander = ZipExpander.new(file)
115
+ @actions << proc { |file_map| expander.expand(file_map, path) }
116
+ expander
106
117
  end
118
+ Merge.new(expanders)
107
119
  end
108
120
 
109
121
  # Returns a Path relative to this one.
110
122
  def path(path)
111
- return self if path.blank?
123
+ return self if path.nil?
112
124
  return root.path(path[1..-1]) if path[0] == ?/
113
125
  root.path("#{@path}#{path}")
114
126
  end
@@ -135,14 +147,14 @@ module Buildr
135
147
  unless excluded?(file)
136
148
  if File.directory?(file)
137
149
  in_directory file do |file, rel_path|
138
- path = rel_path.split("/")[1..-1]
139
- path.unshift as unless as == "."
150
+ path = rel_path.split('/')[1..-1]
151
+ path.unshift as unless as == '.'
140
152
  dest = "#{@path}#{path.join('/')}"
141
- puts "Adding #{dest}" if Rake.application.options.trace
153
+ puts "Adding #{dest}" if Buildr.application.options.trace
142
154
  file_map[dest] = file
143
155
  end
144
156
  else
145
- puts "Adding #{@path}#{as}" if Rake.application.options.trace
157
+ puts "Adding #{@path}#{as}" if Buildr.application.options.trace
146
158
  file_map["#{@path}#{as}"] = file
147
159
  end
148
160
  end
@@ -150,17 +162,34 @@ module Buildr
150
162
  end
151
163
 
152
164
  def in_directory(dir)
153
- prefix = Regexp.new("^" + Regexp.escape(File.dirname(dir) + File::SEPARATOR))
154
- FileList.recursive(dir).reject { |file| excluded?(file) }.
155
- each { |file| yield file, file.sub(prefix, "") }
165
+ prefix = Regexp.new('^' + Regexp.escape(File.dirname(dir) + File::SEPARATOR))
166
+ Util.recursive_with_dot_files(dir).reject { |file| excluded?(file) }.
167
+ each { |file| yield file, file.sub(prefix, '') }
156
168
  end
157
169
 
158
170
  def excluded?(file)
159
- @excludes.any? { |exclude| File.fnmatch(exclude, file) }
171
+ @excludes.any? { |exclude| File.fnmatch(exclude, file, File::FNM_PATHNAME) }
160
172
  end
161
173
 
162
174
  end
163
175
 
176
+ class Merge
177
+ def initialize(expanders)
178
+ @expanders = expanders
179
+ end
180
+
181
+ def include(*files)
182
+ @expanders.each { |expander| expander.include(*files) }
183
+ self
184
+ end
185
+ alias :<< :include
186
+
187
+ def exclude(*files)
188
+ @expanders.each { |expander| expander.exclude(*files) }
189
+ self
190
+ end
191
+ end
192
+
164
193
 
165
194
  # Extend one Zip file into another.
166
195
  class ZipExpander #:nodoc:
@@ -175,6 +204,7 @@ module Buildr
175
204
  @includes |= files
176
205
  self
177
206
  end
207
+ alias :<< :include
178
208
 
179
209
  def exclude(*files)
180
210
  @excludes |= files
@@ -182,13 +212,13 @@ module Buildr
182
212
  end
183
213
 
184
214
  def expand(file_map, path)
185
- @includes = ["*"] if @includes.empty?
215
+ @includes = ['**/*'] if @includes.empty?
186
216
  Zip::ZipFile.open(@zip_file) do |source|
187
217
  source.entries.reject { |entry| entry.directory? }.each do |entry|
188
- if @includes.any? { |pattern| File.fnmatch(pattern, entry.name) } &&
189
- !@excludes.any? { |pattern| File.fnmatch(pattern, entry.name) }
190
- dest = "#{path}#{entry.name}"
191
- puts "Adding #{dest}" if Rake.application.options.trace
218
+ if @includes.any? { |pattern| File.fnmatch(pattern, entry.name, File::FNM_PATHNAME) } &&
219
+ !@excludes.any? { |pattern| File.fnmatch(pattern, entry.name, File::FNM_PATHNAME) }
220
+ dest = path =~ /^\/?$/ ? entry.name : Util.relative_path(path + "/" + entry.name)
221
+ puts "Adding #{dest}" if Buildr.application.options.trace
192
222
  file_map[dest] = lambda { |output| output.write source.read(entry) }
193
223
  end
194
224
  end
@@ -200,14 +230,13 @@ module Buildr
200
230
 
201
231
  def initialize(*args) #:nodoc:
202
232
  super
203
- @paths = { ""=>Path.new(self, "") }
204
- @prepares = []
233
+ clean
205
234
 
206
235
  # Make sure we're the last enhancements, so other enhancements can add content.
207
236
  enhance do
208
237
  @file_map = {}
209
238
  enhance do
210
- send "create" if respond_to?(:create)
239
+ send 'create' if respond_to?(:create)
211
240
  # We're here because the archive file does not exist, or one of the files is newer than the archive contents;
212
241
  # we need to make sure the archive doesn't exist (e.g. opening an existing Zip will add instead of create).
213
242
  # We also want to protect against partial updates.
@@ -215,7 +244,7 @@ module Buildr
215
244
  mkpath File.dirname(name), :verbose=>false
216
245
  begin
217
246
  @paths.each do |name, object|
218
- @file_map[name] = nil unless name.blank?
247
+ @file_map[name] = nil unless name.empty?
219
248
  object.add_files(@file_map)
220
249
  end
221
250
  create_from @file_map
@@ -227,6 +256,22 @@ module Buildr
227
256
  end
228
257
  end
229
258
 
259
+ # :call-seq:
260
+ # clean => self
261
+ #
262
+ # Removes all previously added content from this archive.
263
+ # Use this method if you want to remove default content from a package.
264
+ # For example, package(:jar) by default includes compiled classes and resources,
265
+ # using this method, you can create an empty jar and afterwards add the
266
+ # desired content to it.
267
+ #
268
+ # package(:jar).clean.include path_to('desired/content')
269
+ def clean
270
+ @paths = { '' => Path.new(self, '') }
271
+ @prepares = []
272
+ self
273
+ end
274
+
230
275
  # :call-seq:
231
276
  # include(*files) => self
232
277
  # include(*files, :path=>path) => self
@@ -238,39 +283,40 @@ module Buildr
238
283
  #
239
284
  # The first form accepts a list of files, directories and glob patterns and adds them to the archive.
240
285
  # For example, to include the file foo, directory bar (including all files in there) and all files under baz:
241
- # zip(..).include("foo", "bar", "baz/*")
286
+ # zip(..).include('foo', 'bar', 'baz/*')
242
287
  #
243
288
  # The second form is similar but adds files/directories under the specified path. For example,
244
289
  # to add foo as bar/foo:
245
- # zip(..).include("foo", :path=>"bar")
290
+ # zip(..).include('foo', :path=>'bar')
246
291
  # The :path option is the same as using the path method:
247
- # zip(..).path("bar").include("foo")
292
+ # zip(..).path('bar').include('foo')
248
293
  # All other options can be used in combination with the :path option.
249
294
  #
250
295
  # The third form adds a file or directory under a different name. For example, to add the file foo under the
251
296
  # name bar:
252
- # zip(..).include("foo", :as=>"bar")
297
+ # zip(..).include('foo', :as=>'bar')
253
298
  #
254
299
  # The fourth form adds the contents of a directory using the directory as a prerequisite:
255
- # zip(..).include(:from=>"foo")
256
- # Unlike <code>include("foo")</code> it includes the contents of the directory, not the directory itself.
257
- # Unlike <code>include("foo/*")</code>, it uses the directory timestamp for dependency management.
300
+ # zip(..).include(:from=>'foo')
301
+ # Unlike <code>include('foo')</code> it includes the contents of the directory, not the directory itself.
302
+ # Unlike <code>include('foo/*')</code>, it uses the directory timestamp for dependency management.
258
303
  #
259
304
  # The fifth form includes the contents of another archive by expanding it into this archive. For example:
260
- # zip(..).include("foo.zip", :merge=>true).include("bar.zip")
305
+ # zip(..).include('foo.zip', :merge=>true).include('bar.zip')
261
306
  # You can also use the method #merge.
262
307
  def include(*files)
263
- @paths[""].include *files
308
+ @paths[''].include *files
264
309
  self
265
310
  end
266
311
  alias :add :include
312
+ alias :<< :include
267
313
 
268
314
  # :call-seq:
269
315
  # exclude(*files) => self
270
316
  #
271
317
  # Excludes files and returns self. Can be used in combination with include to prevent some files from being included.
272
318
  def exclude(*files)
273
- @paths[""].exclude *files
319
+ @paths[''].exclude *files
274
320
  self
275
321
  end
276
322
 
@@ -282,34 +328,34 @@ module Buildr
282
328
  #
283
329
  # Returns an object that supports two methods: include and exclude. You can use these methods to merge
284
330
  # only specific files. For example:
285
- # zip(..).merge("src.zip").include("module1/*")
331
+ # zip(..).merge('src.zip').include('module1/*')
286
332
  def merge(*files)
287
- @paths[""].merge *files
333
+ @paths[''].merge *files
288
334
  end
289
335
 
290
336
  # :call-seq:
291
337
  # path(name) => Path
292
338
  #
293
339
  # Returns a path object. Use the path object to include files under a path, for example, to include
294
- # the file "foo" as "bar/foo":
295
- # zip(..).path("bar").include("foo")
340
+ # the file 'foo' as 'bar/foo':
341
+ # zip(..).path('bar').include('foo')
296
342
  #
297
343
  # Returns a Path object. The Path object implements all the same methods, like include, exclude, merge
298
344
  # and so forth. It also implements path and root, so that:
299
- # path("foo").path("bar") == path("foo/bar")
300
- # path("foo").root == root
345
+ # path('foo').path('bar') == path('foo/bar')
346
+ # path('foo').root == root
301
347
  def path(name)
302
- return @paths[""] if name.blank?
303
- normalized = name.split("/").inject([]) do |path, part|
348
+ return @paths[''] if name.nil?
349
+ normalized = name.split('/').inject([]) do |path, part|
304
350
  case part
305
- when ".", nil, ""
351
+ when '.', nil, ''
306
352
  path
307
- when ".."
353
+ when '..'
308
354
  path[0...-1]
309
355
  else
310
356
  path << part
311
357
  end
312
- end.join("/")
358
+ end.join('/')
313
359
  @paths[normalized] ||= Path.new(self, normalized)
314
360
  end
315
361
 
@@ -328,24 +374,19 @@ module Buildr
328
374
  # the WarTask supports options like :manifest, :libs and :classes.
329
375
  #
330
376
  # For example:
331
- # package(:jar).with(:manifest=>"MANIFEST_MF")
377
+ # package(:jar).with(:manifest=>'MANIFEST_MF')
332
378
  def with(options)
333
379
  options.each do |key, value|
334
380
  begin
335
381
  send "#{key}=", value
336
- rescue NameError
337
- if respond_to?(:[]=) # Backward compatible with Buildr 1.1.
338
- warn_deprecated "The []= method is deprecated, please use attribute accessors instead."
339
- self[key] = value
340
- else
341
- raise ArgumentError, "This task does not support the option #{key}."
342
- end
382
+ rescue NoMethodError
383
+ raise ArgumentError, "#{self.class.name} does not support the option #{key}"
343
384
  end
344
385
  end
345
386
  self
346
387
  end
347
388
 
348
- def invoke_prerequisites() #:nodoc:
389
+ def invoke_prerequisites(args, chain) #:nodoc:
349
390
  @prepares.each { |prepare| prepare.call(self) }
350
391
  @prepares.clear
351
392
  @prerequisites |= @paths.collect { |name, path| path.sources }.flatten
@@ -355,8 +396,8 @@ module Buildr
355
396
  def needed?() #:nodoc:
356
397
  return true unless File.exist?(name)
357
398
  # You can do something like:
358
- # include("foo", :path=>"foo").exclude("foo/bar", path=>"foo").
359
- # include("foo/bar", :path=>"foo/bar")
399
+ # include('foo', :path=>'foo').exclude('foo/bar', path=>'foo').
400
+ # include('foo/bar', :path=>'foo/bar')
360
401
  # This will play havoc if we handled all the prerequisites together
361
402
  # under the task, so instead we handle them individually for each path.
362
403
  #
@@ -365,7 +406,7 @@ module Buildr
365
406
  # coming from, since some tasks touch the directory, e.g. when the
366
407
  # content of target/classes is included into a WAR.
367
408
  most_recent = @paths.collect { |name, path| path.sources }.flatten.
368
- each { |src| File.directory?(src) ? FileList.recursive(src) | [src] : src }.flatten.
409
+ each { |src| File.directory?(src) ? Util.recursive_with_dot_files(src) | [src] : src }.flatten.
369
410
  select { |file| File.exist?(file) }.collect { |file| File.stat(file).mtime }.max
370
411
  File.stat(name).mtime < (most_recent || Rake::EARLY) || super
371
412
  end
@@ -390,37 +431,45 @@ module Buildr
390
431
  # use exclusion patterns, and include files into specific directories.
391
432
  #
392
433
  # For example:
393
- # zip("test.zip").tap do |task|
394
- # task.include "srcs"
395
- # task.include "README", "LICENSE"
434
+ # zip('test.zip').tap do |task|
435
+ # task.include 'srcs'
436
+ # task.include 'README', 'LICENSE'
396
437
  # end
397
438
  #
398
439
  # See Buildr#zip and ArchiveTask.
399
440
  class ZipTask < ArchiveTask
400
441
 
442
+ # Compression leve for this Zip.
443
+ attr_accessor :compression_level
444
+
445
+ def initialize(*args) #:nodoc:
446
+ self.compression_level = Zlib::NO_COMPRESSION
447
+ super
448
+ end
449
+
401
450
  private
402
451
 
403
452
  def create_from(file_map)
404
453
  Zip::ZipOutputStream.open name do |zip|
405
454
  seen = {}
406
455
  mkpath = lambda do |dir|
407
- unless dir == "." || seen[dir]
456
+ unless dir == '.' || seen[dir]
408
457
  mkpath.call File.dirname(dir)
409
- zip.put_next_entry dir + '/'
458
+ zip.put_next_entry(dir + '/', compression_level)
410
459
  seen[dir] = true
411
460
  end
412
461
  end
413
-
462
+
414
463
  file_map.each do |path, content|
415
464
  mkpath.call File.dirname(path)
416
465
  if content.respond_to?(:call)
417
- zip.put_next_entry path
466
+ zip.put_next_entry(path, compression_level)
418
467
  content.call zip
419
468
  elsif content.nil? || File.directory?(content.to_s)
420
469
  mkpath.call path
421
470
  else
422
- zip.put_next_entry path
423
- File.open content.to_s, "rb" do |is|
471
+ zip.put_next_entry(path, compression_level)
472
+ File.open content.to_s, 'rb' do |is|
424
473
  while data = is.read(4096)
425
474
  zip << data
426
475
  end
@@ -441,9 +490,9 @@ module Buildr
441
490
  # directories.
442
491
  #
443
492
  # For example:
444
- # zip("test.zip").tap do |task|
445
- # task.include "srcs"
446
- # task.include "README", "LICENSE"
493
+ # zip('test.zip').tap do |task|
494
+ # task.include 'srcs'
495
+ # task.include 'README', 'LICENSE'
447
496
  # end
448
497
  def zip(file)
449
498
  ZipTask.define_task(file)
@@ -467,7 +516,7 @@ module Buildr
467
516
 
468
517
  # Initialize with hash argument of the form target=>zip_file.
469
518
  def initialize(args)
470
- @target, @zip_file = Rake.application.resolve_args(args)
519
+ @target, arg_names, @zip_file = Buildr.application.resolve_args([args])
471
520
  @paths = {}
472
521
  end
473
522
 
@@ -487,7 +536,6 @@ module Buildr
487
536
  # specified. Nothing will happen unless we include all files.
488
537
  if @paths.empty?
489
538
  @paths[nil] = FromPath.new(self, nil)
490
- @paths[nil].include "*"
491
539
  end
492
540
 
493
541
  # Otherwise, empty unzip creates target as a file when touching.
@@ -498,7 +546,7 @@ module Buildr
498
546
  patterns.map(entries).each do |dest, entry|
499
547
  next if entry.directory?
500
548
  dest = File.expand_path(dest, target.to_s)
501
- puts "Extracting #{dest}" if Rake.application.options.trace
549
+ puts "Extracting #{dest}" if Buildr.application.options.trace
502
550
  mkpath File.dirname(dest), :verbose=>false rescue nil
503
551
  entry.extract(dest) { true }
504
552
  end
@@ -551,11 +599,11 @@ module Buildr
551
599
  # Expands the file relative to that path.
552
600
  #
553
601
  # For example:
554
- # unzip(Dir.pwd=>"test.jar").from_path("etc").include("LICENSE")
602
+ # unzip(Dir.pwd=>'test.jar').from_path('etc').include('LICENSE')
555
603
  # will unzip etc/LICENSE into ./LICENSE.
556
604
  #
557
605
  # This is different from:
558
- # unzip(Dir.pwd=>"test.jar").include("etc/LICENSE")
606
+ # unzip(Dir.pwd=>'test.jar').include('etc/LICENSE')
559
607
  # which unzips etc/LICENSE into ./etc/LICENSE.
560
608
  def from_path(name)
561
609
  @paths[name] ||= FromPath.new(self, name)
@@ -581,9 +629,9 @@ module Buildr
581
629
  def initialize(unzip, path)
582
630
  @unzip = unzip
583
631
  if path
584
- @path = path[-1] == ?/ ? path : path + "/"
632
+ @path = path[-1] == ?/ ? path : path + '/'
585
633
  else
586
- @path = ""
634
+ @path = ''
587
635
  end
588
636
  end
589
637
 
@@ -602,12 +650,12 @@ module Buildr
602
650
  end
603
651
 
604
652
  def map(entries)
605
- includes = @include || ["*"]
653
+ includes = @include || ['**/*']
606
654
  excludes = @exclude || []
607
655
  entries.inject({}) do |map, entry|
608
- short = entry.name.sub(@path, "")
609
- if includes.any? { |pat| File.fnmatch(pat, short) } &&
610
- !excludes.any? { |pat| File.fnmatch(pat, short) }
656
+ short = entry.name.sub(@path, '')
657
+ if includes.any? { |pat| File.fnmatch(pat, short, File::FNM_PATHNAME) } &&
658
+ !excludes.any? { |pat| File.fnmatch(pat, short, File::FNM_PATHNAME) }
611
659
  map[short] = entry
612
660
  end
613
661
  map
@@ -643,11 +691,11 @@ module Buildr
643
691
  # you overlay additional work on top of the file task.
644
692
  #
645
693
  # For example:
646
- # unzip("all"=>"test.zip")
647
- # unzip("src"=>"test.zip").include("README", "LICENSE")
648
- # unzip("libs"=>"test.zip").from_path("libs")
694
+ # unzip('all'=>'test.zip')
695
+ # unzip('src'=>'test.zip').include('README', 'LICENSE')
696
+ # unzip('libs'=>'test.zip').from_path('libs')
649
697
  def unzip(args)
650
- target, zip_file = Rake.application.resolve_args(args)
698
+ target, arg_names, zip_file = Buildr.application.resolve_args([args])
651
699
  task = file(File.expand_path(target.to_s)=>zip_file)
652
700
  Unzip.new(task=>zip_file).tap do |setup|
653
701
  task.enhance { setup.extract }