rake 11.3.0 → 12.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rake might be problematic. Click here for more details.

Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +51 -12
  3. data/.travis.yml +2 -9
  4. data/Gemfile +1 -1
  5. data/History.rdoc +41 -29
  6. data/README.rdoc +4 -5
  7. data/Rakefile +18 -13
  8. data/appveyor.yml +6 -7
  9. data/doc/rake.1 +139 -124
  10. data/doc/rakefile.rdoc +1 -3
  11. data/exe/rake +1 -1
  12. data/lib/rake.rb +33 -33
  13. data/lib/rake/application.rb +68 -67
  14. data/lib/rake/backtrace.rb +2 -2
  15. data/lib/rake/clean.rb +4 -3
  16. data/lib/rake/cpu_counter.rb +1 -1
  17. data/lib/rake/dsl_definition.rb +1 -1
  18. data/lib/rake/ext/string.rb +21 -21
  19. data/lib/rake/file_creation_task.rb +2 -2
  20. data/lib/rake/file_list.rb +8 -10
  21. data/lib/rake/file_task.rb +2 -2
  22. data/lib/rake/file_utils.rb +7 -10
  23. data/lib/rake/file_utils_ext.rb +3 -3
  24. data/lib/rake/late_time.rb +1 -1
  25. data/lib/rake/loaders/makefile.rb +4 -4
  26. data/lib/rake/multi_task.rb +36 -0
  27. data/lib/rake/name_space.rb +0 -1
  28. data/lib/rake/packagetask.rb +10 -10
  29. data/lib/rake/phony.rb +1 -1
  30. data/lib/rake/promise.rb +10 -10
  31. data/lib/rake/rake_module.rb +1 -1
  32. data/lib/rake/rake_test_loader.rb +1 -1
  33. data/lib/rake/rule_recursion_overflow_error.rb +1 -1
  34. data/lib/rake/scope.rb +1 -1
  35. data/lib/rake/task.rb +13 -14
  36. data/lib/rake/task_arguments.rb +8 -4
  37. data/lib/rake/task_manager.rb +5 -18
  38. data/lib/rake/tasklib.rb +1 -1
  39. data/lib/rake/testtask.rb +26 -16
  40. data/lib/rake/thread_history_display.rb +3 -3
  41. data/lib/rake/thread_pool.rb +14 -14
  42. data/lib/rake/version.rb +2 -2
  43. data/lib/rake/win32.rb +8 -8
  44. data/rake.gemspec +15 -6
  45. metadata +20 -68
  46. data/doc/release_notes/README.md +0 -4
  47. data/doc/release_notes/rake-0.4.14.rdoc +0 -23
  48. data/doc/release_notes/rake-0.4.15.rdoc +0 -35
  49. data/doc/release_notes/rake-0.5.0.rdoc +0 -53
  50. data/doc/release_notes/rake-0.5.3.rdoc +0 -78
  51. data/doc/release_notes/rake-0.5.4.rdoc +0 -46
  52. data/doc/release_notes/rake-0.6.0.rdoc +0 -141
  53. data/doc/release_notes/rake-0.7.0.rdoc +0 -119
  54. data/doc/release_notes/rake-0.7.1.rdoc +0 -59
  55. data/doc/release_notes/rake-0.7.2.rdoc +0 -121
  56. data/doc/release_notes/rake-0.7.3.rdoc +0 -47
  57. data/doc/release_notes/rake-0.8.0.rdoc +0 -114
  58. data/doc/release_notes/rake-0.8.2.rdoc +0 -165
  59. data/doc/release_notes/rake-0.8.3.rdoc +0 -112
  60. data/doc/release_notes/rake-0.8.4.rdoc +0 -147
  61. data/doc/release_notes/rake-0.8.5.rdoc +0 -53
  62. data/doc/release_notes/rake-0.8.6.rdoc +0 -37
  63. data/doc/release_notes/rake-0.8.7.rdoc +0 -55
  64. data/doc/release_notes/rake-0.9.0.rdoc +0 -112
  65. data/doc/release_notes/rake-0.9.1.rdoc +0 -52
  66. data/doc/release_notes/rake-0.9.2.2.rdoc +0 -55
  67. data/doc/release_notes/rake-0.9.2.rdoc +0 -49
  68. data/doc/release_notes/rake-0.9.3.rdoc +0 -102
  69. data/doc/release_notes/rake-0.9.4.rdoc +0 -60
  70. data/doc/release_notes/rake-0.9.5.rdoc +0 -55
  71. data/doc/release_notes/rake-0.9.6.rdoc +0 -64
  72. data/doc/release_notes/rake-10.0.0.rdoc +0 -178
  73. data/doc/release_notes/rake-10.0.1.rdoc +0 -58
  74. data/doc/release_notes/rake-10.0.2.rdoc +0 -53
  75. data/doc/release_notes/rake-10.0.3.rdoc +0 -191
  76. data/doc/release_notes/rake-10.1.0.rdoc +0 -61
  77. data/lib/rake/contrib/compositepublisher.rb +0 -21
  78. data/lib/rake/contrib/ftptools.rb +0 -137
  79. data/lib/rake/contrib/sshpublisher.rb +0 -60
  80. data/lib/rake/ext/pathname.rb +0 -25
@@ -5,12 +5,12 @@ module Rake
5
5
  [ File.join(File.dirname(__FILE__), "..") ]
6
6
 
7
7
  SUPPRESSED_PATHS = SYS_PATHS.
8
- map { |s| s.gsub("\\", "/") }.
8
+ map { |s| s.tr("\\", "/") }.
9
9
  map { |f| File.expand_path(f) }.
10
10
  reject { |s| s.nil? || s =~ /^ *$/ }
11
11
  SUPPRESSED_PATHS_RE = SUPPRESSED_PATHS.map { |f| Regexp.quote(f) }.join("|")
12
12
  SUPPRESSED_PATHS_RE << "|^org\\/jruby\\/\\w+\\.java" if
13
- Object.const_defined?(:RUBY_ENGINE) and RUBY_ENGINE == 'jruby'
13
+ Object.const_defined?(:RUBY_ENGINE) and RUBY_ENGINE == "jruby"
14
14
 
15
15
  SUPPRESS_PATTERN = %r!(\A(#{SUPPRESSED_PATHS_RE})|bin/rake:\d+)!i
16
16
 
@@ -11,7 +11,7 @@
11
11
  # The intent of this task is to return a project to its
12
12
  # pristine, just unpacked state.
13
13
 
14
- require 'rake'
14
+ require "rake"
15
15
 
16
16
  # :stopdoc:
17
17
 
@@ -29,6 +29,7 @@ module Rake
29
29
 
30
30
  def cleanup(file_name, opts={})
31
31
  begin
32
+ opts = {:verbose => Rake.application.options.trace}.merge(opts)
32
33
  rm_r file_name, opts
33
34
  rescue StandardError => ex
34
35
  puts "Failed to remove #{file_name}: #{ex}" unless file_already_gone?(file_name)
@@ -60,7 +61,7 @@ end
60
61
 
61
62
  CLEAN = ::Rake::FileList["**/*~", "**/*.bak", "**/core"]
62
63
  CLEAN.clear_exclude.exclude { |fn|
63
- fn.pathmap("%f").downcase == 'core' && File.directory?(fn)
64
+ fn.pathmap("%f").downcase == "core" && File.directory?(fn)
64
65
  }
65
66
 
66
67
  desc "Remove any temporary products."
@@ -71,6 +72,6 @@ end
71
72
  CLOBBER = ::Rake::FileList.new
72
73
 
73
74
  desc "Remove any generated files."
74
- task :clobber => [:clean] do
75
+ task clobber: [:clean] do
75
76
  Rake::Cleaner.cleanup_files(CLOBBER)
76
77
  end
@@ -14,7 +14,7 @@ module Rake
14
14
  end
15
15
 
16
16
  begin
17
- require 'etc'
17
+ require "etc"
18
18
  rescue LoadError
19
19
  else
20
20
  if Etc.respond_to?(:nprocessors)
@@ -1,5 +1,5 @@
1
1
  # Rake DSL functions.
2
- require 'rake/file_utils_ext'
2
+ require "rake/file_utils_ext"
3
3
 
4
4
  module Rake
5
5
 
@@ -1,4 +1,4 @@
1
- require 'rake/ext/core'
1
+ require "rake/ext/core"
2
2
 
3
3
  class String
4
4
 
@@ -10,9 +10,9 @@ class String
10
10
  # +ext+ is a user added method for the String class.
11
11
  #
12
12
  # This String extension comes from Rake
13
- def ext(newext='')
14
- return self.dup if ['.', '..'].include? self
15
- if newext != ''
13
+ def ext(newext="")
14
+ return self.dup if [".", ".."].include? self
15
+ if newext != ""
16
16
  newext = "." + newext unless newext =~ /^\./
17
17
  end
18
18
  self.chomp(File.extname(self)) << newext
@@ -26,8 +26,8 @@ class String
26
26
  def pathmap_explode
27
27
  head, tail = File.split(self)
28
28
  return [self] if head == self
29
- return [tail] if head == '.' || tail == '/'
30
- return [head, tail] if head == '/'
29
+ return [tail] if head == "." || tail == "/"
30
+ return [head, tail] if head == "/"
31
31
  return head.pathmap_explode + [tail]
32
32
  end
33
33
  protected :pathmap_explode
@@ -57,15 +57,15 @@ class String
57
57
  # This String extension comes from Rake
58
58
  def pathmap_replace(patterns, &block)
59
59
  result = self
60
- patterns.split(';').each do |pair|
61
- pattern, replacement = pair.split(',')
60
+ patterns.split(";").each do |pair|
61
+ pattern, replacement = pair.split(",")
62
62
  pattern = Regexp.new(pattern)
63
- if replacement == '*' && block_given?
63
+ if replacement == "*" && block_given?
64
64
  result = result.sub(pattern, &block)
65
65
  elsif replacement
66
66
  result = result.sub(pattern, replacement)
67
67
  else
68
- result = result.sub(pattern, '')
68
+ result = result.sub(pattern, "")
69
69
  end
70
70
  end
71
71
  result
@@ -136,32 +136,32 @@ class String
136
136
  # This String extension comes from Rake
137
137
  def pathmap(spec=nil, &block)
138
138
  return self if spec.nil?
139
- result = ''
139
+ result = ""
140
140
  spec.scan(/%\{[^}]*\}-?\d*[sdpfnxX%]|%-?\d+d|%.|[^%]+/) do |frag|
141
141
  case frag
142
- when '%f'
142
+ when "%f"
143
143
  result << File.basename(self)
144
- when '%n'
144
+ when "%n"
145
145
  result << File.basename(self).ext
146
- when '%d'
146
+ when "%d"
147
147
  result << File.dirname(self)
148
- when '%x'
148
+ when "%x"
149
149
  result << File.extname(self)
150
- when '%X'
150
+ when "%X"
151
151
  result << self.ext
152
- when '%p'
152
+ when "%p"
153
153
  result << self
154
- when '%s'
154
+ when "%s"
155
155
  result << (File::ALT_SEPARATOR || File::SEPARATOR)
156
- when '%-'
156
+ when "%-"
157
157
  # do nothing
158
- when '%%'
158
+ when "%%"
159
159
  result << "%"
160
160
  when /%(-?\d+)d/
161
161
  result << pathmap_partial($1.to_i)
162
162
  when /^%\{([^}]*)\}(\d*[dpfnxX])/
163
163
  patterns, operator = $1, $2
164
- result << pathmap('%' + operator).pathmap_replace(patterns, &block)
164
+ result << pathmap("%" + operator).pathmap_replace(patterns, &block)
165
165
  when /^%/
166
166
  fail ArgumentError, "Unknown pathmap specifier #{frag} in '#{spec}'"
167
167
  else
@@ -1,5 +1,5 @@
1
- require 'rake/file_task'
2
- require 'rake/early_time'
1
+ require "rake/file_task"
2
+ require "rake/early_time"
3
3
 
4
4
  module Rake
5
5
 
@@ -1,6 +1,6 @@
1
- require 'rake/cloneable'
2
- require 'rake/file_utils_ext'
3
- require 'rake/ext/string'
1
+ require "rake/cloneable"
2
+ require "rake/file_utils_ext"
3
+ require "rake/ext/string"
4
4
 
5
5
  module Rake
6
6
 
@@ -40,8 +40,7 @@ module Rake
40
40
 
41
41
  # List of array methods (that are not in +Object+) that need to be
42
42
  # delegated.
43
- ARRAY_METHODS = (Array.instance_methods - Object.instance_methods).
44
- map { |n| n.to_s }
43
+ ARRAY_METHODS = (Array.instance_methods - Object.instance_methods).map(&:to_s)
45
44
 
46
45
  # List of additional methods that must be delegated.
47
46
  MUST_DEFINE = %w[inspect <=>]
@@ -58,8 +57,7 @@ module Rake
58
57
  + - & |
59
58
  ]
60
59
 
61
- DELEGATING_METHODS = (ARRAY_METHODS + MUST_DEFINE - MUST_NOT_DEFINE).
62
- map { |s| s.to_s }.sort.uniq
60
+ DELEGATING_METHODS = (ARRAY_METHODS + MUST_DEFINE - MUST_NOT_DEFINE).map(&:to_s).sort.uniq
63
61
 
64
62
  # Now do the delegation.
65
63
  DELEGATING_METHODS.each do |sym|
@@ -282,7 +280,7 @@ module Rake
282
280
  # array.collect { |item| item.ext(newext) }
283
281
  #
284
282
  # +ext+ is a user added method for the Array class.
285
- def ext(newext='')
283
+ def ext(newext="")
286
284
  collect { |fn| fn.ext(newext) }
287
285
  end
288
286
 
@@ -344,7 +342,7 @@ module Rake
344
342
  # Convert a FileList to a string by joining all elements with a space.
345
343
  def to_s
346
344
  resolve
347
- self.join(' ')
345
+ self.join(" ")
348
346
  end
349
347
 
350
348
  # Add matching glob patterns.
@@ -418,7 +416,7 @@ module Rake
418
416
  # Yield each file or directory component.
419
417
  def each_dir_parent(dir) # :nodoc:
420
418
  old_length = nil
421
- while dir != '.' && dir.length != old_length
419
+ while dir != "." && dir.length != old_length
422
420
  yield(dir)
423
421
  old_length = dir.length
424
422
  dir = File.dirname(dir)
@@ -1,5 +1,5 @@
1
- require 'rake/task.rb'
2
- require 'rake/early_time'
1
+ require "rake/task.rb"
2
+ require "rake/early_time"
3
3
 
4
4
  module Rake
5
5
 
@@ -1,19 +1,16 @@
1
- require 'rbconfig'
2
- require 'fileutils'
1
+ require "rbconfig"
2
+ require "fileutils"
3
3
 
4
4
  #--
5
5
  # This a FileUtils extension that defines several additional commands to be
6
6
  # added to the FileUtils utility functions.
7
7
  module FileUtils
8
8
  # Path to the currently running Ruby program
9
- RUBY = ENV['RUBY'] || File.join(
10
- RbConfig::CONFIG['bindir'],
11
- RbConfig::CONFIG['ruby_install_name'] + RbConfig::CONFIG['EXEEXT']).
9
+ RUBY = ENV["RUBY"] || File.join(
10
+ RbConfig::CONFIG["bindir"],
11
+ RbConfig::CONFIG["ruby_install_name"] + RbConfig::CONFIG["EXEEXT"]).
12
12
  sub(/.*\s.*/m, '"\&"')
13
13
 
14
- OPT_TABLE['sh'] = %w(noop verbose)
15
- OPT_TABLE['ruby'] = %w(noop verbose)
16
-
17
14
  # Run the system command +cmd+. If multiple arguments are given the command
18
15
  # is run directly (without the shell, same semantics as Kernel::exec and
19
16
  # Kernel::system).
@@ -132,8 +129,8 @@ module FileUtils
132
129
  #
133
130
  def split_all(path)
134
131
  head, tail = File.split(path)
135
- return [tail] if head == '.' || tail == '/'
136
- return [head, tail] if head == '/'
132
+ return [tail] if head == "." || tail == "/"
133
+ return [head, tail] if head == "/"
137
134
  return split_all(head) + [tail]
138
135
  end
139
136
  end
@@ -1,4 +1,4 @@
1
- require 'rake/file_utils'
1
+ require "rake/file_utils"
2
2
 
3
3
  module Rake
4
4
  #
@@ -22,10 +22,10 @@ module Rake
22
22
  opts = FileUtils.options_of name
23
23
  default_options = []
24
24
  if opts.include?("verbose")
25
- default_options << ':verbose => FileUtilsExt.verbose_flag'
25
+ default_options << ":verbose => FileUtilsExt.verbose_flag"
26
26
  end
27
27
  if opts.include?("noop")
28
- default_options << ':noop => FileUtilsExt.nowrite_flag'
28
+ default_options << ":noop => FileUtilsExt.nowrite_flag"
29
29
  end
30
30
 
31
31
  next if default_options.empty?
@@ -9,7 +9,7 @@ module Rake
9
9
  end
10
10
 
11
11
  def to_s
12
- '<LATE TIME>'
12
+ "<LATE TIME>"
13
13
  end
14
14
  end
15
15
 
@@ -24,7 +24,7 @@ module Rake
24
24
  lines = File.read fn
25
25
  lines.gsub!(/\\ /, SPACE_MARK)
26
26
  lines.gsub!(/#[^\n]*\n/m, "")
27
- lines.gsub!(/\\\n/, ' ')
27
+ lines.gsub!(/\\\n/, " ")
28
28
  lines.each_line do |line|
29
29
  process_line(line)
30
30
  end
@@ -34,7 +34,7 @@ module Rake
34
34
 
35
35
  # Process one logical line of makefile data.
36
36
  def process_line(line) # :nodoc:
37
- file_tasks, args = line.split(':', 2)
37
+ file_tasks, args = line.split(":", 2)
38
38
  return if args.nil?
39
39
  dependents = args.split.map { |d| respace(d) }
40
40
  file_tasks.scan(/\S+/) do |file_task|
@@ -44,10 +44,10 @@ module Rake
44
44
  end
45
45
 
46
46
  def respace(str) # :nodoc:
47
- str.tr SPACE_MARK, ' '
47
+ str.tr SPACE_MARK, " "
48
48
  end
49
49
  end
50
50
 
51
51
  # Install the handler
52
- Rake.application.add_loader('mf', MakefileLoader.new)
52
+ Rake.application.add_loader("mf", MakefileLoader.new)
53
53
  end
@@ -4,6 +4,42 @@ module Rake
4
4
  # parallel using Ruby threads.
5
5
  #
6
6
  class MultiTask < Task
7
+
8
+ # Same as invoke, but explicitly pass a call chain to detect
9
+ # circular dependencies. This is largely copied from Rake::Task
10
+ # but has been updated such that if multiple tasks depend on this
11
+ # one in parallel, they will all fail if the first execution of
12
+ # this task fails.
13
+ def invoke_with_call_chain(task_args, invocation_chain)
14
+ new_chain = Rake::InvocationChain.append(self, invocation_chain)
15
+ @lock.synchronize do
16
+ begin
17
+ if @already_invoked
18
+ if @invocation_exception
19
+ if application.options.trace
20
+ application.trace "** Previous invocation of #{name} failed #{format_trace_flags}"
21
+ end
22
+ raise @invocation_exception
23
+ else
24
+ return
25
+ end
26
+ end
27
+
28
+ if application.options.trace
29
+ application.trace "** Invoke #{name} #{format_trace_flags}"
30
+ end
31
+ @already_invoked = true
32
+
33
+ invoke_prerequisites(task_args, new_chain)
34
+ execute(task_args) if needed?
35
+ rescue Exception => ex
36
+ add_chain_to(ex, new_chain)
37
+ @invocation_exception = ex
38
+ raise
39
+ end
40
+ end
41
+ end
42
+
7
43
  private
8
44
  def invoke_prerequisites(task_args, invocation_chain) # :nodoc:
9
45
  invoke_prerequisites_concurrently(task_args, invocation_chain)
@@ -35,4 +35,3 @@ class Rake::NameSpace
35
35
  end
36
36
 
37
37
  end
38
-
@@ -1,8 +1,8 @@
1
1
  # Define a package task library to aid in the definition of
2
2
  # redistributable package files.
3
3
 
4
- require 'rake'
5
- require 'rake/tasklib'
4
+ require "rake"
5
+ require "rake/tasklib"
6
6
 
7
7
  module Rake
8
8
 
@@ -93,14 +93,14 @@ module Rake
93
93
  @name = name
94
94
  @version = version
95
95
  @package_files = Rake::FileList.new
96
- @package_dir = 'pkg'
96
+ @package_dir = "pkg"
97
97
  @need_tar = false
98
98
  @need_tar_gz = false
99
99
  @need_tar_bz2 = false
100
100
  @need_tar_xz = false
101
101
  @need_zip = false
102
- @tar_command = 'tar'
103
- @zip_command = 'zip'
102
+ @tar_command = "tar"
103
+ @zip_command = "zip"
104
104
  end
105
105
 
106
106
  # Create the tasks defined by this task library.
@@ -112,23 +112,23 @@ module Rake
112
112
  task :package
113
113
 
114
114
  desc "Force a rebuild of the package files"
115
- task :repackage => [:clobber_package, :package]
115
+ task repackage: [:clobber_package, :package]
116
116
 
117
117
  desc "Remove package products"
118
118
  task :clobber_package do
119
119
  rm_r package_dir rescue nil
120
120
  end
121
121
 
122
- task :clobber => [:clobber_package]
122
+ task clobber: [:clobber_package]
123
123
 
124
124
  [
125
125
  [need_tar, tgz_file, "z"],
126
126
  [need_tar_gz, tar_gz_file, "z"],
127
127
  [need_tar_bz2, tar_bz2_file, "j"],
128
128
  [need_tar_xz, tar_xz_file, "J"]
129
- ].each do |(need, file, flag)|
129
+ ].each do |need, file, flag|
130
130
  if need
131
- task :package => ["#{package_dir}/#{file}"]
131
+ task package: ["#{package_dir}/#{file}"]
132
132
  file "#{package_dir}/#{file}" =>
133
133
  [package_dir_path] + package_files do
134
134
  chdir(package_dir) do
@@ -139,7 +139,7 @@ module Rake
139
139
  end
140
140
 
141
141
  if need_zip
142
- task :package => ["#{package_dir}/#{zip_file}"]
142
+ task package: ["#{package_dir}/#{zip_file}"]
143
143
  file "#{package_dir}/#{zip_file}" =>
144
144
  [package_dir_path] + package_files do
145
145
  chdir(package_dir) do
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # See FileTask#out_of_date? and Task#timestamp for more info.
6
6
 
7
- require 'rake'
7
+ require "rake"
8
8
 
9
9
  task :phony
10
10