rake 0.8.7 → 0.9.0

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 (124) hide show
  1. data/.gemtest +0 -0
  2. data/CHANGES +77 -9
  3. data/{README → README.rdoc} +14 -10
  4. data/Rakefile +129 -118
  5. data/TODO +1 -1
  6. data/doc/command_line_usage.rdoc +18 -6
  7. data/doc/glossary.rdoc +2 -2
  8. data/doc/jamis.rb +2 -2
  9. data/doc/proto_rake.rdoc +22 -22
  10. data/doc/rake.1.gz +0 -0
  11. data/doc/rakefile.rdoc +55 -32
  12. data/doc/rational.rdoc +6 -6
  13. data/doc/release_notes/rake-0.4.15.rdoc +1 -1
  14. data/doc/release_notes/rake-0.5.0.rdoc +1 -1
  15. data/doc/release_notes/rake-0.7.0.rdoc +1 -1
  16. data/doc/release_notes/rake-0.7.2.rdoc +3 -3
  17. data/doc/release_notes/rake-0.7.3.rdoc +2 -2
  18. data/doc/release_notes/rake-0.8.0.rdoc +1 -1
  19. data/doc/release_notes/rake-0.8.2.rdoc +3 -3
  20. data/doc/release_notes/rake-0.8.3.rdoc +2 -2
  21. data/doc/release_notes/rake-0.8.4.rdoc +1 -1
  22. data/doc/release_notes/rake-0.8.5.rdoc +1 -1
  23. data/doc/release_notes/rake-0.8.6.rdoc +1 -1
  24. data/doc/release_notes/rake-0.8.7.rdoc +1 -1
  25. data/doc/release_notes/rake-0.9.0.rdoc +112 -0
  26. data/install.rb +14 -12
  27. data/lib/rake/alt_system.rb +7 -6
  28. data/lib/rake/application.rb +589 -0
  29. data/lib/rake/classic_namespace.rb +1 -0
  30. data/lib/rake/clean.rb +2 -4
  31. data/lib/rake/cloneable.rb +25 -0
  32. data/lib/rake/contrib/compositepublisher.rb +2 -5
  33. data/lib/rake/contrib/ftptools.rb +5 -8
  34. data/lib/rake/contrib/publisher.rb +2 -8
  35. data/lib/rake/contrib/rubyforgepublisher.rb +2 -4
  36. data/lib/rake/contrib/sshpublisher.rb +4 -6
  37. data/lib/rake/contrib/sys.rb +7 -25
  38. data/lib/rake/default_loader.rb +10 -0
  39. data/lib/rake/dsl.rb +2 -0
  40. data/lib/rake/dsl_definition.rb +143 -0
  41. data/lib/rake/early_time.rb +18 -0
  42. data/lib/rake/ext/core.rb +27 -0
  43. data/lib/rake/ext/module.rb +39 -0
  44. data/lib/rake/ext/string.rb +167 -0
  45. data/lib/rake/ext/time.rb +14 -0
  46. data/lib/rake/file_creation_task.rb +24 -0
  47. data/lib/rake/file_list.rb +403 -0
  48. data/lib/rake/file_task.rb +47 -0
  49. data/lib/rake/file_utils.rb +112 -0
  50. data/lib/rake/file_utils_ext.rb +142 -0
  51. data/lib/rake/gempackagetask.rb +6 -90
  52. data/lib/rake/invocation_chain.rb +51 -0
  53. data/lib/rake/invocation_exception_mixin.rb +16 -0
  54. data/lib/rake/loaders/makefile.rb +13 -15
  55. data/lib/rake/multi_task.rb +16 -0
  56. data/lib/rake/name_space.rb +25 -0
  57. data/lib/rake/packagetask.rb +13 -12
  58. data/lib/rake/pathmap.rb +1 -0
  59. data/lib/rake/pseudo_status.rb +24 -0
  60. data/lib/rake/rake_module.rb +29 -0
  61. data/lib/rake/rake_test_loader.rb +10 -2
  62. data/lib/rake/rdoctask.rb +211 -190
  63. data/lib/rake/ruby182_test_unit_fix.rb +9 -7
  64. data/lib/rake/rule_recursion_overflow_error.rb +20 -0
  65. data/lib/rake/runtest.rb +4 -6
  66. data/lib/rake/task.rb +327 -0
  67. data/lib/rake/task_argument_error.rb +7 -0
  68. data/lib/rake/task_arguments.rb +74 -0
  69. data/lib/rake/task_manager.rb +307 -0
  70. data/lib/rake/tasklib.rb +1 -2
  71. data/lib/rake/testtask.rb +57 -27
  72. data/lib/rake/version.rb +10 -0
  73. data/lib/rake/win32.rb +4 -4
  74. data/lib/rake.rb +29 -2470
  75. data/test/contrib/test_sys.rb +8 -31
  76. data/test/data/access/Rakefile +33 -0
  77. data/test/data/comments/Rakefile +18 -0
  78. data/test/data/default/Rakefile +1 -1
  79. data/test/data/deprecated_import/Rakefile +1 -0
  80. data/test/data/dryrun/Rakefile +1 -1
  81. data/test/data/file_creation_task/Rakefile +1 -1
  82. data/test/data/namespace/Rakefile +9 -0
  83. data/test/data/rakelib/test1.rb +1 -0
  84. data/test/data/verbose/Rakefile +34 -0
  85. data/test/{filecreation.rb → file_creation.rb} +11 -7
  86. data/test/functional/functional_test.rb +25 -0
  87. data/test/{session_functional.rb → functional/session_based_tests.rb} +141 -23
  88. data/test/in_environment.rb +7 -5
  89. data/test/{test_application.rb → lib/application_test.rb} +331 -143
  90. data/test/{test_clean.rb → lib/clean_test.rb} +1 -0
  91. data/test/{test_definitions.rb → lib/definitions_test.rb} +3 -3
  92. data/test/lib/dsl_test.rb +52 -0
  93. data/test/{test_earlytime.rb → lib/earlytime_test.rb} +1 -2
  94. data/test/{test_extension.rb → lib/extension_test.rb} +2 -2
  95. data/test/{test_file_creation_task.rb → lib/file_creation_task_test.rb} +1 -1
  96. data/test/{test_file_task.rb → lib/file_task_test.rb} +4 -4
  97. data/test/{test_filelist.rb → lib/filelist_test.rb} +38 -24
  98. data/test/{test_fileutils.rb → lib/fileutils_test.rb} +27 -22
  99. data/test/{test_multitask.rb → lib/multitask_test.rb} +14 -6
  100. data/test/lib/package_task_test.rb +82 -0
  101. data/test/{test_pathmap.rb → lib/pathmap_test.rb} +3 -2
  102. data/test/{test_rake.rb → lib/rake_test.rb} +1 -1
  103. data/test/{test_rdoc_task.rb → lib/rdoc_task_test.rb} +19 -23
  104. data/test/{test_require.rb → lib/require_test.rb} +8 -2
  105. data/test/{test_rules.rb → lib/rules_test.rb} +2 -3
  106. data/test/{test_task_arguments.rb → lib/task_arguments_test.rb} +5 -5
  107. data/test/{test_task_manager.rb → lib/task_manager_test.rb} +15 -5
  108. data/test/{test_tasks.rb → lib/task_test.rb} +84 -21
  109. data/test/{test_test_task.rb → lib/test_task_test.rb} +3 -3
  110. data/test/lib/testtask_test.rb +49 -0
  111. data/test/{test_top_level_functions.rb → lib/top_level_functions_test.rb} +5 -3
  112. data/test/{test_win32.rb → lib/win32_test.rb} +19 -0
  113. data/test/rake_test_setup.rb +5 -9
  114. data/test/ruby_version_test.rb +3 -0
  115. data/test/test_helper.rb +19 -0
  116. metadata +108 -49
  117. data/test/functional.rb +0 -15
  118. data/test/test_package_task.rb +0 -118
  119. /data/test/{test_ftp.rb → lib/ftp_test.rb} +0 -0
  120. /data/test/{test_invocation_chain.rb → lib/invocation_chain_test.rb} +0 -0
  121. /data/test/{test_makefile_loader.rb → lib/makefile_loader_test.rb} +0 -0
  122. /data/test/{test_namespace.rb → lib/namespace_test.rb} +0 -0
  123. /data/test/{test_pseudo_status.rb → lib/pseudo_status_test.rb} +0 -0
  124. /data/test/{test_tasklib.rb → lib/tasklib_test.rb} +0 -0
@@ -1,97 +1,13 @@
1
- #!/usr/bin/env ruby
1
+ # rake/gempackagetask is deprecated in favor of rubygems/package_task
2
2
 
3
- # Define a package task library to aid in the definition of GEM
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
@@ -0,0 +1,16 @@
1
+ module Rake
2
+ module InvocationExceptionMixin
3
+ # Return the invocation chain (list of Rake tasks) that were in
4
+ # effect when this exception was detected by rake. May be null if
5
+ # no tasks were active.
6
+ def chain
7
+ @rake_invocation_chain ||= nil
8
+ end
9
+
10
+ # Set the invocation chain in effect when this exception was
11
+ # detected.
12
+ def chain=(value)
13
+ @rake_invocation_chain = value
14
+ end
15
+ end
16
+ end
@@ -1,21 +1,19 @@
1
- #!/usr/bin/env ruby
2
-
3
1
  module Rake
4
2
 
5
3
  # Makefile loader to be used with the import file loader.
6
4
  class MakefileLoader
7
- SPACE_MARK = "__&NBSP;__"
5
+ include Rake::DSL
6
+
7
+ SPACE_MARK = "\0"
8
8
 
9
9
  # Load the makefile dependencies in +fn+.
10
10
  def load(fn)
11
- open(fn) do |mf|
12
- lines = mf.read
13
- lines.gsub!(/\\ /, SPACE_MARK)
14
- lines.gsub!(/#[^\n]*\n/m, "")
15
- lines.gsub!(/\\\n/, ' ')
16
- lines.split("\n").each do |line|
17
- process_line(line)
18
- end
11
+ lines = File.read fn
12
+ lines.gsub!(/\\ /, SPACE_MARK)
13
+ lines.gsub!(/#[^\n]*\n/m, "")
14
+ lines.gsub!(/\\\n/, ' ')
15
+ lines.each_line do |line|
16
+ process_line(line)
19
17
  end
20
18
  end
21
19
 
@@ -23,17 +21,17 @@ module Rake
23
21
 
24
22
  # Process one logical line of makefile data.
25
23
  def process_line(line)
26
- file_tasks, args = line.split(':')
24
+ file_tasks, args = line.split(':', 2)
27
25
  return if args.nil?
28
26
  dependents = args.split.map { |d| respace(d) }
29
- file_tasks.strip.split.each do |file_task|
27
+ file_tasks.scan(/\S+/) do |file_task|
30
28
  file_task = respace(file_task)
31
29
  file file_task => dependents
32
30
  end
33
31
  end
34
-
32
+
35
33
  def respace(str)
36
- str.gsub(/#{SPACE_MARK}/, ' ')
34
+ str.tr SPACE_MARK, ' '
37
35
  end
38
36
  end
39
37
 
@@ -0,0 +1,16 @@
1
+ module Rake
2
+
3
+ # Same as a regular task, but the immediate prerequisites are done in
4
+ # parallel using Ruby threads.
5
+ #
6
+ class MultiTask < Task
7
+ private
8
+ def invoke_prerequisites(args, invocation_chain)
9
+ threads = @prerequisites.collect { |p|
10
+ Thread.new(p) { |r| application[r, @scope].invoke_with_call_chain(args, invocation_chain) }
11
+ }
12
+ threads.each { |t| t.join }
13
+ end
14
+ end
15
+
16
+ end
@@ -0,0 +1,25 @@
1
+ module Rake
2
+
3
+ # The NameSpace class will lookup task names in the the scope
4
+ # defined by a +namespace+ command.
5
+ #
6
+ class NameSpace
7
+
8
+ # Create a namespace lookup object using the given task manager
9
+ # and the list of scopes.
10
+ def initialize(task_manager, scope_list)
11
+ @task_manager = task_manager
12
+ @scope = scope_list.dup
13
+ end
14
+
15
+ # Lookup a task named +name+ in the namespace.
16
+ def [](name)
17
+ @task_manager.lookup(name, @scope)
18
+ end
19
+
20
+ # Return the list of tasks defined in this and nested namespaces.
21
+ def tasks
22
+ @task_manager.tasks_in_scope(@scope)
23
+ end
24
+ end
25
+ end
@@ -1,6 +1,4 @@
1
- #!/usr/bin/env ruby
2
-
3
- # Define a package task libarary to aid in the definition of
1
+ # Define a package task library to aid in the definition of
4
2
  # redistributable package files.
5
3
 
6
4
  require 'rake'
@@ -25,13 +23,13 @@ module Rake
25
23
  # of date.
26
24
  #
27
25
  # [<b>"<em>package_dir</em>/<em>name</em>-<em>version</em>.tgz"</b>]
28
- # Create a gzipped tar package (if <em>need_tar</em> is true).
26
+ # Create a gzipped tar package (if <em>need_tar</em> is true).
29
27
  #
30
28
  # [<b>"<em>package_dir</em>/<em>name</em>-<em>version</em>.tar.gz"</b>]
31
- # Create a gzipped tar package (if <em>need_tar_gz</em> is true).
29
+ # Create a gzipped tar package (if <em>need_tar_gz</em> is true).
32
30
  #
33
31
  # [<b>"<em>package_dir</em>/<em>name</em>-<em>version</em>.tar.bz2"</b>]
34
- # Create a bzip2'd tar package (if <em>need_tar_bz2</em> is true).
32
+ # Create a bzip2'd tar package (if <em>need_tar_bz2</em> is true).
35
33
  #
36
34
  # [<b>"<em>package_dir</em>/<em>name</em>-<em>version</em>.zip"</b>]
37
35
  # Create a zip package archive (if <em>need_zip</em> is true).
@@ -74,7 +72,10 @@ module Rake
74
72
  # Zip command for zipped archives. The default is 'zip'.
75
73
  attr_accessor :zip_command
76
74
 
77
- # Create a Package Task with the given name and version.
75
+ # Create a Package Task with the given name and version. Use +:noversion+
76
+ # as the version to build a package without a version or to provide a
77
+ # fully-versioned package name.
78
+
78
79
  def initialize(name=nil, version=nil)
79
80
  init(name, version)
80
81
  yield self if block_given?
@@ -102,11 +103,11 @@ module Rake
102
103
 
103
104
  desc "Build all the packages"
104
105
  task :package
105
-
106
+
106
107
  desc "Force a rebuild of the package files"
107
108
  task :repackage => [:clobber_package, :package]
108
-
109
- desc "Remove package products"
109
+
110
+ desc "Remove package products"
110
111
  task :clobber_package do
111
112
  rm_r package_dir rescue nil
112
113
  end
@@ -127,7 +128,7 @@ module Rake
127
128
  end
128
129
  end
129
130
  end
130
-
131
+
131
132
  if need_zip
132
133
  task :package => ["#{package_dir}/#{zip_file}"]
133
134
  file "#{package_dir}/#{zip_file}" => [package_dir_path] + package_files do
@@ -159,7 +160,7 @@ module Rake
159
160
  def package_name
160
161
  @version ? "#{@name}-#{@version}" : @name
161
162
  end
162
-
163
+
163
164
  def package_dir_path
164
165
  "#{package_dir}/#{package_name}"
165
166
  end
@@ -0,0 +1 @@
1
+ require 'rake/ext/string'
@@ -0,0 +1,24 @@
1
+ module Rake
2
+
3
+ ####################################################################
4
+ # Exit status class for times the system just gives us a nil.
5
+ class PseudoStatus
6
+ attr_reader :exitstatus
7
+ def initialize(code=0)
8
+ @exitstatus = code
9
+ end
10
+ def to_i
11
+ @exitstatus << 8
12
+ end
13
+ def >>(n)
14
+ to_i >> n
15
+ end
16
+ def stopped?
17
+ false
18
+ end
19
+ def exited?
20
+ true
21
+ end
22
+ end
23
+
24
+ end
@@ -0,0 +1,29 @@
1
+ require 'rake/application'
2
+
3
+ module Rake
4
+
5
+ # Rake module singleton methods.
6
+ #
7
+ class << self
8
+ # Current Rake Application
9
+ def application
10
+ @application ||= Rake::Application.new
11
+ end
12
+
13
+ # Set the current Rake application object.
14
+ def application=(app)
15
+ @application = app
16
+ end
17
+
18
+ # Return the original directory where the Rake application was started.
19
+ def original_dir
20
+ application.original_dir
21
+ end
22
+
23
+ # Load a rakefile.
24
+ def load_rakefile(path)
25
+ load(path)
26
+ end
27
+ end
28
+
29
+ end
@@ -1,5 +1,13 @@
1
- #!/usr/bin/env ruby
1
+ require 'rake'
2
2
 
3
3
  # Load the test files from the command line.
4
4
 
5
- ARGV.each { |f| load f unless f =~ /^-/ }
5
+ ARGV.each do |f|
6
+ next if f =~ /^-/
7
+
8
+ if f =~ /\*/
9
+ FileList[f].to_a.each { |fn| require File.expand_path(fn) }
10
+ else
11
+ require File.expand_path(f)
12
+ end
13
+ end