buildr 1.2.1 → 1.2.2

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.
data/CHANGELOG CHANGED
@@ -1,3 +1,10 @@
1
+ 1.2.2 (7/18/2007)
2
+ * Added: resources.using and filter.using now accepts a format as the first argument, default being :maven, but you can also use :ant, :ruby or pass a regular expression (http://groups.google.com/group/buildr-talk/browse_thread/thread/5216d5ae8bfff29b).
3
+ * Fixed: Sleek upload with changelog for each release courtesy of Anatol Pomozov.
4
+ * Fixed: Zip.path.contains fails on paths with more than one directory (http://groups.google.com/group/buildr-talk/browse_thread/thread/5d305bbeeb814d1).
5
+ * Fixed: Speed of sorting entries when creating new Zip file (http://groups.google.com/group/buildr-talk/browse_thread/thread/8b4d1b0e983f32f).
6
+ * Fixed: Uploading using SFTP creates directory for uploaded file (http://groups.google.com/group/buildr-talk/browse_thread/thread/80021d35cecfecdc).
7
+
1
8
  1.2.1 (7/12/2007)
2
9
  * Added: Proxy exclusion, use environment variable NO_PROXY, or options.proxy.exclude = <url> || [<url>] (http://groups.google.com/group/buildr-talk/t/9f1e988e0dbeea9f).
3
10
  * Added: You can now copy resources from multiple source directories, using resources.from (http://groups.google.com/group/buildr-talk/browse_thread/thread/4f2867a6dbbc19d4).
@@ -9,6 +16,7 @@
9
16
  * Fixed: buildr command does not recognize project tasks (foo:compile) or default task (http://groups.google.com/group/buildr-talk/t/660061a0bc81989a).
10
17
  * Fixed: Upload fails on SFTP permissions.
11
18
  * Fixed: Hibernate.schema_export not passing Ant task when yielding.
19
+ * Fixed: IntelliJ Idea project files generation for projects more than two degrees deep.
12
20
 
13
21
  1.2.0 (6/6/2007)
14
22
  * Added: Artifact.list returns specs for all registered artifacts (those created with artifact or package).
@@ -23,7 +23,7 @@ require "builder"
23
23
 
24
24
 
25
25
  module Buildr
26
- VERSION = "1.2.1".freeze
26
+ VERSION = "1.2.2".freeze
27
27
  end
28
28
 
29
29
 
@@ -317,7 +317,7 @@ module Buildr
317
317
  unless @cached_entries
318
318
  if @path
319
319
  base = Regexp.new("^" + Regexp.escape(@path || ""))
320
- @cached_entries = root.path("").check.map { |name| name.to_s.sub!(base, "") }.reject(&:nil?)
320
+ @cached_entries = root.path(nil).check.select { |entry| entry.name =~ base }.map { |entry| entry.name.sub(base, "") }
321
321
  else
322
322
  @cached_entries = Zip::ZipFile.open(root.name) { |zip| zip.entries }
323
323
  end
@@ -250,7 +250,7 @@ module Buildr
250
250
  # Since temporary file exists, force a download.
251
251
  class << task ; def needed?() ; true ; end ; end
252
252
  task.sources << args
253
- task.enhance { args.download temp, :proxy=>Buildr.options.proxy }
253
+ task.enhance { args.download temp }
254
254
  end
255
255
  else
256
256
  # Download to a file created by the task.
@@ -258,7 +258,7 @@ module Buildr
258
258
  uri = URI.parse(args.values.first.to_s)
259
259
  file_create(args.keys.first).tap do |task|
260
260
  task.sources << uri
261
- task.enhance { uri.download task.name, :proxy=>Buildr.options.proxy }
261
+ task.enhance { uri.download task.name }
262
262
  end
263
263
  end
264
264
 
@@ -362,21 +362,46 @@ module Buildr
362
362
  # The mapping. See #using.
363
363
  attr_accessor :mapping
364
364
 
365
+ # The mapper to use. See #using.
366
+ attr_accessor :mapper
367
+
365
368
  # :call-seq:
366
369
  # using(mapping) => self
367
370
  # using() { |file_name, contents| ... } => self
368
371
  #
369
372
  # Specifies the mapping to use and returns self.
370
373
  #
371
- # The mapping can be a proc or a method called with the file name and content, returning
372
- # the modified content. Or the mapping can be a Hash for mapping each ${key} into a value.
373
- # Without any mapping, all files are copied as is.
374
+ # The most typical mapping uses a Hash, and the default mapping uses the Maven style, so
375
+ # <code>${key}</code> are mapped to the values. You can change that by passing a different
376
+ # format as the first argument. Currently supports:
377
+ # * :ant -- Map <code>@key@</code>.
378
+ # * :maven -- Map <code>${key}</code> (default).
379
+ # * :ruby -- Map <code>#{key}</code>.
380
+ # * Regexp -- Maps the matched data (e.g. <code>/=(.*?)=/</code>
374
381
  #
375
382
  # For example:
376
383
  # filter.using "version"=>"1.2"
377
- # will replace all occurrences of "${version}" with "1.2".
378
- def using(mapping = nil, &block)
379
- self.mapping = mapping || block
384
+ # Is the same as:
385
+ # filter.using :maven, "version"=>"1.2"
386
+ #
387
+ # You can also pass a proc or method. It will be called with the file name and content,
388
+ # to return the mapped content.
389
+ #
390
+ # Without any mapping, all files are copied as is.
391
+ def using(*args, &block)
392
+ case args.first
393
+ when Hash # Maven hash mapping
394
+ using :maven, *args
395
+ when Symbol # Mapping from a method
396
+ raise ArgumentError, "Expected mapper type followed by mapping hash" unless args.size == 2 && Hash === args[1]
397
+ @mapper, @mapping = *args
398
+ when Regexp # Mapping using a regular expression
399
+ raise ArgumentError, "Expected regular expression followed by mapping hash" unless args.size == 2 && Hash === args[1]
400
+ @mapper, @mapping = *args
401
+ else
402
+ raise ArgumentError, "Expected proc, method or a block" if args.size > 1 || (args.first && block)
403
+ @mapping = args.first || block
404
+ end
380
405
  self
381
406
  end
382
407
 
@@ -414,8 +439,13 @@ module Buildr
414
439
  mapped = mapping.call(path, File.open(source, "rb") { |file| file.read })
415
440
  File.open(dest, "wb") { |file| file.write mapped }
416
441
  when Hash # Map ${key} to value
417
- mapped = File.open(source, "rb") { |file| file.read }.
418
- gsub(/\$\{[^}]*\}/) { |str| mapping[str[2..-2]] || str }
442
+ content = File.open(source, "rb") { |file| file.read }
443
+ if Symbol === @mapper
444
+ mapped = send("#{@mapper}_mapper", content) { |key| mapping[key] }
445
+ else
446
+ mapped = regexp_mapper(content) { |key| mapping[key] }
447
+ end
448
+ #gsub(/\$\{[^}]*\}/) { |str| mapping[str[2..-2]] || str }
419
449
  File.open(dest, "wb") { |file| file.write mapped }
420
450
  when nil # No mapping.
421
451
  cp source, dest
@@ -431,8 +461,26 @@ module Buildr
431
461
  # Returns the target directory.
432
462
  def to_s()
433
463
  @target.to_s
434
- end
435
-
464
+ end
465
+
466
+ private
467
+
468
+ def maven_mapper(content)
469
+ content.gsub(/\$\{.*?\}/) { |str| yield(str[2..-2]) || str }
470
+ end
471
+
472
+ def ant_mapper(content)
473
+ content.gsub(/@.*?@/) { |str| yield(str[1..-2]) || str }
474
+ end
475
+
476
+ def ruby_mapper(content)
477
+ content.gsub(/#\{.*?\}/) { |str| yield(str[2..-2]) || str }
478
+ end
479
+
480
+ def regexp_mapper(content)
481
+ content.gsub(@mapper) { |str| yield(str.scan(@mapper).join) || str }
482
+ end
483
+
436
484
  end
437
485
 
438
486
  # :call-seq:
@@ -304,10 +304,6 @@ module Buildr
304
304
  @parent = task(split[0...-1].join(":"))
305
305
  raise "No parent project #{split[0...-1].join(":")}" unless @parent && Project === parent
306
306
  end
307
- # We only need this because each task (and a project is a task) already has
308
- # a @base_dir variable (and base_dir method), and we want it lazily evaluated.
309
- # See all the logic that happens when we call base_dir.
310
- @base_dir = nil
311
307
  end
312
308
 
313
309
  # :call-seq:
@@ -325,10 +321,10 @@ module Buildr
325
321
  # /home/foo/bar <-- sub-project "foo:bar"
326
322
  def base_dir()
327
323
  if @base_dir.nil?
328
- if @parent
324
+ if parent
329
325
  # For sub-project, a good default is a directory in the parent's base_dir,
330
326
  # using the same name as the project.
331
- @base_dir = File.join(@parent.base_dir, name.split(":").last)
327
+ @base_dir = File.join(parent.base_dir, name.split(":").last)
332
328
  else
333
329
  # For top-level project, a good default is the directory where we found the Buildfile.
334
330
  @base_dir = Dir.pwd
@@ -206,8 +206,8 @@ module URI
206
206
  raise NotFoundError, "No source file/directory to upload." unless File.exist?(source)
207
207
  if File.directory?(source)
208
208
  Dir.glob("#{source}/**/*").reject { |file| File.directory?(file) }.each do |file|
209
- path = self.path + file.sub(source, "")
210
- (self + path).upload file, {:digests=>[]}.merge(options)
209
+ uri = self + (File.join(self.path, file.sub(source, "")))
210
+ uri.upload file, {:digests=>[]}.merge(options)
211
211
  end
212
212
  else
213
213
  File.open(source, "rb") { |input| upload input, options }
@@ -397,7 +397,7 @@ module URI
397
397
  # To create a path, we need to create all its parent. We use realpath to determine if
398
398
  # the path already exists, otherwise mkdir fails.
399
399
  puts "Creating path #{@base_path}" if Rake.application.options.trace
400
- path.split("/").inject("") do |base, part|
400
+ File.dirname(path).split("/").inject("") do |base, part|
401
401
  combined = base + part
402
402
  sftp.realpath combined rescue sftp.mkdir combined, {}
403
403
  "#{combined}/"
@@ -579,17 +579,14 @@ end
579
579
 
580
580
 
581
581
  module Zip #:nodoc:
582
- class ZipEntrySet #:nodoc:
583
582
 
584
- # Make sure entries are returned in sorted order so the ZIP
585
- # index is human readable instead of random hashtable order.
586
- def entries()
587
- @entrySet.values.sort
583
+ class ZipCentralDirectory #:nodoc:
584
+ # Patch to add entries in alphabetical order.
585
+ def write_to_stream(io)
586
+ offset = io.tell
587
+ @entrySet.sort { |a,b| a.name <=> b.name }.each { |entry| entry.write_c_dir_entry(io) }
588
+ write_e_o_c_d(io, offset)
588
589
  end
589
-
590
- def each(&block)
591
- entries.each(&block)
592
- end
593
-
594
590
  end
591
+
595
592
  end
metadata CHANGED
@@ -1,10 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.2
2
+ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: buildr
5
5
  version: !ruby/object:Gem::Version
6
- version: 1.2.1
7
- date: 2007-07-12 00:00:00 -07:00
6
+ version: 1.2.2
7
+ date: 2007-07-18 00:00:00 -07:00
8
8
  summary: A build system that doesn't suck
9
9
  require_paths:
10
10
  - lib