rake 10.4.2 → 13.0.3
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.
- checksums.yaml +5 -5
- data/CONTRIBUTING.rdoc +16 -7
- data/Gemfile +10 -0
- data/History.rdoc +2022 -287
- data/README.rdoc +40 -25
- data/Rakefile +25 -65
- data/bin/bundle +105 -0
- data/bin/console +7 -0
- data/bin/rake +20 -24
- data/bin/rdoc +29 -0
- data/bin/rubocop +29 -0
- data/bin/setup +6 -0
- data/doc/glossary.rdoc +10 -11
- data/doc/jamis.rb +1 -0
- data/doc/rake.1 +139 -124
- data/doc/rakefile.rdoc +2 -33
- data/exe/rake +27 -0
- data/lib/rake.rb +35 -43
- data/lib/rake/application.rb +125 -91
- data/lib/rake/backtrace.rb +3 -2
- data/lib/rake/clean.rb +8 -6
- data/lib/rake/cloneable.rb +1 -0
- data/lib/rake/cpu_counter.rb +10 -28
- data/lib/rake/default_loader.rb +1 -0
- data/lib/rake/dsl_definition.rb +6 -12
- data/lib/rake/early_time.rb +1 -0
- data/lib/rake/ext/core.rb +1 -0
- data/lib/rake/ext/string.rb +24 -21
- data/lib/rake/file_creation_task.rb +4 -3
- data/lib/rake/file_list.rb +35 -28
- data/lib/rake/file_task.rb +12 -4
- data/lib/rake/file_utils.rb +38 -32
- data/lib/rake/file_utils_ext.rb +8 -18
- data/lib/rake/invocation_chain.rb +1 -0
- data/lib/rake/invocation_exception_mixin.rb +1 -0
- data/lib/rake/late_time.rb +2 -1
- data/lib/rake/linked_list.rb +24 -15
- data/lib/rake/loaders/makefile.rb +23 -9
- data/lib/rake/multi_task.rb +2 -1
- data/lib/rake/name_space.rb +1 -1
- data/lib/rake/packagetask.rb +40 -17
- data/lib/rake/phony.rb +2 -1
- data/lib/rake/private_reader.rb +1 -0
- data/lib/rake/promise.rb +13 -12
- data/lib/rake/pseudo_status.rb +1 -0
- data/lib/rake/rake_module.rb +30 -1
- data/lib/rake/rake_test_loader.rb +18 -13
- data/lib/rake/rule_recursion_overflow_error.rb +2 -2
- data/lib/rake/scope.rb +3 -2
- data/lib/rake/task.rb +82 -31
- data/lib/rake/task_argument_error.rb +1 -0
- data/lib/rake/task_arguments.rb +15 -4
- data/lib/rake/task_manager.rb +54 -33
- data/lib/rake/tasklib.rb +2 -14
- data/lib/rake/testtask.rb +40 -63
- data/lib/rake/thread_history_display.rb +4 -3
- data/lib/rake/thread_pool.rb +16 -17
- data/lib/rake/trace_output.rb +2 -1
- data/lib/rake/version.rb +4 -1
- data/lib/rake/win32.rb +10 -15
- data/rake.gemspec +43 -0
- metadata +33 -270
- data/.autotest +0 -7
- data/.gemtest +0 -0
- data/.rubocop.yml +0 -27
- data/.togglerc +0 -7
- data/Manifest.txt +0 -166
- data/doc/release_notes/rake-0.4.14.rdoc +0 -23
- data/doc/release_notes/rake-0.4.15.rdoc +0 -35
- data/doc/release_notes/rake-0.5.0.rdoc +0 -53
- data/doc/release_notes/rake-0.5.3.rdoc +0 -78
- data/doc/release_notes/rake-0.5.4.rdoc +0 -46
- data/doc/release_notes/rake-0.6.0.rdoc +0 -141
- data/doc/release_notes/rake-0.7.0.rdoc +0 -119
- data/doc/release_notes/rake-0.7.1.rdoc +0 -59
- data/doc/release_notes/rake-0.7.2.rdoc +0 -121
- data/doc/release_notes/rake-0.7.3.rdoc +0 -47
- data/doc/release_notes/rake-0.8.0.rdoc +0 -114
- data/doc/release_notes/rake-0.8.2.rdoc +0 -165
- data/doc/release_notes/rake-0.8.3.rdoc +0 -112
- data/doc/release_notes/rake-0.8.4.rdoc +0 -147
- data/doc/release_notes/rake-0.8.5.rdoc +0 -53
- data/doc/release_notes/rake-0.8.6.rdoc +0 -37
- data/doc/release_notes/rake-0.8.7.rdoc +0 -55
- data/doc/release_notes/rake-0.9.0.rdoc +0 -112
- data/doc/release_notes/rake-0.9.1.rdoc +0 -52
- data/doc/release_notes/rake-0.9.2.2.rdoc +0 -55
- data/doc/release_notes/rake-0.9.2.rdoc +0 -49
- data/doc/release_notes/rake-0.9.3.rdoc +0 -102
- data/doc/release_notes/rake-0.9.4.rdoc +0 -60
- data/doc/release_notes/rake-0.9.5.rdoc +0 -55
- data/doc/release_notes/rake-0.9.6.rdoc +0 -64
- data/doc/release_notes/rake-10.0.0.rdoc +0 -178
- data/doc/release_notes/rake-10.0.1.rdoc +0 -58
- data/doc/release_notes/rake-10.0.2.rdoc +0 -53
- data/doc/release_notes/rake-10.0.3.rdoc +0 -191
- data/doc/release_notes/rake-10.1.0.rdoc +0 -61
- data/lib/rake/alt_system.rb +0 -110
- data/lib/rake/contrib/.document +0 -1
- data/lib/rake/contrib/compositepublisher.rb +0 -21
- data/lib/rake/contrib/ftptools.rb +0 -137
- data/lib/rake/contrib/publisher.rb +0 -81
- data/lib/rake/contrib/rubyforgepublisher.rb +0 -18
- data/lib/rake/contrib/sshpublisher.rb +0 -61
- data/lib/rake/contrib/sys.rb +0 -4
- data/lib/rake/ext/module.rb +0 -2
- data/lib/rake/ext/pathname.rb +0 -25
- data/lib/rake/ext/time.rb +0 -16
- data/lib/rake/gempackagetask.rb +0 -4
- data/lib/rake/pathmap.rb +0 -3
- data/lib/rake/rdoctask.rb +0 -4
- data/lib/rake/ruby182_test_unit_fix.rb +0 -29
- data/lib/rake/runtest.rb +0 -27
- data/rakelib/publish.rake +0 -20
- data/rakelib/test_times.rake +0 -25
- data/test/file_creation.rb +0 -34
- data/test/helper.rb +0 -130
- data/test/support/rakefile_definitions.rb +0 -478
- data/test/support/ruby_runner.rb +0 -34
- data/test/test_private_reader.rb +0 -42
- data/test/test_rake.rb +0 -40
- data/test/test_rake_application.rb +0 -643
- data/test/test_rake_application_options.rb +0 -466
- data/test/test_rake_backtrace.rb +0 -119
- data/test/test_rake_clean.rb +0 -61
- data/test/test_rake_cpu_counter.rb +0 -68
- data/test/test_rake_definitions.rb +0 -84
- data/test/test_rake_directory_task.rb +0 -76
- data/test/test_rake_dsl.rb +0 -40
- data/test/test_rake_early_time.rb +0 -31
- data/test/test_rake_extension.rb +0 -59
- data/test/test_rake_file_creation_task.rb +0 -56
- data/test/test_rake_file_list.rb +0 -655
- data/test/test_rake_file_list_path_map.rb +0 -8
- data/test/test_rake_file_task.rb +0 -197
- data/test/test_rake_file_utils.rb +0 -309
- data/test/test_rake_ftp_file.rb +0 -74
- data/test/test_rake_functional.rb +0 -482
- data/test/test_rake_invocation_chain.rb +0 -64
- data/test/test_rake_late_time.rb +0 -18
- data/test/test_rake_linked_list.rb +0 -84
- data/test/test_rake_makefile_loader.rb +0 -46
- data/test/test_rake_multi_task.rb +0 -64
- data/test/test_rake_name_space.rb +0 -57
- data/test/test_rake_package_task.rb +0 -79
- data/test/test_rake_path_map.rb +0 -168
- data/test/test_rake_path_map_explode.rb +0 -34
- data/test/test_rake_path_map_partial.rb +0 -18
- data/test/test_rake_pathname_extensions.rb +0 -15
- data/test/test_rake_pseudo_status.rb +0 -21
- data/test/test_rake_rake_test_loader.rb +0 -20
- data/test/test_rake_reduce_compat.rb +0 -26
- data/test/test_rake_require.rb +0 -40
- data/test/test_rake_rules.rb +0 -388
- data/test/test_rake_scope.rb +0 -44
- data/test/test_rake_task.rb +0 -393
- data/test/test_rake_task_argument_parsing.rb +0 -119
- data/test/test_rake_task_arguments.rb +0 -127
- data/test/test_rake_task_lib.rb +0 -9
- data/test/test_rake_task_manager.rb +0 -178
- data/test/test_rake_task_manager_argument_resolution.rb +0 -19
- data/test/test_rake_task_with_arguments.rb +0 -172
- data/test/test_rake_test_task.rb +0 -146
- data/test/test_rake_thread_pool.rb +0 -145
- data/test/test_rake_top_level_functions.rb +0 -71
- data/test/test_rake_win32.rb +0 -72
- data/test/test_thread_history_display.rb +0 -101
- data/test/test_trace_output.rb +0 -52
data/lib/rake/file_task.rb
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
require
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "rake/task"
|
|
3
|
+
require "rake/early_time"
|
|
3
4
|
|
|
4
5
|
module Rake
|
|
5
6
|
|
|
@@ -13,7 +14,7 @@ module Rake
|
|
|
13
14
|
# Is this file task needed? Yes if it doesn't exist, or if its time stamp
|
|
14
15
|
# is out of date.
|
|
15
16
|
def needed?
|
|
16
|
-
!
|
|
17
|
+
!File.exist?(name) || out_of_date?(timestamp) || @application.options.build_all
|
|
17
18
|
end
|
|
18
19
|
|
|
19
20
|
# Time stamp for file task.
|
|
@@ -29,7 +30,14 @@ module Rake
|
|
|
29
30
|
|
|
30
31
|
# Are there any prerequisites with a later time than the given time stamp?
|
|
31
32
|
def out_of_date?(stamp)
|
|
32
|
-
|
|
33
|
+
all_prerequisite_tasks.any? { |prereq|
|
|
34
|
+
prereq_task = application[prereq, @scope]
|
|
35
|
+
if prereq_task.instance_of?(Rake::FileTask)
|
|
36
|
+
prereq_task.timestamp > stamp || @application.options.build_all
|
|
37
|
+
else
|
|
38
|
+
prereq_task.timestamp > stamp
|
|
39
|
+
end
|
|
40
|
+
}
|
|
33
41
|
end
|
|
34
42
|
|
|
35
43
|
# ----------------------------------------------------------------
|
data/lib/rake/file_utils.rb
CHANGED
|
@@ -1,19 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
require
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "rbconfig"
|
|
3
|
+
require "fileutils"
|
|
3
4
|
|
|
4
5
|
#--
|
|
5
6
|
# This a FileUtils extension that defines several additional commands to be
|
|
6
7
|
# added to the FileUtils utility functions.
|
|
7
8
|
module FileUtils
|
|
8
9
|
# Path to the currently running Ruby program
|
|
9
|
-
RUBY = ENV[
|
|
10
|
-
RbConfig::CONFIG[
|
|
11
|
-
RbConfig::CONFIG[
|
|
10
|
+
RUBY = ENV["RUBY"] || File.join(
|
|
11
|
+
RbConfig::CONFIG["bindir"],
|
|
12
|
+
RbConfig::CONFIG["ruby_install_name"] + RbConfig::CONFIG["EXEEXT"]).
|
|
12
13
|
sub(/.*\s.*/m, '"\&"')
|
|
13
14
|
|
|
14
|
-
OPT_TABLE['sh'] = %w(noop verbose)
|
|
15
|
-
OPT_TABLE['ruby'] = %w(noop verbose)
|
|
16
|
-
|
|
17
15
|
# Run the system command +cmd+. If multiple arguments are given the command
|
|
18
16
|
# is run directly (without the shell, same semantics as Kernel::exec and
|
|
19
17
|
# Kernel::system).
|
|
@@ -37,7 +35,7 @@ module FileUtils
|
|
|
37
35
|
#
|
|
38
36
|
# # check exit status after command runs
|
|
39
37
|
# sh %{grep pattern file} do |ok, res|
|
|
40
|
-
# if !
|
|
38
|
+
# if !ok
|
|
41
39
|
# puts "pattern not found (status = #{res.exitstatus})"
|
|
42
40
|
# end
|
|
43
41
|
# end
|
|
@@ -45,13 +43,15 @@ module FileUtils
|
|
|
45
43
|
def sh(*cmd, &block)
|
|
46
44
|
options = (Hash === cmd.last) ? cmd.pop : {}
|
|
47
45
|
shell_runner = block_given? ? block : create_shell_runner(cmd)
|
|
46
|
+
|
|
48
47
|
set_verbose_option(options)
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
48
|
+
verbose = options.delete :verbose
|
|
49
|
+
noop = options.delete(:noop) || Rake::FileUtilsExt.nowrite_flag
|
|
50
|
+
|
|
51
|
+
Rake.rake_output_message sh_show_command cmd if verbose
|
|
52
52
|
|
|
53
|
-
unless
|
|
54
|
-
res =
|
|
53
|
+
unless noop
|
|
54
|
+
res = (Hash === cmd.last) ? system(*cmd) : system(*cmd, options)
|
|
55
55
|
status = $?
|
|
56
56
|
status = Rake::PseudoStatus.new(1) if !res && status.nil?
|
|
57
57
|
shell_runner.call(res, status)
|
|
@@ -59,8 +59,9 @@ module FileUtils
|
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
def create_shell_runner(cmd) # :nodoc:
|
|
62
|
-
show_command = cmd
|
|
62
|
+
show_command = sh_show_command cmd
|
|
63
63
|
show_command = show_command[0, 42] + "..." unless $trace
|
|
64
|
+
|
|
64
65
|
lambda do |ok, status|
|
|
65
66
|
ok or
|
|
66
67
|
fail "Command failed with status (#{status.exitstatus}): " +
|
|
@@ -69,6 +70,19 @@ module FileUtils
|
|
|
69
70
|
end
|
|
70
71
|
private :create_shell_runner
|
|
71
72
|
|
|
73
|
+
def sh_show_command(cmd) # :nodoc:
|
|
74
|
+
cmd = cmd.dup
|
|
75
|
+
|
|
76
|
+
if Hash === cmd.first
|
|
77
|
+
env = cmd.first
|
|
78
|
+
env = env.map { |name, value| "#{name}=#{value}" }.join " "
|
|
79
|
+
cmd[0] = env
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
cmd.join " "
|
|
83
|
+
end
|
|
84
|
+
private :sh_show_command
|
|
85
|
+
|
|
72
86
|
def set_verbose_option(options) # :nodoc:
|
|
73
87
|
unless options.key? :verbose
|
|
74
88
|
options[:verbose] =
|
|
@@ -78,22 +92,16 @@ module FileUtils
|
|
|
78
92
|
end
|
|
79
93
|
private :set_verbose_option
|
|
80
94
|
|
|
81
|
-
def rake_system(*cmd) # :nodoc:
|
|
82
|
-
Rake::AltSystem.system(*cmd)
|
|
83
|
-
end
|
|
84
|
-
private :rake_system
|
|
85
|
-
|
|
86
95
|
# Run a Ruby interpreter with the given arguments.
|
|
87
96
|
#
|
|
88
97
|
# Example:
|
|
89
98
|
# ruby %{-pe '$_.upcase!' <README}
|
|
90
99
|
#
|
|
91
|
-
def ruby(*args, &block)
|
|
92
|
-
options = (Hash === args.last) ? args.pop : {}
|
|
100
|
+
def ruby(*args, **options, &block)
|
|
93
101
|
if args.length > 1
|
|
94
|
-
sh(
|
|
102
|
+
sh(RUBY, *args, **options, &block)
|
|
95
103
|
else
|
|
96
|
-
sh("#{RUBY} #{args.first}", options, &block)
|
|
104
|
+
sh("#{RUBY} #{args.first}", **options, &block)
|
|
97
105
|
end
|
|
98
106
|
end
|
|
99
107
|
|
|
@@ -101,17 +109,15 @@ module FileUtils
|
|
|
101
109
|
|
|
102
110
|
# Attempt to do a normal file link, but fall back to a copy if the link
|
|
103
111
|
# fails.
|
|
104
|
-
def safe_ln(*args)
|
|
105
|
-
if
|
|
106
|
-
cp(*args)
|
|
107
|
-
else
|
|
112
|
+
def safe_ln(*args, **options)
|
|
113
|
+
if LN_SUPPORTED[0]
|
|
108
114
|
begin
|
|
109
|
-
ln(*args)
|
|
115
|
+
return options.empty? ? ln(*args) : ln(*args, **options)
|
|
110
116
|
rescue StandardError, NotImplementedError
|
|
111
117
|
LN_SUPPORTED[0] = false
|
|
112
|
-
cp(*args)
|
|
113
118
|
end
|
|
114
119
|
end
|
|
120
|
+
options.empty? ? cp(*args) : cp(*args, **options)
|
|
115
121
|
end
|
|
116
122
|
|
|
117
123
|
# Split a file path into individual directory names.
|
|
@@ -121,8 +127,8 @@ module FileUtils
|
|
|
121
127
|
#
|
|
122
128
|
def split_all(path)
|
|
123
129
|
head, tail = File.split(path)
|
|
124
|
-
return [tail] if head ==
|
|
125
|
-
return [head, tail] if head ==
|
|
130
|
+
return [tail] if head == "." || tail == "/"
|
|
131
|
+
return [head, tail] if head == "/"
|
|
126
132
|
return split_all(head) + [tail]
|
|
127
133
|
end
|
|
128
134
|
end
|
data/lib/rake/file_utils_ext.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "rake/file_utils"
|
|
2
3
|
|
|
3
4
|
module Rake
|
|
4
5
|
#
|
|
@@ -22,19 +23,18 @@ module Rake
|
|
|
22
23
|
opts = FileUtils.options_of name
|
|
23
24
|
default_options = []
|
|
24
25
|
if opts.include?("verbose")
|
|
25
|
-
default_options <<
|
|
26
|
+
default_options << "verbose: FileUtilsExt.verbose_flag"
|
|
26
27
|
end
|
|
27
28
|
if opts.include?("noop")
|
|
28
|
-
default_options <<
|
|
29
|
+
default_options << "noop: FileUtilsExt.nowrite_flag"
|
|
29
30
|
end
|
|
30
31
|
|
|
31
32
|
next if default_options.empty?
|
|
32
33
|
module_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
|
33
|
-
def #{name}(
|
|
34
|
-
super(
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
), &block)
|
|
34
|
+
def #{name}(*args, **options, &block)
|
|
35
|
+
super(*args,
|
|
36
|
+
#{default_options.join(', ')},
|
|
37
|
+
**options, &block)
|
|
38
38
|
end
|
|
39
39
|
EOS
|
|
40
40
|
end
|
|
@@ -112,16 +112,6 @@ module Rake
|
|
|
112
112
|
end
|
|
113
113
|
end
|
|
114
114
|
|
|
115
|
-
# Merge the given options with the default values.
|
|
116
|
-
def rake_merge_option(args, defaults)
|
|
117
|
-
if Hash === args.last
|
|
118
|
-
defaults.update(args.last)
|
|
119
|
-
args.pop
|
|
120
|
-
end
|
|
121
|
-
args.push defaults
|
|
122
|
-
args
|
|
123
|
-
end
|
|
124
|
-
|
|
125
115
|
# Send the message to the default rake output (which is $stderr).
|
|
126
116
|
def rake_output_message(message)
|
|
127
117
|
$stderr.puts(message)
|
data/lib/rake/late_time.rb
CHANGED
data/lib/rake/linked_list.rb
CHANGED
|
@@ -1,17 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module Rake
|
|
2
3
|
|
|
3
4
|
# Polylithic linked list structure used to implement several data
|
|
4
5
|
# structures in Rake.
|
|
5
6
|
class LinkedList
|
|
6
7
|
include Enumerable
|
|
7
|
-
|
|
8
8
|
attr_reader :head, :tail
|
|
9
9
|
|
|
10
|
-
def initialize(head, tail=EMPTY)
|
|
11
|
-
@head = head
|
|
12
|
-
@tail = tail
|
|
13
|
-
end
|
|
14
|
-
|
|
15
10
|
# Polymorphically add a new element to the head of a list. The
|
|
16
11
|
# type of head node will be the same list type as the tail.
|
|
17
12
|
def conj(item)
|
|
@@ -19,6 +14,9 @@ module Rake
|
|
|
19
14
|
end
|
|
20
15
|
|
|
21
16
|
# Is the list empty?
|
|
17
|
+
# .make guards against a list being empty making any instantiated LinkedList
|
|
18
|
+
# object not empty by default
|
|
19
|
+
# You should consider overriding this method if you implement your own .make method
|
|
22
20
|
def empty?
|
|
23
21
|
false
|
|
24
22
|
end
|
|
@@ -26,7 +24,7 @@ module Rake
|
|
|
26
24
|
# Lists are structurally equivalent.
|
|
27
25
|
def ==(other)
|
|
28
26
|
current = self
|
|
29
|
-
while !
|
|
27
|
+
while !current.empty? && !other.empty?
|
|
30
28
|
return false if current.head != other.head
|
|
31
29
|
current = current.tail
|
|
32
30
|
other = other.tail
|
|
@@ -36,20 +34,20 @@ module Rake
|
|
|
36
34
|
|
|
37
35
|
# Convert to string: LL(item, item...)
|
|
38
36
|
def to_s
|
|
39
|
-
items = map
|
|
37
|
+
items = map(&:to_s).join(", ")
|
|
40
38
|
"LL(#{items})"
|
|
41
39
|
end
|
|
42
40
|
|
|
43
41
|
# Same as +to_s+, but with inspected items.
|
|
44
42
|
def inspect
|
|
45
|
-
items = map
|
|
43
|
+
items = map(&:inspect).join(", ")
|
|
46
44
|
"LL(#{items})"
|
|
47
45
|
end
|
|
48
46
|
|
|
49
47
|
# For each item in the list.
|
|
50
48
|
def each
|
|
51
49
|
current = self
|
|
52
|
-
while !
|
|
50
|
+
while !current.empty?
|
|
53
51
|
yield(current.head)
|
|
54
52
|
current = current.tail
|
|
55
53
|
end
|
|
@@ -59,11 +57,16 @@ module Rake
|
|
|
59
57
|
# Make a list out of the given arguments. This method is
|
|
60
58
|
# polymorphic
|
|
61
59
|
def self.make(*args)
|
|
62
|
-
|
|
63
|
-
args
|
|
64
|
-
|
|
60
|
+
# return an EmptyLinkedList if there are no arguments
|
|
61
|
+
return empty if !args || args.empty?
|
|
62
|
+
|
|
63
|
+
# build a LinkedList by starting at the tail and iterating
|
|
64
|
+
# through each argument
|
|
65
|
+
# inject takes an EmptyLinkedList to start
|
|
66
|
+
args.reverse.inject(empty) do |list, item|
|
|
67
|
+
list = cons(item, list)
|
|
68
|
+
list # return the newly created list for each item in the block
|
|
65
69
|
end
|
|
66
|
-
result
|
|
67
70
|
end
|
|
68
71
|
|
|
69
72
|
# Cons a new head onto the tail list.
|
|
@@ -76,6 +79,13 @@ module Rake
|
|
|
76
79
|
self::EMPTY
|
|
77
80
|
end
|
|
78
81
|
|
|
82
|
+
protected
|
|
83
|
+
|
|
84
|
+
def initialize(head, tail=EMPTY)
|
|
85
|
+
@head = head
|
|
86
|
+
@tail = tail
|
|
87
|
+
end
|
|
88
|
+
|
|
79
89
|
# Represent an empty list, using the Null Object Pattern.
|
|
80
90
|
#
|
|
81
91
|
# When inheriting from the LinkedList class, you should implement
|
|
@@ -99,5 +109,4 @@ module Rake
|
|
|
99
109
|
|
|
100
110
|
EMPTY = EmptyLinkedList.new
|
|
101
111
|
end
|
|
102
|
-
|
|
103
112
|
end
|
|
@@ -1,17 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module Rake
|
|
2
3
|
|
|
3
|
-
# Makefile loader to be used with the import file loader.
|
|
4
|
+
# Makefile loader to be used with the import file loader. Use this to
|
|
5
|
+
# import dependencies from make dependency tools:
|
|
6
|
+
#
|
|
7
|
+
# require 'rake/loaders/makefile'
|
|
8
|
+
#
|
|
9
|
+
# file ".depends.mf" => [SRC_LIST] do |t|
|
|
10
|
+
# sh "makedepend -f- -- #{CFLAGS} -- #{t.prerequisites} > #{t.name}"
|
|
11
|
+
# end
|
|
12
|
+
#
|
|
13
|
+
# import ".depends.mf"
|
|
14
|
+
#
|
|
15
|
+
# See {Importing Dependencies}[link:doc/rakefile_rdoc.html#label-Importing+Dependencies]
|
|
16
|
+
# for further details.
|
|
17
|
+
|
|
4
18
|
class MakefileLoader
|
|
5
19
|
include Rake::DSL
|
|
6
20
|
|
|
7
|
-
SPACE_MARK = "\0"
|
|
21
|
+
SPACE_MARK = "\0" # :nodoc:
|
|
8
22
|
|
|
9
23
|
# Load the makefile dependencies in +fn+.
|
|
10
|
-
def load(fn)
|
|
24
|
+
def load(fn) # :nodoc:
|
|
11
25
|
lines = File.read fn
|
|
12
26
|
lines.gsub!(/\\ /, SPACE_MARK)
|
|
13
27
|
lines.gsub!(/#[^\n]*\n/m, "")
|
|
14
|
-
lines.gsub!(/\\\n/,
|
|
28
|
+
lines.gsub!(/\\\n/, " ")
|
|
15
29
|
lines.each_line do |line|
|
|
16
30
|
process_line(line)
|
|
17
31
|
end
|
|
@@ -20,8 +34,8 @@ module Rake
|
|
|
20
34
|
private
|
|
21
35
|
|
|
22
36
|
# Process one logical line of makefile data.
|
|
23
|
-
def process_line(line)
|
|
24
|
-
file_tasks, args = line.split(
|
|
37
|
+
def process_line(line) # :nodoc:
|
|
38
|
+
file_tasks, args = line.split(":", 2)
|
|
25
39
|
return if args.nil?
|
|
26
40
|
dependents = args.split.map { |d| respace(d) }
|
|
27
41
|
file_tasks.scan(/\S+/) do |file_task|
|
|
@@ -30,11 +44,11 @@ module Rake
|
|
|
30
44
|
end
|
|
31
45
|
end
|
|
32
46
|
|
|
33
|
-
def respace(str)
|
|
34
|
-
str.tr SPACE_MARK,
|
|
47
|
+
def respace(str) # :nodoc:
|
|
48
|
+
str.tr SPACE_MARK, " "
|
|
35
49
|
end
|
|
36
50
|
end
|
|
37
51
|
|
|
38
52
|
# Install the handler
|
|
39
|
-
Rake.application.add_loader(
|
|
53
|
+
Rake.application.add_loader("mf", MakefileLoader.new)
|
|
40
54
|
end
|
data/lib/rake/multi_task.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module Rake
|
|
2
3
|
|
|
3
4
|
# Same as a regular task, but the immediate prerequisites are done in
|
|
@@ -5,9 +6,9 @@ module Rake
|
|
|
5
6
|
#
|
|
6
7
|
class MultiTask < Task
|
|
7
8
|
private
|
|
9
|
+
|
|
8
10
|
def invoke_prerequisites(task_args, invocation_chain) # :nodoc:
|
|
9
11
|
invoke_prerequisites_concurrently(task_args, invocation_chain)
|
|
10
12
|
end
|
|
11
13
|
end
|
|
12
|
-
|
|
13
14
|
end
|
data/lib/rake/name_space.rb
CHANGED
data/lib/rake/packagetask.rb
CHANGED
|
@@ -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
|
|
5
|
-
require
|
|
5
|
+
require "rake"
|
|
6
|
+
require "rake/tasklib"
|
|
6
7
|
|
|
7
8
|
module Rake
|
|
8
9
|
|
|
@@ -63,6 +64,9 @@ module Rake
|
|
|
63
64
|
# is false).
|
|
64
65
|
attr_accessor :need_tar_bz2
|
|
65
66
|
|
|
67
|
+
# True if a xz'd tar file (tar.xz) should be produced (default is false)
|
|
68
|
+
attr_accessor :need_tar_xz
|
|
69
|
+
|
|
66
70
|
# True if a zip file should be produced (default is false)
|
|
67
71
|
attr_accessor :need_zip
|
|
68
72
|
|
|
@@ -75,6 +79,9 @@ module Rake
|
|
|
75
79
|
# Zip command for zipped archives. The default is 'zip'.
|
|
76
80
|
attr_accessor :zip_command
|
|
77
81
|
|
|
82
|
+
# True if parent directory should be omited (default is false)
|
|
83
|
+
attr_accessor :without_parent_dir
|
|
84
|
+
|
|
78
85
|
# Create a Package Task with the given name and version. Use +:noversion+
|
|
79
86
|
# as the version to build a package without a version or to provide a
|
|
80
87
|
# fully-versioned package name.
|
|
@@ -90,13 +97,15 @@ module Rake
|
|
|
90
97
|
@name = name
|
|
91
98
|
@version = version
|
|
92
99
|
@package_files = Rake::FileList.new
|
|
93
|
-
@package_dir =
|
|
100
|
+
@package_dir = "pkg"
|
|
94
101
|
@need_tar = false
|
|
95
102
|
@need_tar_gz = false
|
|
96
103
|
@need_tar_bz2 = false
|
|
104
|
+
@need_tar_xz = false
|
|
97
105
|
@need_zip = false
|
|
98
|
-
@tar_command =
|
|
99
|
-
@zip_command =
|
|
106
|
+
@tar_command = "tar"
|
|
107
|
+
@zip_command = "zip"
|
|
108
|
+
@without_parent_dir = false
|
|
100
109
|
end
|
|
101
110
|
|
|
102
111
|
# Create the tasks defined by this task library.
|
|
@@ -108,38 +117,37 @@ module Rake
|
|
|
108
117
|
task :package
|
|
109
118
|
|
|
110
119
|
desc "Force a rebuild of the package files"
|
|
111
|
-
task :
|
|
120
|
+
task repackage: [:clobber_package, :package]
|
|
112
121
|
|
|
113
122
|
desc "Remove package products"
|
|
114
123
|
task :clobber_package do
|
|
115
124
|
rm_r package_dir rescue nil
|
|
116
125
|
end
|
|
117
126
|
|
|
118
|
-
task :
|
|
127
|
+
task clobber: [:clobber_package]
|
|
119
128
|
|
|
120
129
|
[
|
|
121
130
|
[need_tar, tgz_file, "z"],
|
|
122
131
|
[need_tar_gz, tar_gz_file, "z"],
|
|
123
|
-
[need_tar_bz2, tar_bz2_file, "j"]
|
|
124
|
-
|
|
132
|
+
[need_tar_bz2, tar_bz2_file, "j"],
|
|
133
|
+
[need_tar_xz, tar_xz_file, "J"]
|
|
134
|
+
].each do |need, file, flag|
|
|
125
135
|
if need
|
|
126
|
-
task :
|
|
136
|
+
task package: ["#{package_dir}/#{file}"]
|
|
127
137
|
file "#{package_dir}/#{file}" =>
|
|
128
138
|
[package_dir_path] + package_files do
|
|
129
|
-
chdir(
|
|
130
|
-
|
|
131
|
-
end
|
|
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
|
|
132
141
|
end
|
|
133
142
|
end
|
|
134
143
|
end
|
|
135
144
|
|
|
136
145
|
if need_zip
|
|
137
|
-
task :
|
|
146
|
+
task package: ["#{package_dir}/#{zip_file}"]
|
|
138
147
|
file "#{package_dir}/#{zip_file}" =>
|
|
139
148
|
[package_dir_path] + package_files do
|
|
140
|
-
chdir(
|
|
141
|
-
|
|
142
|
-
end
|
|
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
|
|
143
151
|
end
|
|
144
152
|
end
|
|
145
153
|
|
|
@@ -189,11 +197,26 @@ module Rake
|
|
|
189
197
|
"#{package_name}.tar.bz2"
|
|
190
198
|
end
|
|
191
199
|
|
|
200
|
+
# The package name with .tar.xz added
|
|
201
|
+
|
|
202
|
+
def tar_xz_file
|
|
203
|
+
"#{package_name}.tar.xz"
|
|
204
|
+
end
|
|
205
|
+
|
|
192
206
|
# The package name with .zip added
|
|
193
207
|
|
|
194
208
|
def zip_file
|
|
195
209
|
"#{package_name}.zip"
|
|
196
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
|
|
197
220
|
end
|
|
198
221
|
|
|
199
222
|
end
|