rake 0.8.7 → 0.9.0.beta.0
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.
- data/.gemtest +0 -0
- data/CHANGES +77 -9
- data/{README → README.rdoc} +14 -10
- data/Rakefile +113 -110
- data/TODO +1 -1
- data/doc/command_line_usage.rdoc +18 -6
- data/doc/glossary.rdoc +2 -2
- data/doc/jamis.rb +2 -2
- data/doc/proto_rake.rdoc +22 -22
- data/doc/rake.1.gz +0 -0
- data/doc/rakefile.rdoc +60 -28
- data/doc/rational.rdoc +6 -6
- data/doc/release_notes/rake-0.4.15.rdoc +1 -1
- data/doc/release_notes/rake-0.5.0.rdoc +1 -1
- data/doc/release_notes/rake-0.7.0.rdoc +1 -1
- data/doc/release_notes/rake-0.7.2.rdoc +3 -3
- data/doc/release_notes/rake-0.7.3.rdoc +2 -2
- data/doc/release_notes/rake-0.8.0.rdoc +1 -1
- data/doc/release_notes/rake-0.8.2.rdoc +3 -3
- data/doc/release_notes/rake-0.8.3.rdoc +2 -2
- data/doc/release_notes/rake-0.8.4.rdoc +1 -1
- data/doc/release_notes/rake-0.8.5.rdoc +1 -1
- data/doc/release_notes/rake-0.8.6.rdoc +1 -1
- data/doc/release_notes/rake-0.8.7.rdoc +1 -1
- data/install.rb +14 -12
- data/lib/rake.rb +28 -2470
- data/lib/rake/alt_system.rb +7 -6
- data/lib/rake/application.rb +585 -0
- data/lib/rake/classic_namespace.rb +1 -0
- data/lib/rake/clean.rb +14 -14
- data/lib/rake/cloneable.rb +25 -0
- data/lib/rake/contrib/compositepublisher.rb +2 -5
- data/lib/rake/contrib/ftptools.rb +5 -8
- data/lib/rake/contrib/publisher.rb +2 -8
- data/lib/rake/contrib/rubyforgepublisher.rb +2 -4
- data/lib/rake/contrib/sshpublisher.rb +4 -6
- data/lib/rake/contrib/sys.rb +7 -25
- data/lib/rake/default_loader.rb +10 -0
- data/lib/rake/dsl.rb +2 -0
- data/lib/rake/dsl_definition.rb +146 -0
- data/lib/rake/early_time.rb +18 -0
- data/lib/rake/environment.rb +40 -0
- data/lib/rake/ext/core.rb +27 -0
- data/lib/rake/ext/module.rb +39 -0
- data/lib/rake/ext/string.rb +167 -0
- data/lib/rake/ext/time.rb +14 -0
- data/lib/rake/file_creation_task.rb +24 -0
- data/lib/rake/file_list.rb +403 -0
- data/lib/rake/file_task.rb +47 -0
- data/lib/rake/file_utils.rb +112 -0
- data/lib/rake/file_utils_ext.rb +132 -0
- data/lib/rake/gempackagetask.rb +6 -90
- data/lib/rake/invocation_chain.rb +51 -0
- data/lib/rake/invocation_exception_mixin.rb +16 -0
- data/lib/rake/loaders/makefile.rb +13 -15
- data/lib/rake/multi_task.rb +16 -0
- data/lib/rake/name_space.rb +25 -0
- data/lib/rake/packagetask.rb +13 -12
- data/lib/rake/pathmap.rb +1 -0
- data/lib/rake/pseudo_status.rb +24 -0
- data/lib/rake/rake_module.rb +25 -0
- data/lib/rake/rake_test_loader.rb +10 -2
- data/lib/rake/rdoctask.rb +211 -190
- data/lib/rake/ruby182_test_unit_fix.rb +9 -7
- data/lib/rake/rule_recursion_overflow_error.rb +20 -0
- data/lib/rake/runtest.rb +4 -6
- data/lib/rake/task.rb +327 -0
- data/lib/rake/task_argument_error.rb +7 -0
- data/lib/rake/task_arguments.rb +74 -0
- data/lib/rake/task_manager.rb +329 -0
- data/lib/rake/tasklib.rb +1 -2
- data/lib/rake/testtask.rb +51 -26
- data/lib/rake/version.rb +12 -0
- data/lib/rake/win32.rb +4 -4
- data/test/contrib/test_sys.rb +7 -30
- data/test/data/comments/Rakefile +18 -0
- data/test/data/default/Rakefile +1 -1
- data/test/data/dryrun/Rakefile +1 -1
- data/test/data/file_creation_task/Rakefile +1 -1
- data/test/data/namespace/Rakefile +9 -0
- data/test/data/rakelib/test1.rb +4 -2
- data/test/data/verbose/Rakefile +34 -0
- data/test/functional/functional_test.rb +25 -0
- data/test/{session_functional.rb → functional/session_based_tests.rb} +134 -23
- data/test/in_environment.rb +6 -4
- data/test/{test_application.rb → lib/application_test.rb} +277 -136
- data/test/{test_clean.rb → lib/clean_test.rb} +1 -0
- data/test/{test_definitions.rb → lib/definitions_test.rb} +2 -2
- data/test/lib/dsl_test.rb +52 -0
- data/test/{test_earlytime.rb → lib/earlytime_test.rb} +1 -2
- data/test/lib/environment_test.rb +18 -0
- data/test/{test_extension.rb → lib/extension_test.rb} +2 -2
- data/test/{test_file_creation_task.rb → lib/file_creation_task_test.rb} +0 -0
- data/test/{test_file_task.rb → lib/file_task_test.rb} +3 -3
- data/test/{test_filelist.rb → lib/filelist_test.rb} +28 -24
- data/test/{test_fileutils.rb → lib/fileutils_test.rb} +26 -21
- data/test/{test_ftp.rb → lib/ftp_test.rb} +0 -0
- data/test/{test_invocation_chain.rb → lib/invocation_chain_test.rb} +0 -0
- data/test/{test_makefile_loader.rb → lib/makefile_loader_test.rb} +0 -0
- data/test/{test_multitask.rb → lib/multitask_test.rb} +14 -6
- data/test/{test_namespace.rb → lib/namespace_test.rb} +0 -0
- data/test/lib/package_task_test.rb +82 -0
- data/test/{test_pathmap.rb → lib/pathmap_test.rb} +3 -2
- data/test/{test_pseudo_status.rb → lib/pseudo_status_test.rb} +0 -0
- data/test/{test_rake.rb → lib/rake_test.rb} +1 -1
- data/test/{test_rdoc_task.rb → lib/rdoc_task_test.rb} +19 -23
- data/test/{test_require.rb → lib/require_test.rb} +8 -2
- data/test/{test_rules.rb → lib/rules_test.rb} +1 -2
- data/test/{test_task_arguments.rb → lib/task_arguments_test.rb} +5 -5
- data/test/{test_task_manager.rb → lib/task_manager_test.rb} +5 -5
- data/test/{test_tasks.rb → lib/task_test.rb} +69 -4
- data/test/{test_tasklib.rb → lib/tasklib_test.rb} +0 -0
- data/test/{test_test_task.rb → lib/test_task_test.rb} +3 -3
- data/test/lib/testtask_test.rb +49 -0
- data/test/{test_top_level_functions.rb → lib/top_level_functions_test.rb} +3 -3
- data/test/{test_win32.rb → lib/win32_test.rb} +19 -0
- data/test/rake_test_setup.rb +4 -9
- data/test/ruby_version_test.rb +3 -0
- data/test/test_helper.rb +12 -0
- metadata +100 -44
- data/test/functional.rb +0 -15
- data/test/test_package_task.rb +0 -118
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'rake/task.rb'
|
2
|
+
require 'rake/early_time'
|
3
|
+
|
4
|
+
module Rake
|
5
|
+
# #########################################################################
|
6
|
+
# A FileTask is a task that includes time based dependencies. If any of a
|
7
|
+
# FileTask's prerequisites have a timestamp that is later than the file
|
8
|
+
# represented by this task, then the file must be rebuilt (using the
|
9
|
+
# supplied actions).
|
10
|
+
#
|
11
|
+
class FileTask < Task
|
12
|
+
|
13
|
+
# Is this file task needed? Yes if it doesn't exist, or if its time stamp
|
14
|
+
# is out of date.
|
15
|
+
def needed?
|
16
|
+
! File.exist?(name) || out_of_date?(timestamp)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Time stamp for file task.
|
20
|
+
def timestamp
|
21
|
+
if File.exist?(name)
|
22
|
+
File.mtime(name.to_s)
|
23
|
+
else
|
24
|
+
Rake::EARLY
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
# Are there any prerequisites with a later time than the given time stamp?
|
31
|
+
def out_of_date?(stamp)
|
32
|
+
@prerequisites.any? { |n| application[n, @scope].timestamp > stamp}
|
33
|
+
end
|
34
|
+
|
35
|
+
# ----------------------------------------------------------------
|
36
|
+
# Task class methods.
|
37
|
+
#
|
38
|
+
class << self
|
39
|
+
# Apply the scope to the task name according to the rules for this kind
|
40
|
+
# of task. File based tasks ignore the scope when creating the name.
|
41
|
+
def scope_name(scope, task_name)
|
42
|
+
task_name
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
@@ -0,0 +1,112 @@
|
|
1
|
+
require 'rbconfig'
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
# ###########################################################################
|
5
|
+
# This a FileUtils extension that defines several additional commands to be
|
6
|
+
# added to the FileUtils utility functions.
|
7
|
+
#
|
8
|
+
module FileUtils
|
9
|
+
# Path to the currently running Ruby program
|
10
|
+
RUBY = File.join(
|
11
|
+
RbConfig::CONFIG['bindir'],
|
12
|
+
RbConfig::CONFIG['ruby_install_name'] + RbConfig::CONFIG['EXEEXT']).
|
13
|
+
sub(/.*\s.*/m, '"\&"')
|
14
|
+
|
15
|
+
OPT_TABLE['sh'] = %w(noop verbose)
|
16
|
+
OPT_TABLE['ruby'] = %w(noop verbose)
|
17
|
+
|
18
|
+
# Run the system command +cmd+. If multiple arguments are given the command
|
19
|
+
# is not run with the shell (same semantics as Kernel::exec and
|
20
|
+
# Kernel::system).
|
21
|
+
#
|
22
|
+
# Example:
|
23
|
+
# sh %{ls -ltr}
|
24
|
+
#
|
25
|
+
# sh 'ls', 'file with spaces'
|
26
|
+
#
|
27
|
+
# # check exit status after command runs
|
28
|
+
# sh %{grep pattern file} do |ok, res|
|
29
|
+
# if ! ok
|
30
|
+
# puts "pattern not found (status = #{res.exitstatus})"
|
31
|
+
# end
|
32
|
+
# end
|
33
|
+
#
|
34
|
+
def sh(*cmd, &block)
|
35
|
+
options = (Hash === cmd.last) ? cmd.pop : {}
|
36
|
+
shell_runner = block_given? ? block : create_shell_runner(cmd)
|
37
|
+
set_verbose_option(options)
|
38
|
+
options[:noop] ||= Rake::FileUtilsExt.nowrite_flag
|
39
|
+
Rake.rake_check_options options, :noop, :verbose
|
40
|
+
Rake.rake_output_message cmd.join(" ") if options[:verbose]
|
41
|
+
unless options[:noop]
|
42
|
+
res = rake_system(*cmd)
|
43
|
+
status = $?
|
44
|
+
status = PseudoStatus.new(1) if !res && status.nil?
|
45
|
+
shell_runner.call(res, status)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def create_shell_runner(cmd)
|
50
|
+
show_command = cmd.join(" ")
|
51
|
+
show_command = show_command[0,42] + "..." unless $trace
|
52
|
+
lambda { |ok, status|
|
53
|
+
ok or fail "Command failed with status (#{status.exitstatus}): [#{show_command}]"
|
54
|
+
}
|
55
|
+
end
|
56
|
+
private :create_shell_runner
|
57
|
+
|
58
|
+
def set_verbose_option(options)
|
59
|
+
if options[:verbose].nil?
|
60
|
+
options[:verbose] = Rake::FileUtilsExt.verbose_flag.nil? || Rake::FileUtilsExt.verbose_flag
|
61
|
+
end
|
62
|
+
end
|
63
|
+
private :set_verbose_option
|
64
|
+
|
65
|
+
def rake_system(*cmd)
|
66
|
+
Rake::AltSystem.system(*cmd)
|
67
|
+
end
|
68
|
+
private :rake_system
|
69
|
+
|
70
|
+
# Run a Ruby interpreter with the given arguments.
|
71
|
+
#
|
72
|
+
# Example:
|
73
|
+
# ruby %{-pe '$_.upcase!' <README}
|
74
|
+
#
|
75
|
+
def ruby(*args,&block)
|
76
|
+
options = (Hash === args.last) ? args.pop : {}
|
77
|
+
if args.length > 1 then
|
78
|
+
sh(*([RUBY] + args + [options]), &block)
|
79
|
+
else
|
80
|
+
sh("#{RUBY} #{args.first}", options, &block)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
LN_SUPPORTED = [true]
|
85
|
+
|
86
|
+
# Attempt to do a normal file link, but fall back to a copy if the link
|
87
|
+
# fails.
|
88
|
+
def safe_ln(*args)
|
89
|
+
unless LN_SUPPORTED[0]
|
90
|
+
cp(*args)
|
91
|
+
else
|
92
|
+
begin
|
93
|
+
ln(*args)
|
94
|
+
rescue StandardError, NotImplementedError
|
95
|
+
LN_SUPPORTED[0] = false
|
96
|
+
cp(*args)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
# Split a file path into individual directory names.
|
102
|
+
#
|
103
|
+
# Example:
|
104
|
+
# split_all("a/b/c") => ['a', 'b', 'c']
|
105
|
+
#
|
106
|
+
def split_all(path)
|
107
|
+
head, tail = File.split(path)
|
108
|
+
return [tail] if head == '.' || tail == '/'
|
109
|
+
return [head, tail] if head == '/'
|
110
|
+
return split_all(head) + [tail]
|
111
|
+
end
|
112
|
+
end
|
@@ -0,0 +1,132 @@
|
|
1
|
+
require 'rake/file_utils'
|
2
|
+
|
3
|
+
module Rake
|
4
|
+
# ###########################################################################
|
5
|
+
# FileUtilsExt provides a custom version of the FileUtils methods that
|
6
|
+
# respond to the <tt>verbose</tt> and <tt>nowrite</tt> commands.
|
7
|
+
#
|
8
|
+
module FileUtilsExt
|
9
|
+
include FileUtils
|
10
|
+
|
11
|
+
class << self
|
12
|
+
attr_accessor :verbose_flag, :nowrite_flag
|
13
|
+
end
|
14
|
+
FileUtilsExt.verbose_flag = nil
|
15
|
+
FileUtilsExt.nowrite_flag = false
|
16
|
+
|
17
|
+
$fileutils_verbose = true
|
18
|
+
$fileutils_nowrite = false
|
19
|
+
|
20
|
+
FileUtils::OPT_TABLE.each do |name, opts|
|
21
|
+
default_options = []
|
22
|
+
if opts.include?(:verbose) || opts.include?("verbose")
|
23
|
+
default_options << ':verbose => FileUtilsExt.verbose_flag'
|
24
|
+
end
|
25
|
+
if opts.include?(:noop) || opts.include?("noop")
|
26
|
+
default_options << ':noop => FileUtilsExt.nowrite_flag'
|
27
|
+
end
|
28
|
+
|
29
|
+
next if default_options.empty?
|
30
|
+
module_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
31
|
+
def #{name}( *args, &block )
|
32
|
+
super(
|
33
|
+
*rake_merge_option(args,
|
34
|
+
#{default_options.join(', ')}
|
35
|
+
), &block)
|
36
|
+
end
|
37
|
+
EOS
|
38
|
+
end
|
39
|
+
|
40
|
+
# Get/set the verbose flag controlling output from the FileUtils utilities.
|
41
|
+
# If verbose is true, then the utility method is echoed to standard output.
|
42
|
+
#
|
43
|
+
# Examples:
|
44
|
+
# verbose # return the current value of the verbose flag
|
45
|
+
# verbose(v) # set the verbose flag to _v_.
|
46
|
+
# verbose(v) { code } # Execute code with the verbose flag set temporarily to _v_.
|
47
|
+
# # Return to the original value when code is done.
|
48
|
+
def verbose(value=nil)
|
49
|
+
oldvalue = FileUtilsExt.verbose_flag
|
50
|
+
FileUtilsExt.verbose_flag = value unless value.nil?
|
51
|
+
if block_given?
|
52
|
+
begin
|
53
|
+
yield
|
54
|
+
ensure
|
55
|
+
FileUtilsExt.verbose_flag = oldvalue
|
56
|
+
end
|
57
|
+
end
|
58
|
+
FileUtilsExt.verbose_flag
|
59
|
+
end
|
60
|
+
|
61
|
+
# Get/set the nowrite flag controlling output from the FileUtils utilities.
|
62
|
+
# If verbose is true, then the utility method is echoed to standard output.
|
63
|
+
#
|
64
|
+
# Examples:
|
65
|
+
# nowrite # return the current value of the nowrite flag
|
66
|
+
# nowrite(v) # set the nowrite flag to _v_.
|
67
|
+
# nowrite(v) { code } # Execute code with the nowrite flag set temporarily to _v_.
|
68
|
+
# # Return to the original value when code is done.
|
69
|
+
def nowrite(value=nil)
|
70
|
+
oldvalue = FileUtilsExt.nowrite_flag
|
71
|
+
FileUtilsExt.nowrite_flag = value unless value.nil?
|
72
|
+
if block_given?
|
73
|
+
begin
|
74
|
+
yield
|
75
|
+
ensure
|
76
|
+
FileUtilsExt.nowrite_flag = oldvalue
|
77
|
+
end
|
78
|
+
end
|
79
|
+
oldvalue
|
80
|
+
end
|
81
|
+
|
82
|
+
# Use this function to prevent potentially destructive ruby code from
|
83
|
+
# running when the :nowrite flag is set.
|
84
|
+
#
|
85
|
+
# Example:
|
86
|
+
#
|
87
|
+
# when_writing("Building Project") do
|
88
|
+
# project.build
|
89
|
+
# end
|
90
|
+
#
|
91
|
+
# The following code will build the project under normal conditions. If the
|
92
|
+
# nowrite(true) flag is set, then the example will print:
|
93
|
+
# DRYRUN: Building Project
|
94
|
+
# instead of actually building the project.
|
95
|
+
#
|
96
|
+
def when_writing(msg=nil)
|
97
|
+
if FileUtilsExt.nowrite_flag
|
98
|
+
$stderr.puts "DRYRUN: #{msg}" if msg
|
99
|
+
else
|
100
|
+
yield
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
# Merge the given options with the default values.
|
105
|
+
def rake_merge_option(args, defaults)
|
106
|
+
if Hash === args.last
|
107
|
+
defaults.update(args.last)
|
108
|
+
args.pop
|
109
|
+
end
|
110
|
+
args.push defaults
|
111
|
+
args
|
112
|
+
end
|
113
|
+
|
114
|
+
# Send the message to the default rake output (which is $stderr).
|
115
|
+
def rake_output_message(message)
|
116
|
+
$stderr.puts(message)
|
117
|
+
end
|
118
|
+
|
119
|
+
# Check that the options do not contain options not listed in +optdecl+. An
|
120
|
+
# ArgumentError exception is thrown if non-declared options are found.
|
121
|
+
def rake_check_options(options, *optdecl)
|
122
|
+
h = options.dup
|
123
|
+
optdecl.each do |name|
|
124
|
+
h.delete name
|
125
|
+
end
|
126
|
+
raise ArgumentError, "no such option: #{h.keys.join(' ')}" unless h.empty?
|
127
|
+
end
|
128
|
+
|
129
|
+
extend self
|
130
|
+
end
|
131
|
+
|
132
|
+
end
|
data/lib/rake/gempackagetask.rb
CHANGED
@@ -1,97 +1,13 @@
|
|
1
|
-
|
1
|
+
# rake/gempackagetask is deprecated in favor of rubygems/package_task
|
2
2
|
|
3
|
-
|
4
|
-
# packages.
|
3
|
+
warn 'rake/gempackagetask is deprecated. Use rubygems/package_task instead'
|
5
4
|
|
6
5
|
require 'rubygems'
|
6
|
+
require 'rubygems/package_task'
|
7
|
+
|
7
8
|
require 'rake'
|
8
|
-
require 'rake/packagetask'
|
9
|
-
require 'rubygems/user_interaction'
|
10
|
-
require 'rubygems/builder'
|
11
9
|
|
12
10
|
module Rake
|
13
|
-
|
14
|
-
# Create a package based upon a Gem spec. Gem packages, as well as
|
15
|
-
# zip files and tar/gzipped packages can be produced by this task.
|
16
|
-
#
|
17
|
-
# In addition to the Rake targets generated by PackageTask, a
|
18
|
-
# GemPackageTask will also generate the following tasks:
|
19
|
-
#
|
20
|
-
# [<b>"<em>package_dir</em>/<em>name</em>-<em>version</em>.gem"</b>]
|
21
|
-
# Create a Ruby GEM package with the given name and version.
|
22
|
-
#
|
23
|
-
# Example using a Ruby GEM spec:
|
24
|
-
#
|
25
|
-
# require 'rubygems'
|
26
|
-
#
|
27
|
-
# spec = Gem::Specification.new do |s|
|
28
|
-
# s.platform = Gem::Platform::RUBY
|
29
|
-
# s.summary = "Ruby based make-like utility."
|
30
|
-
# s.name = 'rake'
|
31
|
-
# s.version = PKG_VERSION
|
32
|
-
# s.requirements << 'none'
|
33
|
-
# s.require_path = 'lib'
|
34
|
-
# s.autorequire = 'rake'
|
35
|
-
# s.files = PKG_FILES
|
36
|
-
# s.description = <<EOF
|
37
|
-
# Rake is a Make-like program implemented in Ruby. Tasks
|
38
|
-
# and dependencies are specified in standard Ruby syntax.
|
39
|
-
# EOF
|
40
|
-
# end
|
41
|
-
#
|
42
|
-
# Rake::GemPackageTask.new(spec) do |pkg|
|
43
|
-
# pkg.need_zip = true
|
44
|
-
# pkg.need_tar = true
|
45
|
-
# end
|
46
|
-
#
|
47
|
-
class GemPackageTask < PackageTask
|
48
|
-
# Ruby GEM spec containing the metadata for this package. The
|
49
|
-
# name, version and package_files are automatically determined
|
50
|
-
# from the GEM spec and don't need to be explicitly provided.
|
51
|
-
attr_accessor :gem_spec
|
52
|
-
|
53
|
-
# Create a GEM Package task library. Automatically define the gem
|
54
|
-
# if a block is given. If no block is supplied, then +define+
|
55
|
-
# needs to be called to define the task.
|
56
|
-
def initialize(gem_spec)
|
57
|
-
init(gem_spec)
|
58
|
-
yield self if block_given?
|
59
|
-
define if block_given?
|
60
|
-
end
|
61
|
-
|
62
|
-
# Initialization tasks without the "yield self" or define
|
63
|
-
# operations.
|
64
|
-
def init(gem)
|
65
|
-
super(gem.name, gem.version)
|
66
|
-
@gem_spec = gem
|
67
|
-
@package_files += gem_spec.files if gem_spec.files
|
68
|
-
end
|
69
|
-
|
70
|
-
# Create the Rake tasks and actions specified by this
|
71
|
-
# GemPackageTask. (+define+ is automatically called if a block is
|
72
|
-
# given to +new+).
|
73
|
-
def define
|
74
|
-
super
|
75
|
-
task :package => [:gem]
|
76
|
-
desc "Build the gem file #{gem_file}"
|
77
|
-
task :gem => ["#{package_dir}/#{gem_file}"]
|
78
|
-
file "#{package_dir}/#{gem_file}" => [package_dir] + @gem_spec.files do
|
79
|
-
when_writing("Creating GEM") {
|
80
|
-
Gem::Builder.new(gem_spec).build
|
81
|
-
verbose(true) {
|
82
|
-
mv gem_file, "#{package_dir}/#{gem_file}"
|
83
|
-
}
|
84
|
-
}
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
def gem_file
|
89
|
-
if @gem_spec.platform == Gem::Platform::RUBY
|
90
|
-
"#{package_name}.gem"
|
91
|
-
else
|
92
|
-
"#{package_name}-#{@gem_spec.platform}.gem"
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
end
|
11
|
+
GemPackageTask = Gem::PackageTask
|
97
12
|
end
|
13
|
+
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Rake
|
2
|
+
|
3
|
+
####################################################################
|
4
|
+
# InvocationChain tracks the chain of task invocations to detect
|
5
|
+
# circular dependencies.
|
6
|
+
class InvocationChain
|
7
|
+
def initialize(value, tail)
|
8
|
+
@value = value
|
9
|
+
@tail = tail
|
10
|
+
end
|
11
|
+
|
12
|
+
def member?(obj)
|
13
|
+
@value == obj || @tail.member?(obj)
|
14
|
+
end
|
15
|
+
|
16
|
+
def append(value)
|
17
|
+
if member?(value)
|
18
|
+
fail RuntimeError, "Circular dependency detected: #{to_s} => #{value}"
|
19
|
+
end
|
20
|
+
self.class.new(value, self)
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_s
|
24
|
+
"#{prefix}#{@value}"
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.append(value, chain)
|
28
|
+
chain.append(value)
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def prefix
|
34
|
+
"#{@tail.to_s} => "
|
35
|
+
end
|
36
|
+
|
37
|
+
class EmptyInvocationChain
|
38
|
+
def member?(obj)
|
39
|
+
false
|
40
|
+
end
|
41
|
+
def append(value)
|
42
|
+
InvocationChain.new(value, self)
|
43
|
+
end
|
44
|
+
def to_s
|
45
|
+
"TOP"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
EMPTY = EmptyInvocationChain.new
|
50
|
+
end
|
51
|
+
end
|