rake 0.9.2.2 → 13.0.6

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 (138) hide show
  1. checksums.yaml +7 -0
  2. data/History.rdoc +2403 -0
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +64 -106
  5. data/doc/command_line_usage.rdoc +65 -21
  6. data/doc/glossary.rdoc +40 -49
  7. data/doc/jamis.rb +1 -0
  8. data/doc/rake.1 +156 -0
  9. data/doc/rakefile.rdoc +127 -62
  10. data/{bin → exe}/rake +1 -7
  11. data/lib/rake/application.rb +507 -271
  12. data/lib/rake/backtrace.rb +24 -0
  13. data/lib/rake/clean.rb +54 -8
  14. data/lib/rake/cloneable.rb +11 -19
  15. data/lib/rake/cpu_counter.rb +107 -0
  16. data/lib/rake/default_loader.rb +5 -0
  17. data/lib/rake/dsl_definition.rb +67 -48
  18. data/lib/rake/early_time.rb +5 -1
  19. data/lib/rake/ext/core.rb +5 -6
  20. data/lib/rake/ext/string.rb +61 -52
  21. data/lib/rake/file_creation_task.rb +4 -3
  22. data/lib/rake/file_list.rb +81 -49
  23. data/lib/rake/file_task.rb +15 -8
  24. data/lib/rake/file_utils.rb +63 -43
  25. data/lib/rake/file_utils_ext.rb +14 -25
  26. data/lib/rake/invocation_chain.rb +25 -19
  27. data/lib/rake/invocation_exception_mixin.rb +1 -0
  28. data/lib/rake/late_time.rb +18 -0
  29. data/lib/rake/linked_list.rb +112 -0
  30. data/lib/rake/loaders/makefile.rb +23 -9
  31. data/lib/rake/multi_task.rb +4 -6
  32. data/lib/rake/name_space.rb +36 -23
  33. data/lib/rake/packagetask.rb +71 -34
  34. data/lib/rake/phony.rb +16 -0
  35. data/lib/rake/private_reader.rb +21 -0
  36. data/lib/rake/promise.rb +100 -0
  37. data/lib/rake/pseudo_status.rb +8 -2
  38. data/lib/rake/rake_module.rb +41 -3
  39. data/lib/rake/rake_test_loader.rb +9 -4
  40. data/lib/rake/rule_recursion_overflow_error.rb +2 -2
  41. data/lib/rake/scope.rb +43 -0
  42. data/lib/rake/task.rb +186 -79
  43. data/lib/rake/task_argument_error.rb +1 -0
  44. data/lib/rake/task_arguments.rb +46 -15
  45. data/lib/rake/task_manager.rb +91 -67
  46. data/lib/rake/tasklib.rb +2 -12
  47. data/lib/rake/testtask.rb +61 -63
  48. data/lib/rake/thread_history_display.rb +49 -0
  49. data/lib/rake/thread_pool.rb +163 -0
  50. data/lib/rake/trace_output.rb +23 -0
  51. data/lib/rake/version.rb +5 -3
  52. data/lib/rake/win32.rb +14 -18
  53. data/lib/rake.rb +35 -33
  54. data/rake.gemspec +100 -0
  55. metadata +74 -176
  56. data/.gemtest +0 -0
  57. data/CHANGES +0 -522
  58. data/Rakefile +0 -369
  59. data/TODO +0 -20
  60. data/doc/rake.1.gz +0 -0
  61. data/doc/release_notes/rake-0.4.14.rdoc +0 -23
  62. data/doc/release_notes/rake-0.4.15.rdoc +0 -35
  63. data/doc/release_notes/rake-0.5.0.rdoc +0 -53
  64. data/doc/release_notes/rake-0.5.3.rdoc +0 -78
  65. data/doc/release_notes/rake-0.5.4.rdoc +0 -46
  66. data/doc/release_notes/rake-0.6.0.rdoc +0 -141
  67. data/doc/release_notes/rake-0.7.0.rdoc +0 -119
  68. data/doc/release_notes/rake-0.7.1.rdoc +0 -59
  69. data/doc/release_notes/rake-0.7.2.rdoc +0 -121
  70. data/doc/release_notes/rake-0.7.3.rdoc +0 -47
  71. data/doc/release_notes/rake-0.8.0.rdoc +0 -114
  72. data/doc/release_notes/rake-0.8.2.rdoc +0 -165
  73. data/doc/release_notes/rake-0.8.3.rdoc +0 -112
  74. data/doc/release_notes/rake-0.8.4.rdoc +0 -147
  75. data/doc/release_notes/rake-0.8.5.rdoc +0 -53
  76. data/doc/release_notes/rake-0.8.6.rdoc +0 -55
  77. data/doc/release_notes/rake-0.8.7.rdoc +0 -55
  78. data/doc/release_notes/rake-0.9.0.rdoc +0 -112
  79. data/doc/release_notes/rake-0.9.1.rdoc +0 -52
  80. data/doc/release_notes/rake-0.9.2.rdoc +0 -49
  81. data/install.rb +0 -90
  82. data/lib/rake/alt_system.rb +0 -109
  83. data/lib/rake/classic_namespace.rb +0 -11
  84. data/lib/rake/contrib/compositepublisher.rb +0 -21
  85. data/lib/rake/contrib/ftptools.rb +0 -150
  86. data/lib/rake/contrib/publisher.rb +0 -73
  87. data/lib/rake/contrib/rubyforgepublisher.rb +0 -16
  88. data/lib/rake/contrib/sshpublisher.rb +0 -50
  89. data/lib/rake/contrib/sys.rb +0 -191
  90. data/lib/rake/ext/module.rb +0 -39
  91. data/lib/rake/ext/time.rb +0 -14
  92. data/lib/rake/gempackagetask.rb +0 -15
  93. data/lib/rake/pathmap.rb +0 -1
  94. data/lib/rake/rdoctask.rb +0 -234
  95. data/lib/rake/ruby182_test_unit_fix.rb +0 -25
  96. data/lib/rake/runtest.rb +0 -21
  97. data/test/file_creation.rb +0 -34
  98. data/test/helper.rb +0 -492
  99. data/test/test_rake.rb +0 -40
  100. data/test/test_rake_application.rb +0 -489
  101. data/test/test_rake_application_options.rb +0 -335
  102. data/test/test_rake_clean.rb +0 -14
  103. data/test/test_rake_definitions.rb +0 -80
  104. data/test/test_rake_directory_task.rb +0 -46
  105. data/test/test_rake_dsl.rb +0 -77
  106. data/test/test_rake_early_time.rb +0 -31
  107. data/test/test_rake_extension.rb +0 -59
  108. data/test/test_rake_file_creation_task.rb +0 -56
  109. data/test/test_rake_file_list.rb +0 -628
  110. data/test/test_rake_file_list_path_map.rb +0 -8
  111. data/test/test_rake_file_task.rb +0 -102
  112. data/test/test_rake_file_utils.rb +0 -305
  113. data/test/test_rake_ftp_file.rb +0 -59
  114. data/test/test_rake_functional.rb +0 -450
  115. data/test/test_rake_invocation_chain.rb +0 -52
  116. data/test/test_rake_makefile_loader.rb +0 -44
  117. data/test/test_rake_multi_task.rb +0 -51
  118. data/test/test_rake_name_space.rb +0 -43
  119. data/test/test_rake_package_task.rb +0 -79
  120. data/test/test_rake_path_map.rb +0 -157
  121. data/test/test_rake_path_map_explode.rb +0 -34
  122. data/test/test_rake_path_map_partial.rb +0 -18
  123. data/test/test_rake_pseudo_status.rb +0 -21
  124. data/test/test_rake_rake_test_loader.rb +0 -21
  125. data/test/test_rake_rdoc_task.rb +0 -83
  126. data/test/test_rake_require.rb +0 -40
  127. data/test/test_rake_rules.rb +0 -327
  128. data/test/test_rake_task.rb +0 -267
  129. data/test/test_rake_task_argument_parsing.rb +0 -103
  130. data/test/test_rake_task_arguments.rb +0 -88
  131. data/test/test_rake_task_lib.rb +0 -9
  132. data/test/test_rake_task_manager.rb +0 -157
  133. data/test/test_rake_task_manager_argument_resolution.rb +0 -36
  134. data/test/test_rake_task_with_arguments.rb +0 -173
  135. data/test/test_rake_test_task.rb +0 -120
  136. data/test/test_rake_top_level_functions.rb +0 -111
  137. data/test/test_rake_win32.rb +0 -72
  138. data/test/test_sys.rb +0 -20
@@ -1,8 +1,9 @@
1
+ # frozen_string_literal: true
1
2
  # Define a package task library to aid in the definition of
2
3
  # redistributable package files.
3
4
 
4
- require 'rake'
5
- require 'rake/tasklib'
5
+ require "rake"
6
+ require "rake/tasklib"
6
7
 
7
8
  module Rake
8
9
 
@@ -11,27 +12,27 @@ module Rake
11
12
  #
12
13
  # The PackageTask will create the following targets:
13
14
  #
14
- # [<b>:package</b>]
15
+ # +:package+ ::
15
16
  # Create all the requested package files.
16
17
  #
17
- # [<b>:clobber_package</b>]
18
+ # +:clobber_package+ ::
18
19
  # Delete all the package files. This target is automatically
19
20
  # added to the main clobber target.
20
21
  #
21
- # [<b>:repackage</b>]
22
+ # +:repackage+ ::
22
23
  # Rebuild the package files from scratch, even if they are not out
23
24
  # of date.
24
25
  #
25
- # [<b>"<em>package_dir</em>/<em>name</em>-<em>version</em>.tgz"</b>]
26
+ # <tt>"<em>package_dir</em>/<em>name</em>-<em>version</em>.tgz"</tt> ::
26
27
  # Create a gzipped tar package (if <em>need_tar</em> is true).
27
28
  #
28
- # [<b>"<em>package_dir</em>/<em>name</em>-<em>version</em>.tar.gz"</b>]
29
+ # <tt>"<em>package_dir</em>/<em>name</em>-<em>version</em>.tar.gz"</tt> ::
29
30
  # Create a gzipped tar package (if <em>need_tar_gz</em> is true).
30
31
  #
31
- # [<b>"<em>package_dir</em>/<em>name</em>-<em>version</em>.tar.bz2"</b>]
32
+ # <tt>"<em>package_dir</em>/<em>name</em>-<em>version</em>.tar.bz2"</tt> ::
32
33
  # Create a bzip2'd tar package (if <em>need_tar_bz2</em> is true).
33
34
  #
34
- # [<b>"<em>package_dir</em>/<em>name</em>-<em>version</em>.zip"</b>]
35
+ # <tt>"<em>package_dir</em>/<em>name</em>-<em>version</em>.zip"</tt> ::
35
36
  # Create a zip package archive (if <em>need_zip</em> is true).
36
37
  #
37
38
  # Example:
@@ -51,15 +52,21 @@ module Rake
51
52
  # Directory used to store the package files (default is 'pkg').
52
53
  attr_accessor :package_dir
53
54
 
54
- # True if a gzipped tar file (tgz) should be produced (default is false).
55
+ # True if a gzipped tar file (tgz) should be produced (default is
56
+ # false).
55
57
  attr_accessor :need_tar
56
58
 
57
- # True if a gzipped tar file (tar.gz) should be produced (default is false).
59
+ # True if a gzipped tar file (tar.gz) should be produced (default
60
+ # is false).
58
61
  attr_accessor :need_tar_gz
59
62
 
60
- # True if a bzip2'd tar file (tar.bz2) should be produced (default is false).
63
+ # True if a bzip2'd tar file (tar.bz2) should be produced (default
64
+ # is false).
61
65
  attr_accessor :need_tar_bz2
62
66
 
67
+ # True if a xz'd tar file (tar.xz) should be produced (default is false)
68
+ attr_accessor :need_tar_xz
69
+
63
70
  # True if a zip file should be produced (default is false)
64
71
  attr_accessor :need_zip
65
72
 
@@ -72,6 +79,9 @@ module Rake
72
79
  # Zip command for zipped archives. The default is 'zip'.
73
80
  attr_accessor :zip_command
74
81
 
82
+ # True if parent directory should be omited (default is false)
83
+ attr_accessor :without_parent_dir
84
+
75
85
  # Create a Package Task with the given name and version. Use +:noversion+
76
86
  # as the version to build a package without a version or to provide a
77
87
  # fully-versioned package name.
@@ -87,13 +97,15 @@ module Rake
87
97
  @name = name
88
98
  @version = version
89
99
  @package_files = Rake::FileList.new
90
- @package_dir = 'pkg'
100
+ @package_dir = "pkg"
91
101
  @need_tar = false
92
102
  @need_tar_gz = false
93
103
  @need_tar_bz2 = false
104
+ @need_tar_xz = false
94
105
  @need_zip = false
95
- @tar_command = 'tar'
96
- @zip_command = 'zip'
106
+ @tar_command = "tar"
107
+ @zip_command = "zip"
108
+ @without_parent_dir = false
97
109
  end
98
110
 
99
111
  # Create the tasks defined by this task library.
@@ -105,47 +117,45 @@ module Rake
105
117
  task :package
106
118
 
107
119
  desc "Force a rebuild of the package files"
108
- task :repackage => [:clobber_package, :package]
120
+ task repackage: [:clobber_package, :package]
109
121
 
110
122
  desc "Remove package products"
111
123
  task :clobber_package do
112
124
  rm_r package_dir rescue nil
113
125
  end
114
126
 
115
- task :clobber => [:clobber_package]
127
+ task clobber: [:clobber_package]
116
128
 
117
129
  [
118
130
  [need_tar, tgz_file, "z"],
119
131
  [need_tar_gz, tar_gz_file, "z"],
120
- [need_tar_bz2, tar_bz2_file, "j"]
121
- ].each do |(need, file, flag)|
132
+ [need_tar_bz2, tar_bz2_file, "j"],
133
+ [need_tar_xz, tar_xz_file, "J"]
134
+ ].each do |need, file, flag|
122
135
  if need
123
- task :package => ["#{package_dir}/#{file}"]
124
- file "#{package_dir}/#{file}" => [package_dir_path] + package_files do
125
- chdir(package_dir) do
126
- sh %{#{@tar_command} #{flag}cvf #{file} #{package_name}}
127
- end
136
+ task package: ["#{package_dir}/#{file}"]
137
+ file "#{package_dir}/#{file}" =>
138
+ [package_dir_path] + package_files do
139
+ chdir(working_dir) { sh @tar_command, "#{flag}cvf", file, target_dir }
140
+ mv "#{package_dir_path}/#{target_dir}", package_dir if without_parent_dir
128
141
  end
129
142
  end
130
143
  end
131
144
 
132
145
  if need_zip
133
- task :package => ["#{package_dir}/#{zip_file}"]
134
- file "#{package_dir}/#{zip_file}" => [package_dir_path] + package_files do
135
- chdir(package_dir) do
136
- sh %{#{@zip_command} -r #{zip_file} #{package_name}}
137
- end
146
+ task package: ["#{package_dir}/#{zip_file}"]
147
+ file "#{package_dir}/#{zip_file}" =>
148
+ [package_dir_path] + package_files do
149
+ chdir(working_dir) { sh @zip_command, "-r", zip_file, target_dir }
150
+ mv "#{package_dir_path}/#{zip_file}", package_dir if without_parent_dir
138
151
  end
139
152
  end
140
153
 
141
- directory package_dir
142
-
143
- file package_dir_path => @package_files do
144
- mkdir_p package_dir rescue nil
154
+ directory package_dir_path => @package_files do
145
155
  @package_files.each do |fn|
146
156
  f = File.join(package_dir_path, fn)
147
157
  fdir = File.dirname(f)
148
- mkdir_p(fdir) if !File.exist?(fdir)
158
+ mkdir_p(fdir) unless File.exist?(fdir)
149
159
  if File.directory?(fn)
150
160
  mkdir_p(f)
151
161
  else
@@ -157,29 +167,56 @@ module Rake
157
167
  self
158
168
  end
159
169
 
170
+ # The name of this package
171
+
160
172
  def package_name
161
173
  @version ? "#{@name}-#{@version}" : @name
162
174
  end
163
175
 
176
+ # The directory this package will be built in
177
+
164
178
  def package_dir_path
165
179
  "#{package_dir}/#{package_name}"
166
180
  end
167
181
 
182
+ # The package name with .tgz added
183
+
168
184
  def tgz_file
169
185
  "#{package_name}.tgz"
170
186
  end
171
187
 
188
+ # The package name with .tar.gz added
189
+
172
190
  def tar_gz_file
173
191
  "#{package_name}.tar.gz"
174
192
  end
175
193
 
194
+ # The package name with .tar.bz2 added
195
+
176
196
  def tar_bz2_file
177
197
  "#{package_name}.tar.bz2"
178
198
  end
179
199
 
200
+ # The package name with .tar.xz added
201
+
202
+ def tar_xz_file
203
+ "#{package_name}.tar.xz"
204
+ end
205
+
206
+ # The package name with .zip added
207
+
180
208
  def zip_file
181
209
  "#{package_name}.zip"
182
210
  end
211
+
212
+ def working_dir
213
+ without_parent_dir ? package_dir_path : package_dir
214
+ end
215
+
216
+ # target directory relative to working_dir
217
+ def target_dir
218
+ without_parent_dir ? "." : package_name
219
+ end
183
220
  end
184
221
 
185
222
  end
data/lib/rake/phony.rb ADDED
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+ # Defines a :phony task that you can use as a dependency. This allows
3
+ # file-based tasks to use non-file-based tasks as prerequisites
4
+ # without forcing them to rebuild.
5
+ #
6
+ # See FileTask#out_of_date? and Task#timestamp for more info.
7
+
8
+ require "rake"
9
+
10
+ task :phony
11
+
12
+ Rake::Task[:phony].tap do |task|
13
+ def task.timestamp # :nodoc:
14
+ Time.at 0
15
+ end
16
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+ module Rake
3
+
4
+ # Include PrivateReader to use +private_reader+.
5
+ module PrivateReader # :nodoc: all
6
+
7
+ def self.included(base)
8
+ base.extend(ClassMethods)
9
+ end
10
+
11
+ module ClassMethods
12
+
13
+ # Declare a list of private accessors
14
+ def private_reader(*names)
15
+ attr_reader(*names)
16
+ private(*names)
17
+ end
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,100 @@
1
+ # frozen_string_literal: true
2
+ module Rake
3
+
4
+ # A Promise object represents a promise to do work (a chore) in the
5
+ # future. The promise is created with a block and a list of
6
+ # arguments for the block. Calling value will return the value of
7
+ # the promised chore.
8
+ #
9
+ # Used by ThreadPool.
10
+ #
11
+ class Promise # :nodoc: all
12
+ NOT_SET = Object.new.freeze # :nodoc:
13
+
14
+ attr_accessor :recorder
15
+
16
+ # Create a promise to do the chore specified by the block.
17
+ def initialize(args, &block)
18
+ @mutex = Mutex.new
19
+ @result = NOT_SET
20
+ @error = NOT_SET
21
+ @args = args
22
+ @block = block
23
+ end
24
+
25
+ # Return the value of this promise.
26
+ #
27
+ # If the promised chore is not yet complete, then do the work
28
+ # synchronously. We will wait.
29
+ def value
30
+ unless complete?
31
+ stat :sleeping_on, item_id: object_id
32
+ @mutex.synchronize do
33
+ stat :has_lock_on, item_id: object_id
34
+ chore
35
+ stat :releasing_lock_on, item_id: object_id
36
+ end
37
+ end
38
+ error? ? raise(@error) : @result
39
+ end
40
+
41
+ # If no one else is working this promise, go ahead and do the chore.
42
+ def work
43
+ stat :attempting_lock_on, item_id: object_id
44
+ if @mutex.try_lock
45
+ stat :has_lock_on, item_id: object_id
46
+ chore
47
+ stat :releasing_lock_on, item_id: object_id
48
+ @mutex.unlock
49
+ else
50
+ stat :bailed_on, item_id: object_id
51
+ end
52
+ end
53
+
54
+ private
55
+
56
+ # Perform the chore promised
57
+ def chore
58
+ if complete?
59
+ stat :found_completed, item_id: object_id
60
+ return
61
+ end
62
+ stat :will_execute, item_id: object_id
63
+ begin
64
+ @result = @block.call(*@args)
65
+ rescue Exception => e
66
+ @error = e
67
+ end
68
+ stat :did_execute, item_id: object_id
69
+ discard
70
+ end
71
+
72
+ # Do we have a result for the promise
73
+ def result?
74
+ !@result.equal?(NOT_SET)
75
+ end
76
+
77
+ # Did the promise throw an error
78
+ def error?
79
+ !@error.equal?(NOT_SET)
80
+ end
81
+
82
+ # Are we done with the promise
83
+ def complete?
84
+ result? || error?
85
+ end
86
+
87
+ # free up these items for the GC
88
+ def discard
89
+ @args = nil
90
+ @block = nil
91
+ end
92
+
93
+ # Record execution statistics if there is a recorder
94
+ def stat(*args)
95
+ @recorder.call(*args) if @recorder
96
+ end
97
+
98
+ end
99
+
100
+ end
@@ -1,21 +1,27 @@
1
+ # frozen_string_literal: true
1
2
  module Rake
2
3
 
3
- ####################################################################
4
+ ##
4
5
  # Exit status class for times the system just gives us a nil.
5
- class PseudoStatus
6
+ class PseudoStatus # :nodoc: all
6
7
  attr_reader :exitstatus
8
+
7
9
  def initialize(code=0)
8
10
  @exitstatus = code
9
11
  end
12
+
10
13
  def to_i
11
14
  @exitstatus << 8
12
15
  end
16
+
13
17
  def >>(n)
14
18
  to_i >> n
15
19
  end
20
+
16
21
  def stopped?
17
22
  false
18
23
  end
24
+
19
25
  def exited?
20
26
  true
21
27
  end
@@ -1,9 +1,8 @@
1
- require 'rake/application'
1
+ # frozen_string_literal: true
2
+ require "rake/application"
2
3
 
3
4
  module Rake
4
5
 
5
- # Rake module singleton methods.
6
- #
7
6
  class << self
8
7
  # Current Rake Application
9
8
  def application
@@ -15,6 +14,11 @@ module Rake
15
14
  @application = app
16
15
  end
17
16
 
17
+ def suggested_thread_count # :nodoc:
18
+ @cpu_count ||= Rake::CpuCounter.count
19
+ @cpu_count + 4
20
+ end
21
+
18
22
  # Return the original directory where the Rake application was started.
19
23
  def original_dir
20
24
  application.original_dir
@@ -24,6 +28,40 @@ module Rake
24
28
  def load_rakefile(path)
25
29
  load(path)
26
30
  end
31
+
32
+ # Add files to the rakelib list
33
+ def add_rakelib(*files)
34
+ application.options.rakelib ||= []
35
+ application.options.rakelib.concat(files)
36
+ end
37
+
38
+ # Make +block_application+ the default rake application inside a block so
39
+ # you can load rakefiles into a different application.
40
+ #
41
+ # This is useful when you want to run rake tasks inside a library without
42
+ # running rake in a sub-shell.
43
+ #
44
+ # Example:
45
+ #
46
+ # Dir.chdir 'other/directory'
47
+ #
48
+ # other_rake = Rake.with_application do |rake|
49
+ # rake.load_rakefile
50
+ # end
51
+ #
52
+ # puts other_rake.tasks
53
+
54
+ def with_application(block_application = Rake::Application.new)
55
+ orig_application = Rake.application
56
+
57
+ Rake.application = block_application
58
+
59
+ yield block_application
60
+
61
+ block_application
62
+ ensure
63
+ Rake.application = orig_application
64
+ end
27
65
  end
28
66
 
29
67
  end
@@ -1,4 +1,6 @@
1
- require 'rake'
1
+ # frozen_string_literal: true
2
+
3
+ require "rake/file_list"
2
4
 
3
5
  # Load the test files from the command line.
4
6
  argv = ARGV.select do |argument|
@@ -6,17 +8,20 @@ argv = ARGV.select do |argument|
6
8
  when /^-/ then
7
9
  argument
8
10
  when /\*/ then
9
- FileList[argument].to_a.each do |file|
11
+ Rake::FileList[argument].to_a.each do |file|
10
12
  require File.expand_path file
11
13
  end
12
14
 
13
15
  false
14
16
  else
15
- require File.expand_path argument
17
+ path = File.expand_path argument
18
+
19
+ abort "\nFile does not exist: #{path}\n\n" unless File.exist?(path)
20
+
21
+ require path
16
22
 
17
23
  false
18
24
  end
19
25
  end
20
26
 
21
27
  ARGV.replace argv
22
-
@@ -1,4 +1,4 @@
1
-
1
+ # frozen_string_literal: true
2
2
  module Rake
3
3
 
4
4
  # Error indicating a recursion overflow error in task selection.
@@ -13,7 +13,7 @@ module Rake
13
13
  end
14
14
 
15
15
  def message
16
- super + ": [" + @targets.reverse.join(' => ') + "]"
16
+ super + ": [" + @targets.reverse.join(" => ") + "]"
17
17
  end
18
18
  end
19
19
 
data/lib/rake/scope.rb ADDED
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+ module Rake
3
+ class Scope < LinkedList # :nodoc: all
4
+
5
+ # Path for the scope.
6
+ def path
7
+ map(&:to_s).reverse.join(":")
8
+ end
9
+
10
+ # Path for the scope + the named path.
11
+ def path_with_task_name(task_name)
12
+ "#{path}:#{task_name}"
13
+ end
14
+
15
+ # Trim +n+ innermost scope levels from the scope. In no case will
16
+ # this trim beyond the toplevel scope.
17
+ def trim(n)
18
+ result = self
19
+ while n > 0 && !result.empty?
20
+ result = result.tail
21
+ n -= 1
22
+ end
23
+ result
24
+ end
25
+
26
+ # Scope lists always end with an EmptyScope object. See Null
27
+ # Object Pattern)
28
+ class EmptyScope < EmptyLinkedList
29
+ @parent = Scope
30
+
31
+ def path
32
+ ""
33
+ end
34
+
35
+ def path_with_task_name(task_name)
36
+ task_name
37
+ end
38
+ end
39
+
40
+ # Singleton null object for an empty scope.
41
+ EMPTY = EmptyScope.new
42
+ end
43
+ end