vergissberlin 0.0.9 → 0.0.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/vergissberlin/version.rb +1 -1
- data/test/cases/version_case.rb +26 -0
- data/test/rest_spec.rb +12 -0
- data/test/suites/suite_test.rb +12 -0
- data/test/utils.rb +13 -0
- metadata +83 -134
- data/.gitignore +0 -17
- data/.travis.yml +0 -7
- data/Gemfile +0 -4
- data/LICENSE.txt +0 -22
- data/Rakefile +0 -10
- data/test/test_test.rb +0 -5
- data/test/version_test.rb +0 -12
- data/vendor/bundle/bin/rake +0 -23
- data/vendor/bundle/bin/vergissberlin +0 -23
- data/vendor/bundle/build_info/capistrano_colors-0.5.5.info +0 -1
- data/vendor/bundle/build_info/rake-10.0.4.info +0 -1
- data/vendor/bundle/gems/capistrano_colors-0.5.5/Manifest +0 -7
- data/vendor/bundle/gems/capistrano_colors-0.5.5/README.rdoc +0 -130
- data/vendor/bundle/gems/capistrano_colors-0.5.5/Rakefile +0 -1
- data/vendor/bundle/gems/capistrano_colors-0.5.5/capistrano_colors.gemspec +0 -33
- data/vendor/bundle/gems/capistrano_colors-0.5.5/lib/capistrano_colors/configuration.rb +0 -70
- data/vendor/bundle/gems/capistrano_colors-0.5.5/lib/capistrano_colors/logger.rb +0 -72
- data/vendor/bundle/gems/capistrano_colors-0.5.5/lib/capistrano_colors.rb +0 -18
- data/vendor/bundle/gems/rake-10.0.4/CHANGES +0 -530
- data/vendor/bundle/gems/rake-10.0.4/MIT-LICENSE +0 -21
- data/vendor/bundle/gems/rake-10.0.4/README.rdoc +0 -187
- data/vendor/bundle/gems/rake-10.0.4/Rakefile +0 -375
- data/vendor/bundle/gems/rake-10.0.4/TODO +0 -21
- data/vendor/bundle/gems/rake-10.0.4/bin/rake +0 -33
- data/vendor/bundle/gems/rake-10.0.4/install.rb +0 -90
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/alt_system.rb +0 -109
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/application.rb +0 -681
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/backtrace.rb +0 -19
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/clean.rb +0 -32
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/cloneable.rb +0 -16
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/contrib/compositepublisher.rb +0 -21
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/contrib/ftptools.rb +0 -151
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/contrib/publisher.rb +0 -73
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/contrib/rubyforgepublisher.rb +0 -16
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/contrib/sshpublisher.rb +0 -50
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/contrib/sys.rb +0 -1
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/default_loader.rb +0 -10
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/dsl_definition.rb +0 -156
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/early_time.rb +0 -18
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/ext/core.rb +0 -27
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/ext/module.rb +0 -0
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/ext/string.rb +0 -168
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/ext/time.rb +0 -15
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/file_creation_task.rb +0 -24
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/file_list.rb +0 -410
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/file_task.rb +0 -47
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/file_utils.rb +0 -114
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/file_utils_ext.rb +0 -143
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/gempackagetask.rb +0 -1
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/invocation_chain.rb +0 -51
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/invocation_exception_mixin.rb +0 -16
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/loaders/makefile.rb +0 -40
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/multi_task.rb +0 -13
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/name_space.rb +0 -25
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/packagetask.rb +0 -185
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/pathmap.rb +0 -1
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/phony.rb +0 -15
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/private_reader.rb +0 -20
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/promise.rb +0 -99
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/pseudo_status.rb +0 -24
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/rake_module.rb +0 -37
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/rake_test_loader.rb +0 -22
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/rdoctask.rb +0 -1
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/ruby182_test_unit_fix.rb +0 -25
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/rule_recursion_overflow_error.rb +0 -20
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/runtest.rb +0 -22
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/task.rb +0 -368
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/task_argument_error.rb +0 -7
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/task_arguments.rb +0 -78
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/task_manager.rb +0 -296
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/tasklib.rb +0 -22
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/testtask.rb +0 -198
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/thread_history_display.rb +0 -48
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/thread_pool.rb +0 -155
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/trace_output.rb +0 -22
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/version.rb +0 -13
- data/vendor/bundle/gems/rake-10.0.4/lib/rake/win32.rb +0 -55
- data/vendor/bundle/gems/rake-10.0.4/lib/rake.rb +0 -71
- data/vendor/bundle/gems/rake-10.0.4/test/file_creation.rb +0 -34
- data/vendor/bundle/gems/rake-10.0.4/test/helper.rb +0 -562
- data/vendor/bundle/gems/rake-10.0.4/test/test_private_reader.rb +0 -42
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake.rb +0 -40
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_application.rb +0 -515
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_application_options.rb +0 -455
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_backtrace.rb +0 -89
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_clean.rb +0 -14
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_definitions.rb +0 -80
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_directory_task.rb +0 -57
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_dsl.rb +0 -40
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_early_time.rb +0 -31
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_extension.rb +0 -59
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_file_creation_task.rb +0 -56
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_file_list.rb +0 -628
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_file_list_path_map.rb +0 -8
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_file_task.rb +0 -122
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_file_utils.rb +0 -305
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_ftp_file.rb +0 -59
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_functional.rb +0 -496
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_invocation_chain.rb +0 -52
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_makefile_loader.rb +0 -44
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_multi_task.rb +0 -59
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_name_space.rb +0 -43
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_package_task.rb +0 -79
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_path_map.rb +0 -157
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_path_map_explode.rb +0 -34
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_path_map_partial.rb +0 -18
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_pseudo_status.rb +0 -21
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_rake_test_loader.rb +0 -21
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_reduce_compat.rb +0 -30
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_require.rb +0 -40
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_rules.rb +0 -327
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_task.rb +0 -340
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_task_argument_parsing.rb +0 -103
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_task_arguments.rb +0 -88
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_task_lib.rb +0 -9
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_task_manager.rb +0 -157
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_task_manager_argument_resolution.rb +0 -19
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_task_with_arguments.rb +0 -171
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_test_task.rb +0 -120
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_thread_pool.rb +0 -122
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_top_level_functions.rb +0 -71
- data/vendor/bundle/gems/rake-10.0.4/test/test_rake_win32.rb +0 -72
- data/vendor/bundle/gems/rake-10.0.4/test/test_thread_history_display.rb +0 -91
- data/vendor/bundle/gems/rake-10.0.4/test/test_trace_output.rb +0 -50
- data/vendor/bundle/specifications/capistrano_colors-0.5.5.gemspec +0 -32
- data/vendor/bundle/specifications/rake-10.0.4.gemspec +0 -35
- data/vergissberlin.gemspec +0 -26
@@ -1,99 +0,0 @@
|
|
1
|
-
module Rake
|
2
|
-
|
3
|
-
# A Promise object represents a promise to do work (a chore) in the
|
4
|
-
# future. The promise is created with a block and a list of
|
5
|
-
# arguments for the block. Calling value will return the value of
|
6
|
-
# the promised chore.
|
7
|
-
#
|
8
|
-
# Used by ThreadPool.
|
9
|
-
#
|
10
|
-
class Promise # :nodoc: all
|
11
|
-
NOT_SET = Object.new.freeze # :nodoc:
|
12
|
-
|
13
|
-
attr_accessor :recorder
|
14
|
-
|
15
|
-
# Create a promise to do the chore specified by the block.
|
16
|
-
def initialize(args, &block)
|
17
|
-
@mutex = Mutex.new
|
18
|
-
@result = NOT_SET
|
19
|
-
@error = NOT_SET
|
20
|
-
@args = args
|
21
|
-
@block = block
|
22
|
-
end
|
23
|
-
|
24
|
-
# Return the value of this promise.
|
25
|
-
#
|
26
|
-
# If the promised chore is not yet complete, then do the work
|
27
|
-
# synchronously. We will wait.
|
28
|
-
def value
|
29
|
-
unless complete?
|
30
|
-
stat :sleeping_on, :item_id => object_id
|
31
|
-
@mutex.synchronize do
|
32
|
-
stat :has_lock_on, :item_id => object_id
|
33
|
-
chore
|
34
|
-
stat :releasing_lock_on, :item_id => object_id
|
35
|
-
end
|
36
|
-
end
|
37
|
-
error? ? raise(@error) : @result
|
38
|
-
end
|
39
|
-
|
40
|
-
# If no one else is working this promise, go ahead and do the chore.
|
41
|
-
def work
|
42
|
-
stat :attempting_lock_on, :item_id => object_id
|
43
|
-
if @mutex.try_lock
|
44
|
-
stat :has_lock_on, :item_id => object_id
|
45
|
-
chore
|
46
|
-
stat :releasing_lock_on, :item_id => object_id
|
47
|
-
@mutex.unlock
|
48
|
-
else
|
49
|
-
stat :bailed_on, :item_id => object_id
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
private
|
54
|
-
|
55
|
-
# Perform the chore promised
|
56
|
-
def chore
|
57
|
-
if complete?
|
58
|
-
stat :found_completed, :item_id => object_id
|
59
|
-
return
|
60
|
-
end
|
61
|
-
stat :will_execute, :item_id => object_id
|
62
|
-
begin
|
63
|
-
@result = @block.call(*@args)
|
64
|
-
rescue Exception => e
|
65
|
-
@error = e
|
66
|
-
end
|
67
|
-
stat :did_execute, :item_id => object_id
|
68
|
-
discard
|
69
|
-
end
|
70
|
-
|
71
|
-
# Do we have a result for the promise
|
72
|
-
def result?
|
73
|
-
! @result.equal?(NOT_SET)
|
74
|
-
end
|
75
|
-
|
76
|
-
# Did the promise throw an error
|
77
|
-
def error?
|
78
|
-
! @error.equal?(NOT_SET)
|
79
|
-
end
|
80
|
-
|
81
|
-
# Are we done with the promise
|
82
|
-
def complete?
|
83
|
-
result? || error?
|
84
|
-
end
|
85
|
-
|
86
|
-
# free up these items for the GC
|
87
|
-
def discard
|
88
|
-
@args = nil
|
89
|
-
@block = nil
|
90
|
-
end
|
91
|
-
|
92
|
-
# Record execution statistics if there is a recorder
|
93
|
-
def stat(*args)
|
94
|
-
@recorder.call(*args) if @recorder
|
95
|
-
end
|
96
|
-
|
97
|
-
end
|
98
|
-
|
99
|
-
end
|
@@ -1,24 +0,0 @@
|
|
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
|
@@ -1,37 +0,0 @@
|
|
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
|
-
|
28
|
-
# Add files to the rakelib list
|
29
|
-
def add_rakelib(*files)
|
30
|
-
application.options.rakelib ||= []
|
31
|
-
files.each do |file|
|
32
|
-
application.options.rakelib << file
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
require 'rake'
|
2
|
-
|
3
|
-
# Load the test files from the command line.
|
4
|
-
argv = ARGV.select do |argument|
|
5
|
-
case argument
|
6
|
-
when /^-/ then
|
7
|
-
argument
|
8
|
-
when /\*/ then
|
9
|
-
FileList[argument].to_a.each do |file|
|
10
|
-
require File.expand_path file
|
11
|
-
end
|
12
|
-
|
13
|
-
false
|
14
|
-
else
|
15
|
-
require File.expand_path argument
|
16
|
-
|
17
|
-
false
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
ARGV.replace argv
|
22
|
-
|
@@ -1 +0,0 @@
|
|
1
|
-
fail "ERROR: 'rake/rdoctask' is obsolete and no longer supported. Use 'rdoc/task' (available in RDoc 2.4.2+) instead."
|
@@ -1,25 +0,0 @@
|
|
1
|
-
# Local Rake override to fix bug in Ruby 0.8.2
|
2
|
-
module Test # :nodoc:
|
3
|
-
# Local Rake override to fix bug in Ruby 0.8.2
|
4
|
-
module Unit # :nodoc:
|
5
|
-
# Local Rake override to fix bug in Ruby 0.8.2
|
6
|
-
module Collector # :nodoc:
|
7
|
-
# Local Rake override to fix bug in Ruby 0.8.2
|
8
|
-
class Dir # :nodoc:
|
9
|
-
undef collect_file
|
10
|
-
def collect_file(name, suites, already_gathered) # :nodoc:
|
11
|
-
dir = File.dirname(File.expand_path(name))
|
12
|
-
$:.unshift(dir) unless $:.first == dir
|
13
|
-
if(@req)
|
14
|
-
@req.require(name)
|
15
|
-
else
|
16
|
-
require(name)
|
17
|
-
end
|
18
|
-
find_test_cases(already_gathered).each{|t| add_suite(suites, t.suite)}
|
19
|
-
ensure
|
20
|
-
$:.delete_at $:.rindex(dir)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
|
2
|
-
module Rake
|
3
|
-
|
4
|
-
# Error indicating a recursion overflow error in task selection.
|
5
|
-
class RuleRecursionOverflowError < StandardError
|
6
|
-
def initialize(*args)
|
7
|
-
super
|
8
|
-
@targets = []
|
9
|
-
end
|
10
|
-
|
11
|
-
def add_target(target)
|
12
|
-
@targets << target
|
13
|
-
end
|
14
|
-
|
15
|
-
def message
|
16
|
-
super + ": [" + @targets.reverse.join(' => ') + "]"
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
require 'test/unit/assertions'
|
3
|
-
require 'rake/file_list'
|
4
|
-
|
5
|
-
module Rake
|
6
|
-
include Test::Unit::Assertions
|
7
|
-
|
8
|
-
def run_tests(pattern='test/test*.rb', log_enabled=false)
|
9
|
-
FileList.glob(pattern).each { |fn|
|
10
|
-
$stderr.puts fn if log_enabled
|
11
|
-
begin
|
12
|
-
require fn
|
13
|
-
rescue Exception => ex
|
14
|
-
$stderr.puts "Error in #{fn}: #{ex.message}"
|
15
|
-
$stderr.puts ex.backtrace
|
16
|
-
assert false
|
17
|
-
end
|
18
|
-
}
|
19
|
-
end
|
20
|
-
|
21
|
-
extend self
|
22
|
-
end
|
@@ -1,368 +0,0 @@
|
|
1
|
-
require 'rake/invocation_exception_mixin'
|
2
|
-
|
3
|
-
module Rake
|
4
|
-
|
5
|
-
# #########################################################################
|
6
|
-
# A Task is the basic unit of work in a Rakefile. Tasks have associated
|
7
|
-
# actions (possibly more than one) and a list of prerequisites. When
|
8
|
-
# invoked, a task will first ensure that all of its prerequisites have an
|
9
|
-
# opportunity to run and then it will execute its own actions.
|
10
|
-
#
|
11
|
-
# Tasks are not usually created directly using the new method, but rather
|
12
|
-
# use the +file+ and +task+ convenience methods.
|
13
|
-
#
|
14
|
-
class Task
|
15
|
-
# List of prerequisites for a task.
|
16
|
-
attr_reader :prerequisites
|
17
|
-
|
18
|
-
# List of actions attached to a task.
|
19
|
-
attr_reader :actions
|
20
|
-
|
21
|
-
# Application owning this task.
|
22
|
-
attr_accessor :application
|
23
|
-
|
24
|
-
# Comment for this task. Restricted to a single line of no more than 50
|
25
|
-
# characters.
|
26
|
-
attr_reader :comment
|
27
|
-
|
28
|
-
# Full text of the (possibly multi-line) comment.
|
29
|
-
attr_reader :full_comment
|
30
|
-
|
31
|
-
# Array of nested namespaces names used for task lookup by this task.
|
32
|
-
attr_reader :scope
|
33
|
-
|
34
|
-
# File/Line locations of each of the task definitions for this
|
35
|
-
# task (only valid if the task was defined with the detect
|
36
|
-
# location option set).
|
37
|
-
attr_reader :locations
|
38
|
-
|
39
|
-
# Return task name
|
40
|
-
def to_s
|
41
|
-
name
|
42
|
-
end
|
43
|
-
|
44
|
-
def inspect
|
45
|
-
"<#{self.class} #{name} => [#{prerequisites.join(', ')}]>"
|
46
|
-
end
|
47
|
-
|
48
|
-
# List of sources for task.
|
49
|
-
attr_writer :sources
|
50
|
-
def sources
|
51
|
-
@sources ||= []
|
52
|
-
end
|
53
|
-
|
54
|
-
# List of prerequisite tasks
|
55
|
-
def prerequisite_tasks
|
56
|
-
prerequisites.collect { |pre| lookup_prerequisite(pre) }
|
57
|
-
end
|
58
|
-
|
59
|
-
def lookup_prerequisite(prerequisite_name)
|
60
|
-
application[prerequisite_name, @scope]
|
61
|
-
end
|
62
|
-
private :lookup_prerequisite
|
63
|
-
|
64
|
-
# List of all unique prerequisite tasks including prerequisite tasks'
|
65
|
-
# prerequisites.
|
66
|
-
# Includes self when cyclic dependencies are found.
|
67
|
-
def all_prerequisite_tasks
|
68
|
-
seen = {}
|
69
|
-
collect_prerequisites(seen)
|
70
|
-
seen.values
|
71
|
-
end
|
72
|
-
|
73
|
-
def collect_prerequisites(seen)
|
74
|
-
prerequisite_tasks.each do |pre|
|
75
|
-
next if seen[pre.name]
|
76
|
-
seen[pre.name] = pre
|
77
|
-
pre.collect_prerequisites(seen)
|
78
|
-
end
|
79
|
-
end
|
80
|
-
protected :collect_prerequisites
|
81
|
-
|
82
|
-
# First source from a rule (nil if no sources)
|
83
|
-
def source
|
84
|
-
@sources.first if defined?(@sources)
|
85
|
-
end
|
86
|
-
|
87
|
-
# Create a task named +task_name+ with no actions or prerequisites. Use
|
88
|
-
# +enhance+ to add actions and prerequisites.
|
89
|
-
def initialize(task_name, app)
|
90
|
-
@name = task_name.to_s
|
91
|
-
@prerequisites = []
|
92
|
-
@actions = []
|
93
|
-
@already_invoked = false
|
94
|
-
@full_comment = nil
|
95
|
-
@comment = nil
|
96
|
-
@lock = Monitor.new
|
97
|
-
@application = app
|
98
|
-
@scope = app.current_scope
|
99
|
-
@arg_names = nil
|
100
|
-
@locations = []
|
101
|
-
end
|
102
|
-
|
103
|
-
# Enhance a task with prerequisites or actions. Returns self.
|
104
|
-
def enhance(deps=nil, &block)
|
105
|
-
@prerequisites |= deps if deps
|
106
|
-
@actions << block if block_given?
|
107
|
-
self
|
108
|
-
end
|
109
|
-
|
110
|
-
# Name of the task, including any namespace qualifiers.
|
111
|
-
def name
|
112
|
-
@name.to_s
|
113
|
-
end
|
114
|
-
|
115
|
-
# Name of task with argument list description.
|
116
|
-
def name_with_args # :nodoc:
|
117
|
-
if arg_description
|
118
|
-
"#{name}#{arg_description}"
|
119
|
-
else
|
120
|
-
name
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
# Argument description (nil if none).
|
125
|
-
def arg_description # :nodoc:
|
126
|
-
@arg_names ? "[#{arg_names.join(',')}]" : nil
|
127
|
-
end
|
128
|
-
|
129
|
-
# Name of arguments for this task.
|
130
|
-
def arg_names
|
131
|
-
@arg_names || []
|
132
|
-
end
|
133
|
-
|
134
|
-
# Reenable the task, allowing its tasks to be executed if the task
|
135
|
-
# is invoked again.
|
136
|
-
def reenable
|
137
|
-
@already_invoked = false
|
138
|
-
end
|
139
|
-
|
140
|
-
# Clear the existing prerequisites and actions of a rake task.
|
141
|
-
def clear
|
142
|
-
clear_prerequisites
|
143
|
-
clear_actions
|
144
|
-
clear_comments
|
145
|
-
self
|
146
|
-
end
|
147
|
-
|
148
|
-
# Clear the existing prerequisites of a rake task.
|
149
|
-
def clear_prerequisites
|
150
|
-
prerequisites.clear
|
151
|
-
self
|
152
|
-
end
|
153
|
-
|
154
|
-
# Clear the existing actions on a rake task.
|
155
|
-
def clear_actions
|
156
|
-
actions.clear
|
157
|
-
self
|
158
|
-
end
|
159
|
-
|
160
|
-
# Clear the existing comments on a rake task.
|
161
|
-
def clear_comments
|
162
|
-
@full_comment = nil
|
163
|
-
@comment = nil
|
164
|
-
self
|
165
|
-
end
|
166
|
-
|
167
|
-
# Invoke the task if it is needed. Prerequisites are invoked first.
|
168
|
-
def invoke(*args)
|
169
|
-
task_args = TaskArguments.new(arg_names, args)
|
170
|
-
invoke_with_call_chain(task_args, InvocationChain::EMPTY)
|
171
|
-
end
|
172
|
-
|
173
|
-
# Same as invoke, but explicitly pass a call chain to detect
|
174
|
-
# circular dependencies.
|
175
|
-
def invoke_with_call_chain(task_args, invocation_chain) # :nodoc:
|
176
|
-
new_chain = InvocationChain.append(self, invocation_chain)
|
177
|
-
@lock.synchronize do
|
178
|
-
if application.options.trace
|
179
|
-
application.trace "** Invoke #{name} #{format_trace_flags}"
|
180
|
-
end
|
181
|
-
return if @already_invoked
|
182
|
-
@already_invoked = true
|
183
|
-
invoke_prerequisites(task_args, new_chain)
|
184
|
-
execute(task_args) if needed?
|
185
|
-
end
|
186
|
-
rescue Exception => ex
|
187
|
-
add_chain_to(ex, new_chain)
|
188
|
-
raise ex
|
189
|
-
end
|
190
|
-
protected :invoke_with_call_chain
|
191
|
-
|
192
|
-
def add_chain_to(exception, new_chain)
|
193
|
-
exception.extend(InvocationExceptionMixin) unless exception.respond_to?(:chain)
|
194
|
-
exception.chain = new_chain if exception.chain.nil?
|
195
|
-
end
|
196
|
-
private :add_chain_to
|
197
|
-
|
198
|
-
# Invoke all the prerequisites of a task.
|
199
|
-
def invoke_prerequisites(task_args, invocation_chain) # :nodoc:
|
200
|
-
if application.options.always_multitask
|
201
|
-
invoke_prerequisites_concurrently(task_args, invocation_chain)
|
202
|
-
else
|
203
|
-
prerequisite_tasks.each { |p|
|
204
|
-
prereq_args = task_args.new_scope(p.arg_names)
|
205
|
-
p.invoke_with_call_chain(prereq_args, invocation_chain)
|
206
|
-
}
|
207
|
-
end
|
208
|
-
end
|
209
|
-
|
210
|
-
# Invoke all the prerequisites of a task in parallel.
|
211
|
-
def invoke_prerequisites_concurrently(task_args, invocation_chain) # :nodoc:
|
212
|
-
futures = prerequisite_tasks.collect do |p|
|
213
|
-
prereq_args = task_args.new_scope(p.arg_names)
|
214
|
-
application.thread_pool.future(p) do |r|
|
215
|
-
r.invoke_with_call_chain(prereq_args, invocation_chain)
|
216
|
-
end
|
217
|
-
end
|
218
|
-
futures.each { |f| f.value }
|
219
|
-
end
|
220
|
-
|
221
|
-
# Format the trace flags for display.
|
222
|
-
def format_trace_flags
|
223
|
-
flags = []
|
224
|
-
flags << "first_time" unless @already_invoked
|
225
|
-
flags << "not_needed" unless needed?
|
226
|
-
flags.empty? ? "" : "(" + flags.join(", ") + ")"
|
227
|
-
end
|
228
|
-
private :format_trace_flags
|
229
|
-
|
230
|
-
# Execute the actions associated with this task.
|
231
|
-
def execute(args=nil)
|
232
|
-
args ||= EMPTY_TASK_ARGS
|
233
|
-
if application.options.dryrun
|
234
|
-
application.trace "** Execute (dry run) #{name}"
|
235
|
-
return
|
236
|
-
end
|
237
|
-
if application.options.trace
|
238
|
-
application.trace "** Execute #{name}"
|
239
|
-
end
|
240
|
-
application.enhance_with_matching_rule(name) if @actions.empty?
|
241
|
-
@actions.each do |act|
|
242
|
-
case act.arity
|
243
|
-
when 1
|
244
|
-
act.call(self)
|
245
|
-
else
|
246
|
-
act.call(self, args)
|
247
|
-
end
|
248
|
-
end
|
249
|
-
end
|
250
|
-
|
251
|
-
# Is this task needed?
|
252
|
-
def needed?
|
253
|
-
true
|
254
|
-
end
|
255
|
-
|
256
|
-
# Timestamp for this task. Basic tasks return the current time for their
|
257
|
-
# time stamp. Other tasks can be more sophisticated.
|
258
|
-
def timestamp
|
259
|
-
Time.now
|
260
|
-
end
|
261
|
-
|
262
|
-
# Add a description to the task. The description can consist of an option
|
263
|
-
# argument list (enclosed brackets) and an optional comment.
|
264
|
-
def add_description(description)
|
265
|
-
return if ! description
|
266
|
-
comment = description.strip
|
267
|
-
add_comment(comment) if comment && ! comment.empty?
|
268
|
-
end
|
269
|
-
|
270
|
-
# Writing to the comment attribute is the same as adding a description.
|
271
|
-
def comment=(description)
|
272
|
-
add_description(description)
|
273
|
-
end
|
274
|
-
|
275
|
-
# Add a comment to the task. If a comment already exists, separate
|
276
|
-
# the new comment with " / ".
|
277
|
-
def add_comment(comment)
|
278
|
-
if @full_comment
|
279
|
-
@full_comment << " / "
|
280
|
-
else
|
281
|
-
@full_comment = ''
|
282
|
-
end
|
283
|
-
@full_comment << comment
|
284
|
-
if @full_comment =~ /\A([^.]+?\.)( |$)/
|
285
|
-
@comment = $1
|
286
|
-
else
|
287
|
-
@comment = @full_comment
|
288
|
-
end
|
289
|
-
end
|
290
|
-
private :add_comment
|
291
|
-
|
292
|
-
# Set the names of the arguments for this task. +args+ should be
|
293
|
-
# an array of symbols, one for each argument name.
|
294
|
-
def set_arg_names(args)
|
295
|
-
@arg_names = args.map { |a| a.to_sym }
|
296
|
-
end
|
297
|
-
|
298
|
-
# Return a string describing the internal state of a task. Useful for
|
299
|
-
# debugging.
|
300
|
-
def investigation
|
301
|
-
result = "------------------------------\n"
|
302
|
-
result << "Investigating #{name}\n"
|
303
|
-
result << "class: #{self.class}\n"
|
304
|
-
result << "task needed: #{needed?}\n"
|
305
|
-
result << "timestamp: #{timestamp}\n"
|
306
|
-
result << "pre-requisites: \n"
|
307
|
-
prereqs = prerequisite_tasks
|
308
|
-
prereqs.sort! {|a,b| a.timestamp <=> b.timestamp}
|
309
|
-
prereqs.each do |p|
|
310
|
-
result << "--#{p.name} (#{p.timestamp})\n"
|
311
|
-
end
|
312
|
-
latest_prereq = prerequisite_tasks.collect { |pre| pre.timestamp }.max
|
313
|
-
result << "latest-prerequisite time: #{latest_prereq}\n"
|
314
|
-
result << "................................\n\n"
|
315
|
-
return result
|
316
|
-
end
|
317
|
-
|
318
|
-
# ----------------------------------------------------------------
|
319
|
-
# Rake Module Methods
|
320
|
-
#
|
321
|
-
class << self
|
322
|
-
|
323
|
-
# Clear the task list. This cause rake to immediately forget all the
|
324
|
-
# tasks that have been assigned. (Normally used in the unit tests.)
|
325
|
-
def clear
|
326
|
-
Rake.application.clear
|
327
|
-
end
|
328
|
-
|
329
|
-
# List of all defined tasks.
|
330
|
-
def tasks
|
331
|
-
Rake.application.tasks
|
332
|
-
end
|
333
|
-
|
334
|
-
# Return a task with the given name. If the task is not currently
|
335
|
-
# known, try to synthesize one from the defined rules. If no rules are
|
336
|
-
# found, but an existing file matches the task name, assume it is a file
|
337
|
-
# task with no dependencies or actions.
|
338
|
-
def [](task_name)
|
339
|
-
Rake.application[task_name]
|
340
|
-
end
|
341
|
-
|
342
|
-
# TRUE if the task name is already defined.
|
343
|
-
def task_defined?(task_name)
|
344
|
-
Rake.application.lookup(task_name) != nil
|
345
|
-
end
|
346
|
-
|
347
|
-
# Define a task given +args+ and an option block. If a rule with the
|
348
|
-
# given name already exists, the prerequisites and actions are added to
|
349
|
-
# the existing task. Returns the defined task.
|
350
|
-
def define_task(*args, &block)
|
351
|
-
Rake.application.define_task(self, *args, &block)
|
352
|
-
end
|
353
|
-
|
354
|
-
# Define a rule for synthesizing tasks.
|
355
|
-
def create_rule(*args, &block)
|
356
|
-
Rake.application.create_rule(*args, &block)
|
357
|
-
end
|
358
|
-
|
359
|
-
# Apply the scope to the task name according to the rules for
|
360
|
-
# this kind of task. Generic tasks will accept the scope as
|
361
|
-
# part of the name.
|
362
|
-
def scope_name(scope, task_name)
|
363
|
-
(scope + [task_name]).join(':')
|
364
|
-
end
|
365
|
-
|
366
|
-
end # class << Rake::Task
|
367
|
-
end # class Rake::Task
|
368
|
-
end
|
@@ -1,78 +0,0 @@
|
|
1
|
-
module Rake
|
2
|
-
|
3
|
-
####################################################################
|
4
|
-
# TaskArguments manage the arguments passed to a task.
|
5
|
-
#
|
6
|
-
class TaskArguments
|
7
|
-
include Enumerable
|
8
|
-
|
9
|
-
attr_reader :names
|
10
|
-
|
11
|
-
# Create a TaskArgument object with a list of named arguments
|
12
|
-
# (given by :names) and a set of associated values (given by
|
13
|
-
# :values). :parent is the parent argument object.
|
14
|
-
def initialize(names, values, parent=nil)
|
15
|
-
@names = names
|
16
|
-
@parent = parent
|
17
|
-
@hash = {}
|
18
|
-
names.each_with_index { |name, i|
|
19
|
-
@hash[name.to_sym] = values[i] unless values[i].nil?
|
20
|
-
}
|
21
|
-
end
|
22
|
-
|
23
|
-
# Create a new argument scope using the prerequisite argument
|
24
|
-
# names.
|
25
|
-
def new_scope(names)
|
26
|
-
values = names.collect { |n| self[n] }
|
27
|
-
self.class.new(names, values, self)
|
28
|
-
end
|
29
|
-
|
30
|
-
# Find an argument value by name or index.
|
31
|
-
def [](index)
|
32
|
-
lookup(index.to_sym)
|
33
|
-
end
|
34
|
-
|
35
|
-
# Specify a hash of default values for task arguments. Use the
|
36
|
-
# defaults only if there is no specific value for the given
|
37
|
-
# argument.
|
38
|
-
def with_defaults(defaults)
|
39
|
-
@hash = defaults.merge(@hash)
|
40
|
-
end
|
41
|
-
|
42
|
-
def each(&block)
|
43
|
-
@hash.each(&block)
|
44
|
-
end
|
45
|
-
|
46
|
-
def values_at(*keys)
|
47
|
-
keys.map { |k| lookup(k) }
|
48
|
-
end
|
49
|
-
|
50
|
-
def method_missing(sym, *args)
|
51
|
-
lookup(sym.to_sym)
|
52
|
-
end
|
53
|
-
|
54
|
-
def to_hash
|
55
|
-
@hash
|
56
|
-
end
|
57
|
-
|
58
|
-
def to_s
|
59
|
-
@hash.inspect
|
60
|
-
end
|
61
|
-
|
62
|
-
def inspect
|
63
|
-
to_s
|
64
|
-
end
|
65
|
-
|
66
|
-
protected
|
67
|
-
|
68
|
-
def lookup(name)
|
69
|
-
if @hash.has_key?(name)
|
70
|
-
@hash[name]
|
71
|
-
elsif @parent
|
72
|
-
@parent.lookup(name)
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
EMPTY_TASK_ARGS = TaskArguments.new([], [])
|
78
|
-
end
|