drake 0.8.3.1.0.14 → 0.8.4.1.0.15

Sign up to get free protection for your applications and to get access to all the features.
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
+ }