spline 0.0.11 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (139) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/lib/spline/action_command.rb +21 -0
  4. data/lib/spline/install_command.rb +28 -0
  5. data/lib/spline/process_command.rb +20 -0
  6. data/lib/spline/spline_cli.rb +7 -19
  7. data/lib/spline/templates/action.tt +7 -0
  8. data/lib/spline/templates/my_first_action.tt +11 -0
  9. data/lib/spline/templates/my_process.tt +21 -0
  10. data/lib/spline/templates/my_second_action.tt +11 -0
  11. data/lib/spline/templates/process.tt +6 -0
  12. data/lib/spline/version.rb +1 -1
  13. data/spline.gemspec +0 -1
  14. metadata +9 -140
  15. data/vendor/bundle/ruby/2.1.0/bin/rake +0 -23
  16. data/vendor/bundle/ruby/2.1.0/bin/spline +0 -23
  17. data/vendor/bundle/ruby/2.1.0/build_info/rake-10.3.2.info +0 -1
  18. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/.autotest +0 -7
  19. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/.gemtest +0 -0
  20. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/.rubocop.yml +0 -27
  21. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/.togglerc +0 -7
  22. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/CONTRIBUTING.rdoc +0 -34
  23. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/History.rdoc +0 -609
  24. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/MIT-LICENSE +0 -21
  25. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/Manifest.txt +0 -162
  26. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/README.rdoc +0 -137
  27. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/Rakefile +0 -81
  28. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/bin/rake +0 -33
  29. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/alt_system.rb +0 -110
  30. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/application.rb +0 -783
  31. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/backtrace.rb +0 -23
  32. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/clean.rb +0 -76
  33. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/cloneable.rb +0 -16
  34. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/contrib/.document +0 -0
  35. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/contrib/compositepublisher.rb +0 -21
  36. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/contrib/ftptools.rb +0 -137
  37. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/contrib/publisher.rb +0 -81
  38. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/contrib/rubyforgepublisher.rb +0 -18
  39. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/contrib/sshpublisher.rb +0 -61
  40. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/contrib/sys.rb +0 -4
  41. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/cpu_counter.rb +0 -109
  42. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/default_loader.rb +0 -14
  43. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/dsl_definition.rb +0 -198
  44. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/early_time.rb +0 -21
  45. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/ext/core.rb +0 -25
  46. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/ext/module.rb +0 -1
  47. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/ext/string.rb +0 -173
  48. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/ext/time.rb +0 -15
  49. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/file_creation_task.rb +0 -24
  50. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/file_list.rb +0 -414
  51. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/file_task.rb +0 -46
  52. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/file_utils.rb +0 -116
  53. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/file_utils_ext.rb +0 -144
  54. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/gempackagetask.rb +0 -4
  55. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/invocation_chain.rb +0 -56
  56. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/invocation_exception_mixin.rb +0 -16
  57. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/linked_list.rb +0 -103
  58. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/loaders/makefile.rb +0 -40
  59. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/multi_task.rb +0 -13
  60. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/name_space.rb +0 -38
  61. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/packagetask.rb +0 -202
  62. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/pathmap.rb +0 -3
  63. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/phony.rb +0 -15
  64. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/private_reader.rb +0 -20
  65. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/promise.rb +0 -99
  66. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/pseudo_status.rb +0 -29
  67. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/rake_module.rb +0 -38
  68. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/rake_test_loader.rb +0 -22
  69. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/rdoctask.rb +0 -4
  70. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/ruby182_test_unit_fix.rb +0 -29
  71. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/rule_recursion_overflow_error.rb +0 -20
  72. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/runtest.rb +0 -27
  73. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/scope.rb +0 -42
  74. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/task.rb +0 -383
  75. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/task_argument_error.rb +0 -7
  76. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/task_arguments.rb +0 -98
  77. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/task_manager.rb +0 -310
  78. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/tasklib.rb +0 -24
  79. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/testtask.rb +0 -212
  80. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/thread_history_display.rb +0 -48
  81. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/thread_pool.rb +0 -164
  82. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/trace_output.rb +0 -22
  83. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/version.rb +0 -7
  84. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/win32.rb +0 -56
  85. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake.rb +0 -78
  86. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/rakelib/publish.rake +0 -20
  87. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/rakelib/test_times.rake +0 -25
  88. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/file_creation.rb +0 -34
  89. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/helper.rb +0 -127
  90. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/support/rakefile_definitions.rb +0 -478
  91. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/support/ruby_runner.rb +0 -33
  92. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_private_reader.rb +0 -42
  93. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake.rb +0 -40
  94. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_application.rb +0 -641
  95. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_application_options.rb +0 -466
  96. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_backtrace.rb +0 -119
  97. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_clean.rb +0 -55
  98. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_cpu_counter.rb +0 -50
  99. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_definitions.rb +0 -79
  100. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_directory_task.rb +0 -63
  101. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_dsl.rb +0 -40
  102. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_early_time.rb +0 -31
  103. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_extension.rb +0 -59
  104. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_file_creation_task.rb +0 -56
  105. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_file_list.rb +0 -627
  106. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_file_list_path_map.rb +0 -8
  107. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_file_task.rb +0 -186
  108. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_file_utils.rb +0 -309
  109. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_ftp_file.rb +0 -74
  110. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_functional.rb +0 -482
  111. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_invocation_chain.rb +0 -64
  112. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_linked_list.rb +0 -84
  113. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_makefile_loader.rb +0 -46
  114. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_multi_task.rb +0 -58
  115. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_name_space.rb +0 -57
  116. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_package_task.rb +0 -79
  117. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_path_map.rb +0 -168
  118. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_path_map_explode.rb +0 -34
  119. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_path_map_partial.rb +0 -18
  120. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_pseudo_status.rb +0 -21
  121. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_rake_test_loader.rb +0 -20
  122. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_reduce_compat.rb +0 -26
  123. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_require.rb +0 -40
  124. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_rules.rb +0 -388
  125. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_scope.rb +0 -44
  126. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_task.rb +0 -392
  127. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_task_argument_parsing.rb +0 -109
  128. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_task_arguments.rb +0 -127
  129. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_task_lib.rb +0 -9
  130. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_task_manager.rb +0 -178
  131. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_task_manager_argument_resolution.rb +0 -19
  132. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_task_with_arguments.rb +0 -171
  133. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_test_task.rb +0 -141
  134. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_thread_pool.rb +0 -142
  135. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_top_level_functions.rb +0 -71
  136. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_win32.rb +0 -72
  137. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_thread_history_display.rb +0 -101
  138. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_trace_output.rb +0 -52
  139. data/vendor/bundle/ruby/2.1.0/specifications/rake-10.3.2.gemspec +0 -45
@@ -1,783 +0,0 @@
1
- require 'shellwords'
2
- require 'optparse'
3
-
4
- require 'rake/task_manager'
5
- require 'rake/file_list'
6
- require 'rake/thread_pool'
7
- require 'rake/thread_history_display'
8
- require 'rake/trace_output'
9
- require 'rake/win32'
10
-
11
- module Rake
12
-
13
- CommandLineOptionError = Class.new(StandardError)
14
-
15
- ##
16
- # Rake main application object. When invoking +rake+ from the
17
- # command line, a Rake::Application object is created and run.
18
-
19
- class Application
20
- include TaskManager
21
- include TraceOutput
22
-
23
- # The name of the application (typically 'rake')
24
- attr_reader :name
25
-
26
- # The original directory where rake was invoked.
27
- attr_reader :original_dir
28
-
29
- # Name of the actual rakefile used.
30
- attr_reader :rakefile
31
-
32
- # Number of columns on the terminal
33
- attr_accessor :terminal_columns
34
-
35
- # List of the top level task names (task names from the command line).
36
- attr_reader :top_level_tasks
37
-
38
- DEFAULT_RAKEFILES = [
39
- 'rakefile',
40
- 'Rakefile',
41
- 'rakefile.rb',
42
- 'Rakefile.rb'
43
- ].freeze
44
-
45
- # Initialize a Rake::Application object.
46
- def initialize
47
- super
48
- @name = 'rake'
49
- @rakefiles = DEFAULT_RAKEFILES.dup
50
- @rakefile = nil
51
- @pending_imports = []
52
- @imported = []
53
- @loaders = {}
54
- @default_loader = Rake::DefaultLoader.new
55
- @original_dir = Dir.pwd
56
- @top_level_tasks = []
57
- add_loader('rb', DefaultLoader.new)
58
- add_loader('rf', DefaultLoader.new)
59
- add_loader('rake', DefaultLoader.new)
60
- @tty_output = STDOUT.tty?
61
- @terminal_columns = ENV['RAKE_COLUMNS'].to_i
62
- end
63
-
64
- # Run the Rake application. The run method performs the following
65
- # three steps:
66
- #
67
- # * Initialize the command line options (+init+).
68
- # * Define the tasks (+load_rakefile+).
69
- # * Run the top level tasks (+top_level+).
70
- #
71
- # If you wish to build a custom rake command, you should call
72
- # +init+ on your application. Then define any tasks. Finally,
73
- # call +top_level+ to run your top level tasks.
74
- def run
75
- standard_exception_handling do
76
- init
77
- load_rakefile
78
- top_level
79
- end
80
- end
81
-
82
- # Initialize the command line parameters and app name.
83
- def init(app_name='rake')
84
- standard_exception_handling do
85
- @name = app_name
86
- handle_options
87
- collect_command_line_tasks
88
- end
89
- end
90
-
91
- # Find the rakefile and then load it and any pending imports.
92
- def load_rakefile
93
- standard_exception_handling do
94
- raw_load_rakefile
95
- end
96
- end
97
-
98
- # Run the top level tasks of a Rake application.
99
- def top_level
100
- run_with_threads do
101
- if options.show_tasks
102
- display_tasks_and_comments
103
- elsif options.show_prereqs
104
- display_prerequisites
105
- else
106
- top_level_tasks.each { |task_name| invoke_task(task_name) }
107
- end
108
- end
109
- end
110
-
111
- # Run the given block with the thread startup and shutdown.
112
- def run_with_threads
113
- thread_pool.gather_history if options.job_stats == :history
114
-
115
- yield
116
-
117
- thread_pool.join
118
- if options.job_stats
119
- stats = thread_pool.statistics
120
- puts "Maximum active threads: #{stats[:max_active_threads]} + main"
121
- puts "Total threads in play: #{stats[:total_threads_in_play]} + main"
122
- end
123
- ThreadHistoryDisplay.new(thread_pool.history).show if
124
- options.job_stats == :history
125
- end
126
-
127
- # Add a loader to handle imported files ending in the extension
128
- # +ext+.
129
- def add_loader(ext, loader)
130
- ext = ".#{ext}" unless ext =~ /^\./
131
- @loaders[ext] = loader
132
- end
133
-
134
- # Application options from the command line
135
- def options
136
- @options ||= OpenStruct.new
137
- end
138
-
139
- # Return the thread pool used for multithreaded processing.
140
- def thread_pool # :nodoc:
141
- @thread_pool ||= ThreadPool.new(options.thread_pool_size || Rake.suggested_thread_count-1)
142
- end
143
-
144
- # internal ----------------------------------------------------------------
145
-
146
- # Invokes a task with arguments that are extracted from +task_string+
147
- def invoke_task(task_string) # :nodoc:
148
- name, args = parse_task_string(task_string)
149
- t = self[name]
150
- t.invoke(*args)
151
- end
152
-
153
- def parse_task_string(string) # :nodoc:
154
- /^([^\[]+)(?:\[(.*)\])$/ =~ string.to_s
155
-
156
- name = $1
157
- remaining_args = $2
158
-
159
- return string, [] unless name
160
- return name, [] if remaining_args.empty?
161
-
162
- args = []
163
-
164
- begin
165
- /((?:[^\\,]|\\.)*?)\s*(?:,\s*(.*))?$/ =~ remaining_args
166
-
167
- remaining_args = $2
168
- args << $1.gsub(/\\(.)/, '\1')
169
- end while remaining_args
170
-
171
- return name, args
172
- end
173
-
174
- # Provide standard exception handling for the given block.
175
- def standard_exception_handling # :nodoc:
176
- yield
177
- rescue SystemExit
178
- # Exit silently with current status
179
- raise
180
- rescue OptionParser::InvalidOption => ex
181
- $stderr.puts ex.message
182
- exit(false)
183
- rescue Exception => ex
184
- # Exit with error message
185
- display_error_message(ex)
186
- exit_because_of_exception(ex)
187
- end
188
-
189
- # Exit the program because of an unhandle exception.
190
- # (may be overridden by subclasses)
191
- def exit_because_of_exception(ex) # :nodoc:
192
- exit(false)
193
- end
194
-
195
- # Display the error message that caused the exception.
196
- def display_error_message(ex) # :nodoc:
197
- trace "#{name} aborted!"
198
- display_exception_details(ex)
199
- trace "Tasks: #{ex.chain}" if has_chain?(ex)
200
- trace "(See full trace by running task with --trace)" unless
201
- options.backtrace
202
- end
203
-
204
- def display_exception_details(ex) # :nodoc:
205
- seen = Thread.current[:rake_display_exception_details_seen] ||= []
206
- return if seen.include? ex
207
- seen << ex
208
-
209
- display_exception_message_details(ex)
210
- display_exception_backtrace(ex)
211
- display_exception_details(ex.cause) if has_cause?(ex)
212
- end
213
-
214
- def has_cause?(ex) # :nodoc:
215
- ex.respond_to?(:cause) && ex.cause
216
- end
217
-
218
- def display_exception_message_details(ex) # :nodoc:
219
- if ex.instance_of?(RuntimeError)
220
- trace ex.message
221
- else
222
- trace "#{ex.class.name}: #{ex.message}"
223
- end
224
- end
225
-
226
- def display_exception_backtrace(ex) # :nodoc:
227
- if options.backtrace
228
- trace ex.backtrace.join("\n")
229
- else
230
- trace Backtrace.collapse(ex.backtrace).join("\n")
231
- end
232
- end
233
-
234
- # Warn about deprecated usage.
235
- #
236
- # Example:
237
- # Rake.application.deprecate("import", "Rake.import", caller.first)
238
- #
239
- def deprecate(old_usage, new_usage, call_site) # :nodoc:
240
- unless options.ignore_deprecate
241
- $stderr.puts "WARNING: '#{old_usage}' is deprecated. " +
242
- "Please use '#{new_usage}' instead.\n" +
243
- " at #{call_site}"
244
- end
245
- end
246
-
247
- # Does the exception have a task invocation chain?
248
- def has_chain?(exception) # :nodoc:
249
- exception.respond_to?(:chain) && exception.chain
250
- end
251
- private :has_chain?
252
-
253
- # True if one of the files in RAKEFILES is in the current directory.
254
- # If a match is found, it is copied into @rakefile.
255
- def have_rakefile # :nodoc:
256
- @rakefiles.each do |fn|
257
- if File.exist?(fn)
258
- others = FileList.glob(fn, File::FNM_CASEFOLD)
259
- return others.size == 1 ? others.first : fn
260
- elsif fn == ''
261
- return fn
262
- end
263
- end
264
- return nil
265
- end
266
-
267
- # True if we are outputting to TTY, false otherwise
268
- def tty_output? # :nodoc:
269
- @tty_output
270
- end
271
-
272
- # Override the detected TTY output state (mostly for testing)
273
- def tty_output=(tty_output_state) # :nodoc:
274
- @tty_output = tty_output_state
275
- end
276
-
277
- # We will truncate output if we are outputting to a TTY or if we've been
278
- # given an explicit column width to honor
279
- def truncate_output? # :nodoc:
280
- tty_output? || @terminal_columns.nonzero?
281
- end
282
-
283
- # Display the tasks and comments.
284
- def display_tasks_and_comments # :nodoc:
285
- displayable_tasks = tasks.select { |t|
286
- (options.show_all_tasks || t.comment) &&
287
- t.name =~ options.show_task_pattern
288
- }
289
- case options.show_tasks
290
- when :tasks
291
- width = displayable_tasks.map { |t| t.name_with_args.length }.max || 10
292
- if truncate_output?
293
- max_column = terminal_width - name.size - width - 7
294
- else
295
- max_column = nil
296
- end
297
-
298
- displayable_tasks.each do |t|
299
- printf("#{name} %-#{width}s # %s\n",
300
- t.name_with_args,
301
- max_column ? truncate(t.comment, max_column) : t.comment)
302
- end
303
- when :describe
304
- displayable_tasks.each do |t|
305
- puts "#{name} #{t.name_with_args}"
306
- comment = t.full_comment || ""
307
- comment.split("\n").each do |line|
308
- puts " #{line}"
309
- end
310
- puts
311
- end
312
- when :lines
313
- displayable_tasks.each do |t|
314
- t.locations.each do |loc|
315
- printf "#{name} %-30s %s\n", t.name_with_args, loc
316
- end
317
- end
318
- else
319
- fail "Unknown show task mode: '#{options.show_tasks}'"
320
- end
321
- end
322
-
323
- def terminal_width # :nodoc:
324
- if @terminal_columns.nonzero?
325
- result = @terminal_columns
326
- else
327
- result = unix? ? dynamic_width : 80
328
- end
329
- (result < 10) ? 80 : result
330
- rescue
331
- 80
332
- end
333
-
334
- # Calculate the dynamic width of the
335
- def dynamic_width # :nodoc:
336
- @dynamic_width ||= (dynamic_width_stty.nonzero? || dynamic_width_tput)
337
- end
338
-
339
- def dynamic_width_stty # :nodoc:
340
- %x{stty size 2>/dev/null}.split[1].to_i
341
- end
342
-
343
- def dynamic_width_tput # :nodoc:
344
- %x{tput cols 2>/dev/null}.to_i
345
- end
346
-
347
- def unix? # :nodoc:
348
- RbConfig::CONFIG['host_os'] =~
349
- /(aix|darwin|linux|(net|free|open)bsd|cygwin|solaris|irix|hpux)/i
350
- end
351
-
352
- def windows? # :nodoc:
353
- Win32.windows?
354
- end
355
-
356
- def truncate(string, width) # :nodoc:
357
- if string.nil?
358
- ""
359
- elsif string.length <= width
360
- string
361
- else
362
- (string[0, width - 3] || "") + "..."
363
- end
364
- end
365
-
366
- # Display the tasks and prerequisites
367
- def display_prerequisites # :nodoc:
368
- tasks.each do |t|
369
- puts "#{name} #{t.name}"
370
- t.prerequisites.each { |pre| puts " #{pre}" }
371
- end
372
- end
373
-
374
- def trace(*strings) # :nodoc:
375
- options.trace_output ||= $stderr
376
- trace_on(options.trace_output, *strings)
377
- end
378
-
379
- def sort_options(options) # :nodoc:
380
- options.sort_by { |opt|
381
- opt.select { |o| o =~ /^-/ }.map { |o| o.downcase }.sort.reverse
382
- }
383
- end
384
- private :sort_options
385
-
386
- # A list of all the standard options used in rake, suitable for
387
- # passing to OptionParser.
388
- def standard_rake_options # :nodoc:
389
- sort_options(
390
- [
391
- ['--all', '-A',
392
- "Show all tasks, even uncommented ones (in combination with -T or -D)",
393
- lambda { |value|
394
- options.show_all_tasks = value
395
- }
396
- ],
397
- ['--backtrace=[OUT]',
398
- "Enable full backtrace. OUT can be stderr (default) or stdout.",
399
- lambda { |value|
400
- options.backtrace = true
401
- select_trace_output(options, 'backtrace', value)
402
- }
403
- ],
404
- ['--build-all', '-B',
405
- "Build all prerequisites, including those which are up-to-date.",
406
- lambda { |value|
407
- options.build_all = true
408
- }
409
- ],
410
- ['--comments',
411
- "Show commented tasks only",
412
- lambda { |value|
413
- options.show_all_tasks = !value
414
- }
415
- ],
416
- ['--describe', '-D [PATTERN]',
417
- "Describe the tasks (matching optional PATTERN), then exit.",
418
- lambda { |value|
419
- select_tasks_to_show(options, :describe, value)
420
- }
421
- ],
422
- ['--dry-run', '-n',
423
- "Do a dry run without executing actions.",
424
- lambda { |value|
425
- Rake.verbose(true)
426
- Rake.nowrite(true)
427
- options.dryrun = true
428
- options.trace = true
429
- }
430
- ],
431
- ['--execute', '-e CODE',
432
- "Execute some Ruby code and exit.",
433
- lambda { |value|
434
- eval(value)
435
- exit
436
- }
437
- ],
438
- ['--execute-print', '-p CODE',
439
- "Execute some Ruby code, print the result, then exit.",
440
- lambda { |value|
441
- puts eval(value)
442
- exit
443
- }
444
- ],
445
- ['--execute-continue', '-E CODE',
446
- "Execute some Ruby code, " +
447
- "then continue with normal task processing.",
448
- lambda { |value| eval(value) }
449
- ],
450
- ['--jobs', '-j [NUMBER]',
451
- "Specifies the maximum number of tasks to execute in parallel. " +
452
- "(default is number of CPU cores + 4)",
453
- lambda { |value|
454
- if value.nil? || value == ''
455
- value = FIXNUM_MAX
456
- elsif value =~ /^\d+$/
457
- value = value.to_i
458
- else
459
- value = Rake.suggested_thread_count
460
- end
461
- value = 1 if value < 1
462
- options.thread_pool_size = value - 1
463
- }
464
- ],
465
- ['--job-stats [LEVEL]',
466
- "Display job statistics. " +
467
- "LEVEL=history displays a complete job list",
468
- lambda { |value|
469
- if value =~ /^history/i
470
- options.job_stats = :history
471
- else
472
- options.job_stats = true
473
- end
474
- }
475
- ],
476
- ['--libdir', '-I LIBDIR',
477
- "Include LIBDIR in the search path for required modules.",
478
- lambda { |value| $:.push(value) }
479
- ],
480
- ['--multitask', '-m',
481
- "Treat all tasks as multitasks.",
482
- lambda { |value| options.always_multitask = true }
483
- ],
484
- ['--no-search', '--nosearch',
485
- '-N', "Do not search parent directories for the Rakefile.",
486
- lambda { |value| options.nosearch = true }
487
- ],
488
- ['--prereqs', '-P',
489
- "Display the tasks and dependencies, then exit.",
490
- lambda { |value| options.show_prereqs = true }
491
- ],
492
- ['--quiet', '-q',
493
- "Do not log messages to standard output.",
494
- lambda { |value| Rake.verbose(false) }
495
- ],
496
- ['--rakefile', '-f [FILENAME]',
497
- "Use FILENAME as the rakefile to search for.",
498
- lambda { |value|
499
- value ||= ''
500
- @rakefiles.clear
501
- @rakefiles << value
502
- }
503
- ],
504
- ['--rakelibdir', '--rakelib', '-R RAKELIBDIR',
505
- "Auto-import any .rake files in RAKELIBDIR. " +
506
- "(default is 'rakelib')",
507
- lambda { |value|
508
- options.rakelib = value.split(File::PATH_SEPARATOR)
509
- }
510
- ],
511
- ['--require', '-r MODULE',
512
- "Require MODULE before executing rakefile.",
513
- lambda { |value|
514
- begin
515
- require value
516
- rescue LoadError => ex
517
- begin
518
- rake_require value
519
- rescue LoadError
520
- raise ex
521
- end
522
- end
523
- }
524
- ],
525
- ['--rules',
526
- "Trace the rules resolution.",
527
- lambda { |value| options.trace_rules = true }
528
- ],
529
- ['--silent', '-s',
530
- "Like --quiet, but also suppresses the " +
531
- "'in directory' announcement.",
532
- lambda { |value|
533
- Rake.verbose(false)
534
- options.silent = true
535
- }
536
- ],
537
- ['--suppress-backtrace PATTERN',
538
- "Suppress backtrace lines matching regexp PATTERN. " +
539
- "Ignored if --trace is on.",
540
- lambda { |value|
541
- options.suppress_backtrace_pattern = Regexp.new(value)
542
- }
543
- ],
544
- ['--system', '-g',
545
- "Using system wide (global) rakefiles " +
546
- "(usually '~/.rake/*.rake').",
547
- lambda { |value| options.load_system = true }
548
- ],
549
- ['--no-system', '--nosystem', '-G',
550
- "Use standard project Rakefile search paths, " +
551
- "ignore system wide rakefiles.",
552
- lambda { |value| options.ignore_system = true }
553
- ],
554
- ['--tasks', '-T [PATTERN]',
555
- "Display the tasks (matching optional PATTERN) " +
556
- "with descriptions, then exit.",
557
- lambda { |value|
558
- select_tasks_to_show(options, :tasks, value)
559
- }
560
- ],
561
- ['--trace=[OUT]', '-t',
562
- "Turn on invoke/execute tracing, enable full backtrace. " +
563
- "OUT can be stderr (default) or stdout.",
564
- lambda { |value|
565
- options.trace = true
566
- options.backtrace = true
567
- select_trace_output(options, 'trace', value)
568
- Rake.verbose(true)
569
- }
570
- ],
571
- ['--verbose', '-v',
572
- "Log message to standard output.",
573
- lambda { |value| Rake.verbose(true) }
574
- ],
575
- ['--version', '-V',
576
- "Display the program version.",
577
- lambda { |value|
578
- puts "rake, version #{RAKEVERSION}"
579
- exit
580
- }
581
- ],
582
- ['--where', '-W [PATTERN]',
583
- "Describe the tasks (matching optional PATTERN), then exit.",
584
- lambda { |value|
585
- select_tasks_to_show(options, :lines, value)
586
- options.show_all_tasks = true
587
- }
588
- ],
589
- ['--no-deprecation-warnings', '-X',
590
- "Disable the deprecation warnings.",
591
- lambda { |value|
592
- options.ignore_deprecate = true
593
- }
594
- ],
595
- ])
596
- end
597
-
598
- def select_tasks_to_show(options, show_tasks, value) # :nodoc:
599
- options.show_tasks = show_tasks
600
- options.show_task_pattern = Regexp.new(value || '')
601
- Rake::TaskManager.record_task_metadata = true
602
- end
603
- private :select_tasks_to_show
604
-
605
- def select_trace_output(options, trace_option, value) # :nodoc:
606
- value = value.strip unless value.nil?
607
- case value
608
- when 'stdout'
609
- options.trace_output = $stdout
610
- when 'stderr', nil
611
- options.trace_output = $stderr
612
- else
613
- fail CommandLineOptionError,
614
- "Unrecognized --#{trace_option} option '#{value}'"
615
- end
616
- end
617
- private :select_trace_output
618
-
619
- # Read and handle the command line options.
620
- def handle_options # :nodoc:
621
- options.rakelib = ['rakelib']
622
- options.trace_output = $stderr
623
-
624
- OptionParser.new do |opts|
625
- opts.banner = "#{Rake.application.name} [-f rakefile] {options} targets..."
626
- opts.separator ""
627
- opts.separator "Options are ..."
628
-
629
- opts.on_tail("-h", "--help", "-H", "Display this help message.") do
630
- puts opts
631
- exit
632
- end
633
-
634
- standard_rake_options.each { |args| opts.on(*args) }
635
- opts.environment('RAKEOPT')
636
- end.parse!
637
- end
638
-
639
- # Similar to the regular Ruby +require+ command, but will check
640
- # for *.rake files in addition to *.rb files.
641
- def rake_require(file_name, paths=$LOAD_PATH, loaded=$") # :nodoc:
642
- fn = file_name + ".rake"
643
- return false if loaded.include?(fn)
644
- paths.each do |path|
645
- full_path = File.join(path, fn)
646
- if File.exist?(full_path)
647
- Rake.load_rakefile(full_path)
648
- loaded << fn
649
- return true
650
- end
651
- end
652
- fail LoadError, "Can't find #{file_name}"
653
- end
654
-
655
- def find_rakefile_location # :nodoc:
656
- here = Dir.pwd
657
- until (fn = have_rakefile)
658
- Dir.chdir("..")
659
- return nil if Dir.pwd == here || options.nosearch
660
- here = Dir.pwd
661
- end
662
- [fn, here]
663
- ensure
664
- Dir.chdir(Rake.original_dir)
665
- end
666
-
667
- def print_rakefile_directory(location) # :nodoc:
668
- $stderr.puts "(in #{Dir.pwd})" unless
669
- options.silent or original_dir == location
670
- end
671
-
672
- def raw_load_rakefile # :nodoc:
673
- rakefile, location = find_rakefile_location
674
- if (! options.ignore_system) &&
675
- (options.load_system || rakefile.nil?) &&
676
- system_dir && File.directory?(system_dir)
677
- print_rakefile_directory(location)
678
- glob("#{system_dir}/*.rake") do |name|
679
- add_import name
680
- end
681
- else
682
- fail "No Rakefile found (looking for: #{@rakefiles.join(', ')})" if
683
- rakefile.nil?
684
- @rakefile = rakefile
685
- Dir.chdir(location)
686
- print_rakefile_directory(location)
687
- Rake.load_rakefile(File.expand_path(@rakefile)) if
688
- @rakefile && @rakefile != ''
689
- options.rakelib.each do |rlib|
690
- glob("#{rlib}/*.rake") do |name|
691
- add_import name
692
- end
693
- end
694
- end
695
- load_imports
696
- end
697
-
698
- def glob(path, &block) # :nodoc:
699
- FileList.glob(path.gsub("\\", '/')).each(&block)
700
- end
701
- private :glob
702
-
703
- # The directory path containing the system wide rakefiles.
704
- def system_dir # :nodoc:
705
- @system_dir ||=
706
- begin
707
- if ENV['RAKE_SYSTEM']
708
- ENV['RAKE_SYSTEM']
709
- else
710
- standard_system_dir
711
- end
712
- end
713
- end
714
-
715
- # The standard directory containing system wide rake files.
716
- if Win32.windows?
717
- def standard_system_dir #:nodoc:
718
- Win32.win32_system_dir
719
- end
720
- else
721
- def standard_system_dir #:nodoc:
722
- File.join(File.expand_path('~'), '.rake')
723
- end
724
- end
725
- private :standard_system_dir
726
-
727
- # Collect the list of tasks on the command line. If no tasks are
728
- # given, return a list containing only the default task.
729
- # Environmental assignments are processed at this time as well.
730
- def collect_command_line_tasks # :nodoc:
731
- @top_level_tasks = []
732
- ARGV.each do |arg|
733
- if arg =~ /^(\w+)=(.*)$/m
734
- ENV[$1] = $2
735
- else
736
- @top_level_tasks << arg unless arg =~ /^-/
737
- end
738
- end
739
- @top_level_tasks.push(default_task_name) if @top_level_tasks.empty?
740
- end
741
-
742
- # Default task name ("default").
743
- # (May be overridden by subclasses)
744
- def default_task_name # :nodoc:
745
- "default"
746
- end
747
-
748
- # Add a file to the list of files to be imported.
749
- def add_import(fn) # :nodoc:
750
- @pending_imports << fn
751
- end
752
-
753
- # Load the pending list of imported files.
754
- def load_imports # :nodoc:
755
- while fn = @pending_imports.shift
756
- next if @imported.member?(fn)
757
- fn_task = lookup(fn) and fn_task.invoke
758
- ext = File.extname(fn)
759
- loader = @loaders[ext] || @default_loader
760
- loader.load(fn)
761
- if fn_task = lookup(fn) and fn_task.needed?
762
- fn_task.reenable
763
- fn_task.invoke
764
- loader.load(fn)
765
- end
766
- @imported << fn
767
- end
768
- end
769
-
770
- def rakefile_location(backtrace=caller) # :nodoc:
771
- backtrace.map { |t| t[/([^:]+):/, 1] }
772
-
773
- re = /^#{@rakefile}$/
774
- re = /#{re.source}/i if windows?
775
-
776
- backtrace.find { |str| str =~ re } || ''
777
- end
778
-
779
- private
780
- FIXNUM_MAX = (2**(0.size * 8 - 2) - 1) # :nodoc:
781
-
782
- end
783
- end