rake 0.4.11 → 0.8.7

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 (101) hide show
  1. data/CHANGES +288 -1
  2. data/README +101 -114
  3. data/Rakefile +269 -54
  4. data/TODO +1 -0
  5. data/bin/rake +26 -3
  6. data/doc/command_line_usage.rdoc +102 -0
  7. data/doc/jamis.rb +133 -106
  8. data/doc/rake.1.gz +0 -0
  9. data/doc/rakefile.rdoc +304 -4
  10. data/doc/release_notes/rake-0.4.14.rdoc +23 -0
  11. data/doc/release_notes/rake-0.4.15.rdoc +35 -0
  12. data/doc/release_notes/rake-0.5.0.rdoc +53 -0
  13. data/doc/release_notes/rake-0.5.3.rdoc +78 -0
  14. data/doc/release_notes/rake-0.5.4.rdoc +46 -0
  15. data/doc/release_notes/rake-0.6.0.rdoc +141 -0
  16. data/doc/release_notes/rake-0.7.0.rdoc +119 -0
  17. data/doc/release_notes/rake-0.7.1.rdoc +59 -0
  18. data/doc/release_notes/rake-0.7.2.rdoc +121 -0
  19. data/doc/release_notes/rake-0.7.3.rdoc +47 -0
  20. data/doc/release_notes/rake-0.8.0.rdoc +114 -0
  21. data/doc/release_notes/rake-0.8.2.rdoc +165 -0
  22. data/doc/release_notes/rake-0.8.3.rdoc +112 -0
  23. data/doc/release_notes/rake-0.8.4.rdoc +147 -0
  24. data/doc/release_notes/rake-0.8.5.rdoc +53 -0
  25. data/doc/release_notes/rake-0.8.6.rdoc +55 -0
  26. data/doc/release_notes/rake-0.8.7.rdoc +55 -0
  27. data/lib/rake/alt_system.rb +108 -0
  28. data/lib/rake/classic_namespace.rb +8 -0
  29. data/lib/rake/clean.rb +3 -1
  30. data/lib/rake/contrib/ftptools.rb +40 -26
  31. data/lib/rake/contrib/publisher.rb +1 -1
  32. data/lib/rake/contrib/rubyforgepublisher.rb +3 -3
  33. data/lib/rake/contrib/sshpublisher.rb +1 -1
  34. data/lib/rake/contrib/sys.rb +25 -23
  35. data/lib/rake/gempackagetask.rb +14 -15
  36. data/lib/rake/loaders/makefile.rb +42 -0
  37. data/lib/rake/packagetask.rb +65 -33
  38. data/lib/rake/rake_test_loader.rb +5 -0
  39. data/lib/rake/rdoctask.rb +112 -31
  40. data/lib/rake/ruby182_test_unit_fix.rb +23 -0
  41. data/lib/rake/runtest.rb +4 -4
  42. data/lib/rake/tasklib.rb +11 -12
  43. data/lib/rake/testtask.rb +67 -24
  44. data/lib/rake/win32.rb +55 -0
  45. data/lib/rake.rb +2087 -578
  46. data/test/capture_stdout.rb +26 -0
  47. data/test/check_expansion.rb +5 -0
  48. data/test/check_no_expansion.rb +5 -0
  49. data/test/data/chains/Rakefile +15 -0
  50. data/test/data/default/Rakefile +19 -0
  51. data/test/data/dryrun/Rakefile +22 -0
  52. data/test/data/file_creation_task/Rakefile +33 -0
  53. data/test/data/imports/Rakefile +19 -0
  54. data/test/data/imports/deps.mf +1 -0
  55. data/test/data/multidesc/Rakefile +17 -0
  56. data/test/data/namespace/Rakefile +57 -0
  57. data/test/data/rakelib/test1.rb +3 -0
  58. data/test/data/sample.mf +14 -0
  59. data/test/data/statusreturn/Rakefile +8 -0
  60. data/test/data/unittest/Rakefile +1 -0
  61. data/test/filecreation.rb +18 -12
  62. data/test/functional.rb +6 -73
  63. data/test/in_environment.rb +30 -0
  64. data/test/rake_test_setup.rb +24 -0
  65. data/test/reqfile.rb +3 -0
  66. data/test/reqfile2.rb +3 -0
  67. data/test/session_functional.rb +339 -0
  68. data/test/shellcommand.rb +0 -0
  69. data/test/test_application.rb +675 -0
  70. data/test/{testclean.rb → test_clean.rb} +1 -0
  71. data/test/test_definitions.rb +85 -0
  72. data/test/test_earlytime.rb +35 -0
  73. data/test/test_extension.rb +63 -0
  74. data/test/test_file_creation_task.rb +62 -0
  75. data/test/test_file_task.rb +143 -0
  76. data/test/test_filelist.rb +623 -0
  77. data/test/test_fileutils.rb +251 -0
  78. data/test/{testftp.rb → test_ftp.rb} +5 -1
  79. data/test/test_invocation_chain.rb +81 -0
  80. data/test/test_makefile_loader.rb +26 -0
  81. data/test/test_multitask.rb +45 -0
  82. data/test/test_namespace.rb +55 -0
  83. data/test/{testpackagetask.rb → test_package_task.rb} +49 -12
  84. data/test/test_pathmap.rb +210 -0
  85. data/test/test_pseudo_status.rb +26 -0
  86. data/test/test_rake.rb +41 -0
  87. data/test/test_rdoc_task.rb +88 -0
  88. data/test/test_require.rb +35 -0
  89. data/test/test_rules.rb +349 -0
  90. data/test/test_task_arguments.rb +89 -0
  91. data/test/test_task_manager.rb +173 -0
  92. data/test/test_tasklib.rb +12 -0
  93. data/test/test_tasks.rb +374 -0
  94. data/test/{testtesttask.rb → test_test_task.rb} +8 -2
  95. data/test/test_top_level_functions.rb +86 -0
  96. data/test/test_win32.rb +72 -0
  97. metadata +184 -84
  98. data/test/testfilelist.rb +0 -255
  99. data/test/testfileutils.rb +0 -83
  100. data/test/testtasks.rb +0 -371
  101. /data/test/contrib/{testsys.rb → test_sys.rb} +0 -0
@@ -0,0 +1,55 @@
1
+ = Rake 0.8.7 Released
2
+
3
+ Rake version 0.8.5 introduced greatly improved support for executing
4
+ commands on Windows. The "sh" command now has the same semantics on
5
+ Windows that it has on Unix based platforms.
6
+
7
+ Rake version 0.8.6 includes minor fixes the the RDoc generation.
8
+ Rake version 0.8.7 includes a minor fix for JRuby running on windows.
9
+
10
+ == Changes
11
+
12
+ === New Features / Enhancements in Version 0.8.5
13
+
14
+ * Improved implementation of the Rake system command for Windows.
15
+ (patch from James M. Lawrence/quix)
16
+
17
+ * Support for Ruby 1.9's improved system command. (patch from James
18
+ M. Lawrence/quix)
19
+
20
+ * Rake now includes the configured extension when invoking an
21
+ executable (Config::CONFIG['EXEEXT])
22
+
23
+ === Bug Fixes in Version 0.8.5
24
+
25
+ * Environment variable keys are now correctly cased (it matters in
26
+ some implementations).
27
+
28
+ == What is Rake
29
+
30
+ Rake is a build tool similar to the make program in many ways. But
31
+ instead of cryptic make recipes, Rake uses standard Ruby code to
32
+ declare tasks and dependencies. You have the full power of a modern
33
+ scripting language built right into your build tool.
34
+
35
+ == Availability
36
+
37
+ The easiest way to get and install rake is via RubyGems ...
38
+
39
+ gem install rake (you may need root/admin privileges)
40
+
41
+ Otherwise, you can get it from the more traditional places:
42
+
43
+ Home Page:: http://rake.rubyforge.org/
44
+ Download:: http://rubyforge.org/project/showfiles.php?group_id=50
45
+ GitHub:: git://github.com/jimweirich/rake.git
46
+
47
+ == Thanks
48
+
49
+ As usual, it was input from users that drove a alot of these changes. The
50
+ following people either contributed patches, made suggestions or made
51
+ otherwise helpful comments. Thanks to ...
52
+
53
+ * Charles Nutter
54
+
55
+ -- Jim Weirich
@@ -0,0 +1,108 @@
1
+ #
2
+ # Copyright (c) 2008 James M. Lawrence
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person
5
+ # obtaining a copy of this software and associated documentation files
6
+ # (the "Software"), to deal in the Software without restriction,
7
+ # including without limitation the rights to use, copy, modify, merge,
8
+ # publish, distribute, sublicense, and/or sell copies of the Software,
9
+ # and to permit persons to whom the Software is furnished to do so,
10
+ # subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19
+ # BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20
+ # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21
+ # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ # SOFTWARE.
23
+ #
24
+
25
+ require 'rbconfig'
26
+
27
+ #
28
+ # Alternate implementations of system() and backticks `` on Windows
29
+ # for ruby-1.8 and earlier.
30
+ #
31
+ module Rake::AltSystem
32
+ WINDOWS = Config::CONFIG["host_os"] =~ %r!(msdos|mswin|djgpp|mingw)!
33
+
34
+ class << self
35
+ def define_module_function(name, &block)
36
+ define_method(name, &block)
37
+ module_function(name)
38
+ end
39
+ end
40
+
41
+ if WINDOWS and RUBY_VERSION < "1.9.0"
42
+ RUNNABLE_EXTS = %w[com exe bat cmd]
43
+ RUNNABLE_PATTERN = %r!\.(#{RUNNABLE_EXTS.join('|')})\Z!i
44
+
45
+ define_module_function :kernel_system, &Kernel.method(:system)
46
+ define_module_function :kernel_backticks, &Kernel.method(:'`')
47
+
48
+ module_function
49
+
50
+ def repair_command(cmd)
51
+ "call " + (
52
+ if cmd =~ %r!\A\s*\".*?\"!
53
+ # already quoted
54
+ cmd
55
+ elsif match = cmd.match(%r!\A\s*(\S+)!)
56
+ if match[1] =~ %r!/!
57
+ # avoid x/y.bat interpretation as x with option /y
58
+ %Q!"#{match[1]}"! + match.post_match
59
+ else
60
+ # a shell command will fail if quoted
61
+ cmd
62
+ end
63
+ else
64
+ # empty or whitespace
65
+ cmd
66
+ end
67
+ )
68
+ end
69
+
70
+ def find_runnable(file)
71
+ if file =~ RUNNABLE_PATTERN
72
+ file
73
+ else
74
+ RUNNABLE_EXTS.each { |ext|
75
+ if File.exist?(test = "#{file}.#{ext}")
76
+ return test
77
+ end
78
+ }
79
+ nil
80
+ end
81
+ end
82
+
83
+ def system(cmd, *args)
84
+ repaired = (
85
+ if args.empty?
86
+ [repair_command(cmd)]
87
+ elsif runnable = find_runnable(cmd)
88
+ [File.expand_path(runnable), *args]
89
+ else
90
+ # non-existent file
91
+ [cmd, *args]
92
+ end
93
+ )
94
+ kernel_system(*repaired)
95
+ end
96
+
97
+ def backticks(cmd)
98
+ kernel_backticks(repair_command(cmd))
99
+ end
100
+
101
+ define_module_function :'`', &method(:backticks)
102
+ else
103
+ # Non-Windows or ruby-1.9+: same as Kernel versions
104
+ define_module_function :system, &Kernel.method(:system)
105
+ define_module_function :backticks, &Kernel.method(:'`')
106
+ define_module_function :'`', &Kernel.method(:'`')
107
+ end
108
+ end
@@ -0,0 +1,8 @@
1
+ # The following classes used to be in the top level namespace.
2
+ # Loading this file enables compatibility with older Rakefile that
3
+ # referenced Task from the top level.
4
+
5
+ Task = Rake::Task
6
+ FileTask = Rake::FileTask
7
+ FileCreationTask = Rake::FileCreationTask
8
+ RakeApp = Rake::Application
data/lib/rake/clean.rb CHANGED
@@ -16,7 +16,9 @@
16
16
  require 'rake'
17
17
 
18
18
  CLEAN = Rake::FileList["**/*~", "**/*.bak", "**/core"]
19
- CLEAN.clear_exclude
19
+ CLEAN.clear_exclude.exclude { |fn|
20
+ fn.pathmap("%f") == 'core' && File.directory?(fn)
21
+ }
20
22
 
21
23
  desc "Remove any temporary products."
22
24
  task :clean do
@@ -6,7 +6,6 @@
6
6
  # use.
7
7
 
8
8
  require 'date'
9
- require 'parsedate'
10
9
  require 'net/ftp'
11
10
 
12
11
  module Rake # :nodoc:
@@ -20,6 +19,10 @@ module Rake # :nodoc:
20
19
  @date_class ||= Date
21
20
  end
22
21
 
22
+ def self.time
23
+ @time_class ||= Time
24
+ end
25
+
23
26
  def initialize(path, entry)
24
27
  @path = path
25
28
  @mode, line, @owner, @group, size, d1, d2, d3, @name = entry.split(' ')
@@ -48,23 +51,34 @@ module Rake # :nodoc:
48
51
  def parse_mode(m)
49
52
  result = 0
50
53
  (1..9).each do |i|
51
- result = 2*result + ((m[i]==?-) ? 0 : 1)
54
+ result = 2*result + ((m[i]==?-) ? 0 : 1)
52
55
  end
53
56
  result
54
57
  end
55
58
 
56
59
  def determine_time(d1, d2, d3)
57
- elements = ParseDate.parsedate("#{d1} #{d2} #{d3}")
58
- if elements[0].nil?
59
- today = self.class.date.today
60
- if elements[1] > today.month
61
- elements[0] = today.year - 1
62
- else
63
- elements[0] = today.year
64
- end
60
+ now = self.class.time.now
61
+ if /:/ =~ d3
62
+ h, m = d3.split(':')
63
+ result = Time.parse("#{d1} #{d2} #{now.year} #{d3}")
64
+ if result > now
65
+ result = Time.parse("#{d1} #{d2} #{now.year-1} #{d3}")
66
+ end
67
+ else
68
+ result = Time.parse("#{d1} #{d2} #{d3}")
65
69
  end
66
- elements = elements.collect { |el| el.nil? ? 0 : el }
67
- Time.mktime(*elements[0,7])
70
+ result
71
+ # elements = ParseDate.parsedate("#{d1} #{d2} #{d3}")
72
+ # if elements[0].nil?
73
+ # today = self.class.date.today
74
+ # if elements[1] > today.month
75
+ # elements[0] = today.year - 1
76
+ # else
77
+ # elements[0] = today.year
78
+ # end
79
+ # end
80
+ # elements = elements.collect { |el| el.nil? ? 0 : el }
81
+ # Time.mktime(*elements[0,7])
68
82
  end
69
83
  end
70
84
 
@@ -79,12 +93,12 @@ module Rake # :nodoc:
79
93
  # Create an uploader and pass it to the given block as +up+.
80
94
  # When the block is complete, close the uploader.
81
95
  def connect(path, host, account, password)
82
- up = self.new(path, host, account, password)
83
- begin
84
- yield(up)
85
- ensure
86
- up.close
87
- end
96
+ up = self.new(path, host, account, password)
97
+ begin
98
+ yield(up)
99
+ ensure
100
+ up.close
101
+ end
88
102
  end
89
103
  end
90
104
 
@@ -103,13 +117,13 @@ module Rake # :nodoc:
103
117
  def makedirs(path)
104
118
  route = []
105
119
  File.split(path).each do |dir|
106
- route << dir
107
- current_dir = File.join(route)
108
- if @created[current_dir].nil?
109
- @created[current_dir] = true
110
- puts "Creating Directory #{current_dir}" if @verbose
111
- @ftp.mkdir(current_dir) rescue nil
112
- end
120
+ route << dir
121
+ current_dir = File.join(route)
122
+ if @created[current_dir].nil?
123
+ @created[current_dir] = true
124
+ puts "Creating Directory #{current_dir}" if @verbose
125
+ @ftp.mkdir(current_dir) rescue nil
126
+ end
113
127
  end
114
128
  end
115
129
 
@@ -117,7 +131,7 @@ module Rake # :nodoc:
117
131
  # path.
118
132
  def upload_files(wildcard)
119
133
  Dir[wildcard].each do |fn|
120
- upload(fn)
134
+ upload(fn)
121
135
  end
122
136
  end
123
137
 
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- # Copyright 2003, 2004 by Jim Weirich (jim@weirichhouse.org)
3
+ # Copyright 2003, 2004, 2005, 2006, 2007, 2008 by Jim Weirich (jim@weirichhouse.org)
4
4
  # All rights reserved.
5
5
 
6
6
  # Permission is granted for use, copying, modification, distribution,
@@ -9,9 +9,9 @@ module Rake
9
9
 
10
10
  def initialize(projname, user)
11
11
  super(
12
- "#{user}@rubyforge.org",
13
- "/var/www/gforge-projects/#{projname}",
14
- "html")
12
+ "#{user}@rubyforge.org",
13
+ "/var/www/gforge-projects/#{projname}",
14
+ "html")
15
15
  end
16
16
  end
17
17
 
@@ -40,7 +40,7 @@ module Rake
40
40
  # Upload the local directory to the remote directory.
41
41
  def upload
42
42
  @files.each do |fn|
43
- sh %{scp -q #{@local_dir}/#{fn} #{@host}:#{@remote_dir}}
43
+ sh %{scp -q #{@local_dir}/#{fn} #{@host}:#{@remote_dir}}
44
44
  end
45
45
  end
46
46
  end
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  #--
4
- # Copyright (c) 2003, 2004 Jim Weirich
4
+ # Copyright 2003, 2004, 2005, 2006, 2007, 2008 by Jim Weirich (jim@weirichhouse.org)
5
5
  #
6
6
  # Permission is hereby granted, free of charge, to any person obtaining
7
7
  # a copy of this software and associated documentation files (the
@@ -23,7 +23,10 @@
23
23
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24
24
  #++
25
25
  #
26
- require 'ftools'
26
+ begin
27
+ require 'ftools'
28
+ rescue LoadError
29
+ end
27
30
  require 'rbconfig'
28
31
 
29
32
  ######################################################################
@@ -97,13 +100,13 @@ module Sys
97
100
  def delete(*wildcards)
98
101
  wildcards.each do |wildcard|
99
102
  Dir[wildcard].each do |fn|
100
- if File.directory?(fn)
101
- log "Deleting directory #{fn}"
102
- Dir.delete(fn)
103
- else
104
- log "Deleting file #{fn}"
105
- File.delete(fn)
106
- end
103
+ if File.directory?(fn)
104
+ log "Deleting directory #{fn}"
105
+ Dir.delete(fn)
106
+ else
107
+ log "Deleting file #{fn}"
108
+ File.delete(fn)
109
+ end
107
110
  end
108
111
  end
109
112
  end
@@ -112,18 +115,18 @@ module Sys
112
115
  def delete_all(*wildcards)
113
116
  wildcards.each do |wildcard|
114
117
  Dir[wildcard].each do |fn|
115
- next if ! File.exist?(fn)
116
- if File.directory?(fn)
117
- Dir["#{fn}/*"].each do |subfn|
118
- next if subfn=='.' || subfn=='..'
119
- delete_all(subfn)
120
- end
121
- log "Deleting directory #{fn}"
122
- Dir.delete(fn)
123
- else
124
- log "Deleting file #{fn}"
125
- File.delete(fn)
126
- end
118
+ next if ! File.exist?(fn)
119
+ if File.directory?(fn)
120
+ Dir["#{fn}/*"].each do |subfn|
121
+ next if subfn=='.' || subfn=='..'
122
+ delete_all(subfn)
123
+ end
124
+ log "Deleting directory #{fn}"
125
+ Dir.delete(fn)
126
+ else
127
+ log "Deleting file #{fn}"
128
+ File.delete(fn)
129
+ end
127
130
  end
128
131
  end
129
132
  end
@@ -177,7 +180,7 @@ module Sys
177
180
  def for_files(*wildcards)
178
181
  wildcards.each do |wildcard|
179
182
  Dir[wildcard].each do |fn|
180
- yield(fn)
183
+ yield(fn)
181
184
  end
182
185
  end
183
186
  end
@@ -204,4 +207,3 @@ module Sys
204
207
  end
205
208
 
206
209
  end
207
-
@@ -6,12 +6,8 @@
6
6
  require 'rubygems'
7
7
  require 'rake'
8
8
  require 'rake/packagetask'
9
-
10
- begin
11
- Gem.manage_gems
12
- rescue NoMethodError => ex
13
- # Using rubygems prior to 0.6.1
14
- end
9
+ require 'rubygems/user_interaction'
10
+ require 'rubygems/builder'
15
11
 
16
12
  module Rake
17
13
 
@@ -77,21 +73,24 @@ module Rake
77
73
  def define
78
74
  super
79
75
  task :package => [:gem]
76
+ desc "Build the gem file #{gem_file}"
80
77
  task :gem => ["#{package_dir}/#{gem_file}"]
81
78
  file "#{package_dir}/#{gem_file}" => [package_dir] + @gem_spec.files do
82
- when_writing("Creating GEM") {
83
- Gem::Builder.new(gem_spec).build
84
- verbose(true) {
85
- mv gem_file, "#{package_dir}/#{gem_file}"
86
- }
87
- }
79
+ when_writing("Creating GEM") {
80
+ Gem::Builder.new(gem_spec).build
81
+ verbose(true) {
82
+ mv gem_file, "#{package_dir}/#{gem_file}"
83
+ }
84
+ }
88
85
  end
89
86
  end
90
87
 
91
- private
92
-
93
88
  def gem_file
94
- "#{package_name}.gem"
89
+ if @gem_spec.platform == Gem::Platform::RUBY
90
+ "#{package_name}.gem"
91
+ else
92
+ "#{package_name}-#{@gem_spec.platform}.gem"
93
+ end
95
94
  end
96
95
 
97
96
  end
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ module Rake
4
+
5
+ # Makefile loader to be used with the import file loader.
6
+ class MakefileLoader
7
+ SPACE_MARK = "__&NBSP;__"
8
+
9
+ # Load the makefile dependencies in +fn+.
10
+ def load(fn)
11
+ open(fn) do |mf|
12
+ lines = mf.read
13
+ lines.gsub!(/\\ /, SPACE_MARK)
14
+ lines.gsub!(/#[^\n]*\n/m, "")
15
+ lines.gsub!(/\\\n/, ' ')
16
+ lines.split("\n").each do |line|
17
+ process_line(line)
18
+ end
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ # Process one logical line of makefile data.
25
+ def process_line(line)
26
+ file_tasks, args = line.split(':')
27
+ return if args.nil?
28
+ dependents = args.split.map { |d| respace(d) }
29
+ file_tasks.strip.split.each do |file_task|
30
+ file_task = respace(file_task)
31
+ file file_task => dependents
32
+ end
33
+ end
34
+
35
+ def respace(str)
36
+ str.gsub(/#{SPACE_MARK}/, ' ')
37
+ end
38
+ end
39
+
40
+ # Install the handler
41
+ Rake.application.add_loader('mf', MakefileLoader.new)
42
+ end
@@ -27,12 +27,18 @@ module Rake
27
27
  # [<b>"<em>package_dir</em>/<em>name</em>-<em>version</em>.tgz"</b>]
28
28
  # Create a gzipped tar package (if <em>need_tar</em> is true).
29
29
  #
30
+ # [<b>"<em>package_dir</em>/<em>name</em>-<em>version</em>.tar.gz"</b>]
31
+ # Create a gzipped tar package (if <em>need_tar_gz</em> is true).
32
+ #
33
+ # [<b>"<em>package_dir</em>/<em>name</em>-<em>version</em>.tar.bz2"</b>]
34
+ # Create a bzip2'd tar package (if <em>need_tar_bz2</em> is true).
35
+ #
30
36
  # [<b>"<em>package_dir</em>/<em>name</em>-<em>version</em>.zip"</b>]
31
37
  # Create a zip package archive (if <em>need_zip</em> is true).
32
38
  #
33
39
  # Example:
34
40
  #
35
- # PackageTask.new("rake", "1.2.3") do |p|
41
+ # Rake::PackageTask.new("rake", "1.2.3") do |p|
36
42
  # p.need_tar = true
37
43
  # p.package_files.include("lib/**/*.rb")
38
44
  # end
@@ -47,15 +53,27 @@ module Rake
47
53
  # Directory used to store the package files (default is 'pkg').
48
54
  attr_accessor :package_dir
49
55
 
50
- # True if a gzipped tar file should be produced (default is false).
56
+ # True if a gzipped tar file (tgz) should be produced (default is false).
51
57
  attr_accessor :need_tar
52
58
 
59
+ # True if a gzipped tar file (tar.gz) should be produced (default is false).
60
+ attr_accessor :need_tar_gz
61
+
62
+ # True if a bzip2'd tar file (tar.bz2) should be produced (default is false).
63
+ attr_accessor :need_tar_bz2
64
+
53
65
  # True if a zip file should be produced (default is false)
54
66
  attr_accessor :need_zip
55
67
 
56
68
  # List of files to be included in the package.
57
69
  attr_accessor :package_files
58
70
 
71
+ # Tar command for gzipped or bzip2ed archives. The default is 'tar'.
72
+ attr_accessor :tar_command
73
+
74
+ # Zip command for zipped archives. The default is 'zip'.
75
+ attr_accessor :zip_command
76
+
59
77
  # Create a Package Task with the given name and version.
60
78
  def initialize(name=nil, version=nil)
61
79
  init(name, version)
@@ -70,7 +88,11 @@ module Rake
70
88
  @package_files = Rake::FileList.new
71
89
  @package_dir = 'pkg'
72
90
  @need_tar = false
91
+ @need_tar_gz = false
92
+ @need_tar_bz2 = false
73
93
  @need_zip = false
94
+ @tar_command = 'tar'
95
+ @zip_command = 'zip'
74
96
  end
75
97
 
76
98
  # Create the tasks defined by this task library.
@@ -86,50 +108,54 @@ module Rake
86
108
 
87
109
  desc "Remove package products"
88
110
  task :clobber_package do
89
- rm_r package_dir rescue nil
111
+ rm_r package_dir rescue nil
90
112
  end
91
113
 
92
114
  task :clobber => [:clobber_package]
93
115
 
94
- if need_tar
95
- task :package => ["#{package_dir}/#{tgz_file}"]
96
- file "#{package_dir}/#{tgz_file}" => [package_dir_path] + package_files do
97
- chdir(package_dir) do
98
- sh %{tar zcvf #{tgz_file} #{package_name}}
99
- end
100
- end
116
+ [
117
+ [need_tar, tgz_file, "z"],
118
+ [need_tar_gz, tar_gz_file, "z"],
119
+ [need_tar_bz2, tar_bz2_file, "j"]
120
+ ].each do |(need, file, flag)|
121
+ if need
122
+ task :package => ["#{package_dir}/#{file}"]
123
+ file "#{package_dir}/#{file}" => [package_dir_path] + package_files do
124
+ chdir(package_dir) do
125
+ sh %{#{@tar_command} #{flag}cvf #{file} #{package_name}}
126
+ end
127
+ end
128
+ end
101
129
  end
102
-
130
+
103
131
  if need_zip
104
- task :package => ["#{package_dir}/#{zip_file}"]
105
- file "#{package_dir}/#{zip_file}" => [package_dir_path] + package_files do
106
- chdir(package_dir) do
107
- sh %{zip -r #{zip_file} #{package_name}}
108
- end
109
- end
132
+ task :package => ["#{package_dir}/#{zip_file}"]
133
+ file "#{package_dir}/#{zip_file}" => [package_dir_path] + package_files do
134
+ chdir(package_dir) do
135
+ sh %{#{@zip_command} -r #{zip_file} #{package_name}}
136
+ end
137
+ end
110
138
  end
111
139
 
112
140
  directory package_dir
113
141
 
114
142
  file package_dir_path => @package_files do
115
- mkdir_p package_dir rescue nil
116
- @package_files.each do |fn|
117
- f = File.join(package_dir_path, fn)
118
- fdir = File.dirname(f)
119
- mkdir_p(fdir) if !File.exist?(fdir)
120
- if File.directory?(fn)
121
- mkdir_p(f)
122
- else
123
- rm_f f
124
- safe_ln(fn, f)
125
- end
126
- end
143
+ mkdir_p package_dir rescue nil
144
+ @package_files.each do |fn|
145
+ f = File.join(package_dir_path, fn)
146
+ fdir = File.dirname(f)
147
+ mkdir_p(fdir) if !File.exist?(fdir)
148
+ if File.directory?(fn)
149
+ mkdir_p(f)
150
+ else
151
+ rm_f f
152
+ safe_ln(fn, f)
153
+ end
154
+ end
127
155
  end
128
156
  self
129
157
  end
130
158
 
131
- private
132
-
133
159
  def package_name
134
160
  @version ? "#{@name}-#{@version}" : @name
135
161
  end
@@ -142,11 +168,17 @@ module Rake
142
168
  "#{package_name}.tgz"
143
169
  end
144
170
 
171
+ def tar_gz_file
172
+ "#{package_name}.tar.gz"
173
+ end
174
+
175
+ def tar_bz2_file
176
+ "#{package_name}.tar.bz2"
177
+ end
178
+
145
179
  def zip_file
146
180
  "#{package_name}.zip"
147
181
  end
148
182
  end
149
183
 
150
184
  end
151
-
152
-
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Load the test files from the command line.
4
+
5
+ ARGV.each { |f| load f unless f =~ /^-/ }