File tree Expand file tree Collapse file tree 2 files changed +28
-6
lines changed Expand file tree Collapse file tree 2 files changed +28
-6
lines changed Original file line number Diff line number Diff line change @@ -155,19 +155,21 @@ def thread_pool # :nodoc:
155
155
156
156
# Invokes a task with arguments that are extracted from +task_string+
157
157
def invoke_task ( task_string ) # :nodoc:
158
- name , args = parse_task_string ( task_string )
158
+ name , args , safe_call = parse_task_string ( task_string )
159
+ return if safe_call && !lookup ( name )
160
+
159
161
t = self [ name ]
160
162
t . invoke ( *args )
161
163
end
162
164
163
165
def parse_task_string ( string ) # :nodoc:
164
- /^([^\[ ]+)(?:\[ (.*)\] )$/ =~ string . to_s
165
-
166
+ /^([^\[ ]+)(?:\[ (.*)\] )(\? )?$/ =~ string . to_s
166
167
name = $1
167
168
remaining_args = $2
169
+ safe_call = $~ && !!$~. begin ( 3 )
168
170
169
- return string , [ ] unless name
170
- return name , [ ] if remaining_args . empty?
171
+ return string , [ ] , safe_call unless name
172
+ return name , [ ] , safe_call if remaining_args . empty?
171
173
172
174
args = [ ]
173
175
@@ -178,7 +180,7 @@ def parse_task_string(string) # :nodoc:
178
180
args << $1. gsub ( /\\ (.)/ , '\1' )
179
181
end while remaining_args
180
182
181
- return name , args
183
+ return name , args , safe_call
182
184
end
183
185
184
186
# Provide standard exception handling for the given block.
Original file line number Diff line number Diff line change @@ -439,6 +439,26 @@ def test_good_run
439
439
assert_equal "DEFAULT\n " , out
440
440
end
441
441
442
+ def test_safe_run
443
+ ran = false
444
+
445
+ @app . options . silent = true
446
+
447
+ @app . instance_eval do
448
+ intern ( Rake ::Task , "default" ) . enhance { ran = true }
449
+ end
450
+
451
+ rakefile_default
452
+
453
+ out , err = capture_io do
454
+ @app . run %w[ --rakelib="" default missing? ]
455
+ end
456
+
457
+ assert ran
458
+ assert_empty err
459
+ assert_equal "DEFAULT\n " , out
460
+ end
461
+
442
462
def test_display_task_run
443
463
ran = false
444
464
@app . last_description = "COMMENT"
You can’t perform that action at this time.
0 commit comments