drake 0.8.3.1.0.14 → 0.8.4.1.0.15

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 (45) hide show
  1. data/CHANGES +27 -0
  2. data/CHANGES.drake +4 -0
  3. data/README +98 -198
  4. data/Rakefile +2 -4
  5. data/Rakefile.drake +0 -4
  6. data/doc/command_line_usage.rdoc +102 -0
  7. data/doc/rakefile.rdoc +4 -4
  8. data/doc/release_notes/rake-0.8.4.rdoc +147 -0
  9. data/lib/rake.rb +94 -60
  10. data/lib/rake/alt_system.rb +108 -0
  11. data/lib/rake/contrib/publisher.rb +1 -1
  12. data/lib/rake/contrib/sys.rb +1 -1
  13. data/lib/rake/gempackagetask.rb +0 -6
  14. data/lib/rake/loaders/makefile.rb +8 -1
  15. data/lib/rake/packagetask.rb +0 -1
  16. data/lib/rake/rdoctask.rb +79 -17
  17. data/lib/rake/testtask.rb +1 -1
  18. data/lib/rake/win32.rb +11 -10
  19. data/test/Rakefile.seq +1 -1
  20. data/test/Rakefile.simple +14 -25
  21. data/test/check_no_expansion.rb +5 -0
  22. data/test/data/sample.mf +2 -0
  23. data/test/rake_test_setup.rb +14 -0
  24. data/test/session_functional.rb +2 -0
  25. data/test/test_application.rb +25 -44
  26. data/test/test_definitions.rb +4 -1
  27. data/test/test_file_task.rb +20 -16
  28. data/test/test_filelist.rb +8 -3
  29. data/test/test_fileutils.rb +45 -44
  30. data/test/test_invocation_chain.rb +8 -2
  31. data/test/test_makefile_loader.rb +2 -1
  32. data/test/test_namespace.rb +30 -11
  33. data/test/test_package_task.rb +3 -1
  34. data/test/test_parallel.rb +4 -15
  35. data/test/test_pathmap.rb +3 -2
  36. data/test/test_pseudo_status.rb +26 -0
  37. data/test/test_rdoc_task.rb +88 -0
  38. data/test/test_require.rb +3 -1
  39. data/test/test_rules.rb +7 -5
  40. data/test/test_task_manager.rb +4 -1
  41. data/test/test_tasks.rb +7 -4
  42. data/test/test_test_task.rb +2 -0
  43. data/test/test_top_level_functions.rb +4 -2
  44. data/test/test_win32.rb +29 -14
  45. metadata +12 -4
@@ -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
@@ -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,
@@ -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
@@ -9,12 +9,6 @@ require 'rake/packagetask'
9
9
  require 'rubygems/user_interaction'
10
10
  require 'rubygems/builder'
11
11
 
12
- begin
13
- Gem.manage_gems
14
- rescue NoMethodError => ex
15
- # Using rubygems prior to 0.6.1
16
- end
17
-
18
12
  module Rake
19
13
 
20
14
  # Create a package based upon a Gem spec. Gem packages, as well as
@@ -4,11 +4,13 @@ module Rake
4
4
 
5
5
  # Makefile loader to be used with the import file loader.
6
6
  class MakefileLoader
7
+ SPACE_MARK = "__&NBSP;__"
7
8
 
8
9
  # Load the makefile dependencies in +fn+.
9
10
  def load(fn)
10
11
  open(fn) do |mf|
11
12
  lines = mf.read
13
+ lines.gsub!(/\\ /, SPACE_MARK)
12
14
  lines.gsub!(/#[^\n]*\n/m, "")
13
15
  lines.gsub!(/\\\n/, ' ')
14
16
  lines.split("\n").each do |line|
@@ -23,11 +25,16 @@ module Rake
23
25
  def process_line(line)
24
26
  file_tasks, args = line.split(':')
25
27
  return if args.nil?
26
- dependents = args.split
28
+ dependents = args.split.map { |d| respace(d) }
27
29
  file_tasks.strip.split.each do |file_task|
30
+ file_task = respace(file_task)
28
31
  file file_task => dependents
29
32
  end
30
33
  end
34
+
35
+ def respace(str)
36
+ str.gsub(/#{SPACE_MARK}/, ' ')
37
+ end
31
38
  end
32
39
 
33
40
  # Install the handler
@@ -122,7 +122,6 @@ module Rake
122
122
  task :package => ["#{package_dir}/#{file}"]
123
123
  file "#{package_dir}/#{file}" => [package_dir_path] + package_files do
124
124
  chdir(package_dir) do
125
- sh %{env}
126
125
  sh %{#{@tar_command} #{flag}cvf #{file} #{package_name}}
127
126
  end
128
127
  end
data/lib/rake/rdoctask.rb CHANGED
@@ -28,6 +28,11 @@ module Rake
28
28
  # rd.rdoc_files.include("README.rdoc", "lib/**/*.rb")
29
29
  # end
30
30
  #
31
+ # The +rd+ object passed to the block is an RDocTask object. See the
32
+ # attributes list for the RDocTask class for available customization options.
33
+ #
34
+ # == Specifying different task names
35
+ #
31
36
  # You may wish to give the task a different name, such as if you are
32
37
  # generating two sets of documentation. For instance, if you want to have a
33
38
  # development set of documentation including private methods:
@@ -39,7 +44,17 @@ module Rake
39
44
  # end
40
45
  #
41
46
  # The tasks would then be named :<em>rdoc_dev</em>, :clobber_<em>rdoc_dev</em>, and
42
- # :re<em>rdoc_dev</em>.
47
+ # :re<em>rdoc_dev</em>.
48
+ #
49
+ # If you wish to have completely different task names, then pass a Hash as
50
+ # first argument. With the <tt>:rdoc</tt>, <tt>:clobber_rdoc</tt> and
51
+ # <tt>:rerdoc</tt> options, you can customize the task names to your liking.
52
+ # For example:
53
+ #
54
+ # Rake::RDocTask.new(:rdoc => "rdoc", :clobber_rdoc => "rdoc:clean", :rerdoc => "rdoc:force")
55
+ #
56
+ # This will create the tasks <tt>:rdoc</tt>, <tt>:rdoc_clean</tt> and
57
+ # <tt>:rdoc:force</tt>.
43
58
  #
44
59
  class RDocTask < TaskLib
45
60
  # Name of the main, top level task. (default is :rdoc)
@@ -48,7 +63,7 @@ module Rake
48
63
  # Name of directory to receive the html output files. (default is "html")
49
64
  attr_accessor :rdoc_dir
50
65
 
51
- # Title of RDoc documentation. (default is none)
66
+ # Title of RDoc documentation. (defaults to rdoc's default)
52
67
  attr_accessor :title
53
68
 
54
69
  # Name of file to be used as the main, top level file of the
@@ -61,14 +76,24 @@ module Rake
61
76
  # List of files to be included in the rdoc generation. (default is [])
62
77
  attr_accessor :rdoc_files
63
78
 
64
- # List of options to be passed rdoc. (default is [])
79
+ # Additional list of options to be passed rdoc. (default is [])
65
80
  attr_accessor :options
66
81
 
67
- # Run the rdoc process as an external shell (default is false)
82
+ # Whether to run the rdoc process as an external shell (default is false)
68
83
  attr_accessor :external
69
-
70
- # Create an RDoc task named <em>rdoc</em>. Default task name is +rdoc+.
71
- def initialize(name=:rdoc) # :yield: self
84
+
85
+ attr_accessor :inline_source
86
+
87
+ # Create an RDoc task with the given name. See the RDocTask class overview
88
+ # for documentation.
89
+ def initialize(name = :rdoc) # :yield: self
90
+ if name.is_a?(Hash)
91
+ invalid_options = name.keys.map { |k| k.to_sym } - [:rdoc, :clobber_rdoc, :rerdoc]
92
+ if !invalid_options.empty?
93
+ raise ArgumentError, "Invalid option(s) passed to RDocTask.new: #{invalid_options.join(", ")}"
94
+ end
95
+ end
96
+
72
97
  @name = name
73
98
  @rdoc_files = Rake::FileList.new
74
99
  @rdoc_dir = 'html'
@@ -76,6 +101,7 @@ module Rake
76
101
  @title = nil
77
102
  @template = nil
78
103
  @external = false
104
+ @inline_source = true
79
105
  @options = []
80
106
  yield self if block_given?
81
107
  define
@@ -83,31 +109,32 @@ module Rake
83
109
 
84
110
  # Create the tasks defined by this task lib.
85
111
  def define
86
- if name.to_s != "rdoc"
112
+ if rdoc_task_name != "rdoc"
87
113
  desc "Build the RDOC HTML Files"
114
+ else
115
+ desc "Build the #{rdoc_task_name} HTML Files"
88
116
  end
89
-
90
- desc "Build the #{name} HTML Files"
91
- task name
117
+ task rdoc_task_name
92
118
 
93
119
  desc "Force a rebuild of the RDOC files"
94
- task "re#{name}" => ["clobber_#{name}", name]
120
+ task rerdoc_task_name => [clobber_task_name, rdoc_task_name]
95
121
 
96
122
  desc "Remove rdoc products"
97
- task "clobber_#{name}" do
123
+ task clobber_task_name do
98
124
  rm_r rdoc_dir rescue nil
99
125
  end
100
126
 
101
- task :clobber => ["clobber_#{name}"]
127
+ task :clobber => [clobber_task_name]
102
128
 
103
129
  directory @rdoc_dir
104
- task name => [rdoc_target]
130
+ task rdoc_task_name => [rdoc_target]
105
131
  file rdoc_target => @rdoc_files + [Rake.application.rakefile] do
106
132
  rm_r @rdoc_dir rescue nil
133
+ @before_running_rdoc.call if @before_running_rdoc
107
134
  args = option_list + @rdoc_files
108
135
  if @external
109
136
  argstring = args.join(' ')
110
- sh %{ruby -Ivendor vender/rd #{argstring}}
137
+ sh %{ruby -Ivendor vendor/rd #{argstring}}
111
138
  else
112
139
  require 'rdoc/rdoc'
113
140
  RDoc::RDoc.new.document(args)
@@ -122,6 +149,7 @@ module Rake
122
149
  result << "--main" << quote(main) if main
123
150
  result << "--title" << quote(title) if title
124
151
  result << "-T" << quote(template) if template
152
+ result << "--inline-source" if inline_source && !@options.include?("--inline-source") && !@options.include?("-S")
125
153
  result
126
154
  end
127
155
 
@@ -136,12 +164,46 @@ module Rake
136
164
  def option_string
137
165
  option_list.join(' ')
138
166
  end
167
+
168
+ # The block passed to this method will be called just before running the
169
+ # RDoc generator. It is allowed to modify RDocTask attributes inside the
170
+ # block.
171
+ def before_running_rdoc(&block)
172
+ @before_running_rdoc = block
173
+ end
139
174
 
140
175
  private
141
-
176
+
142
177
  def rdoc_target
143
178
  "#{rdoc_dir}/index.html"
144
179
  end
180
+
181
+ def rdoc_task_name
182
+ case name
183
+ when Hash
184
+ (name[:rdoc] || "rdoc").to_s
185
+ else
186
+ name.to_s
187
+ end
188
+ end
189
+
190
+ def clobber_task_name
191
+ case name
192
+ when Hash
193
+ (name[:clobber_rdoc] || "clobber_rdoc").to_s
194
+ else
195
+ "clobber_#{name}"
196
+ end
197
+ end
198
+
199
+ def rerdoc_task_name
200
+ case name
201
+ when Hash
202
+ (name[:rerdoc] || "rerdoc").to_s
203
+ else
204
+ "re#{name}"
205
+ end
206
+ end
145
207
 
146
208
  end
147
209
  end
data/lib/rake/testtask.rb CHANGED
@@ -109,7 +109,7 @@ module Rake
109
109
  when :rake
110
110
  rake_loader
111
111
  end
112
- @ruby_opts.unshift( "-I#{lib_path}" )
112
+ @ruby_opts.unshift( "-I\"#{lib_path}\"" )
113
113
  @ruby_opts.unshift( "-w" ) if @warning
114
114
  ruby @ruby_opts.join(" ") +
115
115
  " \"#{run_code}\" " +
data/lib/rake/win32.rb CHANGED
@@ -1,5 +1,7 @@
1
+
1
2
  module Rake
2
-
3
+ require 'rake/alt_system'
4
+
3
5
  # Win 32 interface methods for Rake. Windows specific functionality
4
6
  # will be placed here to collect that knowledge in one spot.
5
7
  module Win32
@@ -12,38 +14,37 @@ module Rake
12
14
  class << self
13
15
  # True if running on a windows system.
14
16
  def windows?
15
- Config::CONFIG['host_os'] =~ /mswin/
17
+ AltSystem::WINDOWS
16
18
  end
17
19
 
18
20
  # Run a command line on windows.
19
21
  def rake_system(*cmd)
20
- if cmd.size == 1
21
- system("call #{cmd}")
22
- else
23
- system(*cmd)
24
- end
22
+ AltSystem.system(*cmd)
25
23
  end
26
24
 
27
25
  # The standard directory containing system wide rake files on
28
26
  # Win 32 systems. Try the following environment variables (in
29
27
  # order):
30
28
  #
31
- # * APPDATA
29
+ # * HOME
32
30
  # * HOMEDRIVE + HOMEPATH
31
+ # * APPDATA
33
32
  # * USERPROFILE
34
33
  #
35
34
  # If the above are not defined, the return nil.
36
35
  def win32_system_dir #:nodoc:
37
- win32_shared_path = ENV['APPDATA']
36
+ win32_shared_path = ENV['HOME']
38
37
  if win32_shared_path.nil? && ENV['HOMEDRIVE'] && ENV['HOMEPATH']
39
38
  win32_shared_path = ENV['HOMEDRIVE'] + ENV['HOMEPATH']
40
39
  end
40
+
41
+ win32_shared_path ||= ENV['APPDATA']
41
42
  win32_shared_path ||= ENV['USERPROFILE']
42
43
  raise Win32HomeError, "Unable to determine home path environment variable." if
43
44
  win32_shared_path.nil? or win32_shared_path.empty?
44
45
  normalize(File.join(win32_shared_path, 'Rake'))
45
46
  end
46
-
47
+
47
48
  # Normalize a win32 path so that the slashes are all forward slashes.
48
49
  def normalize(path)
49
50
  path.gsub(/\\/, '/')
data/test/Rakefile.seq CHANGED
@@ -1,7 +1,7 @@
1
1
 
2
2
  require 'thread'
3
3
 
4
- task_names = (1...100).map { |n| n.to_s }
4
+ task_names = (1..50).map { |n| n.to_s }
5
5
  order_invoked = []
6
6
  mutex = Mutex.new
7
7
 
data/test/Rakefile.simple CHANGED
@@ -1,29 +1,18 @@
1
1
 
2
- task :default => [:a, :b] do |t, args|
3
- puts "task default"
4
- end
2
+ require 'thread'
5
3
 
6
- def stuff
7
- sleep(1)
8
- end
4
+ task :default => [:a, :b]
5
+ task :a => [:x, :y]
6
+ task :b
9
7
 
10
- task :a => [:x, :y] do
11
- puts "task a"
12
- stuff
13
- end
14
-
15
- task :b do
16
- puts "task b"
17
- stuff
18
- end
19
-
20
- task :x do
21
- puts "task x"
22
- stuff
23
- end
24
-
25
- task :y do
26
- puts "task y"
27
- stuff
28
- end
8
+ mutex = Mutex.new
9
+ STDOUT.sync = true
29
10
 
11
+ %w[a b x y].each { |name|
12
+ task name.to_sym do
13
+ mutex.synchronize {
14
+ puts "task #{name}"
15
+ }
16
+ sleep(1)
17
+ end
18
+ }