-
Notifications
You must be signed in to change notification settings - Fork 553
Closed
Description
Hello.
When using the file_collision
method without block, displaying help will show commands (diff,merge) that should not be supported.
The reason for this behavior is that the branching is done by block_given?
in the file_collision
method, but not in file_collision_help
.
diff,merge works only when block
is passed.
Line 287 in 376e141
options = block_given? ? "[Ynaqdhm]" : "[Ynaqh]" |
Lines 308 to 315 in 376e141
when is?(:diff) | |
show_diff(destination, yield) if block_given? | |
say "Retrying..." | |
when is?(:merge) | |
if block_given? && !merge_tool.empty? | |
merge(destination, yield) | |
return nil | |
end |
Lines 387 to 397 in 376e141
def file_collision_help #:nodoc: | |
<<-HELP | |
Y - yes, overwrite | |
n - no, do not overwrite | |
a - all, overwrite this and all others | |
q - quit, abort | |
d - diff, show the differences between the old and the new | |
h - help, show this help | |
m - merge, run merge tool | |
HELP | |
end |
Shouldn't the behavior be branched in the file_collision_help
method as well, so that unsupported commands (diff,merge) are not displayed?
I checked with thor v1.2.1 and current main branch.
A working example is below:
# thor.rb
require "thor"
class MyCLI < Thor
desc "hello", "say hello"
def hello
file_path = "./foo.txt"
if !File.exist?(file_path)
File.write(file_path, "first write", mode: "w")
return
end
content = "file_collision with no block"
puts "=== #{content}"
if file_collision(file_path)
File.write(file_path, content, mode: "w")
end
content = "file_collision with block"
puts "=== #{content}"
if file_collision(file_path) { content }
File.write(file_path, content, mode: "w")
end
end
end
MyCLI.start(ARGV)
$ ruby ./thor.rb hello
=== file_collision with no block
Overwrite ./foo.txt? (enter "h" for help) [Ynaqh] h
Y - yes, overwrite
n - no, do not overwrite
a - all, overwrite this and all others
q - quit, abort
d - diff, show the differences between the old and the new
h - help, show this help
m - merge, run merge tool
Overwrite ./foo.txt? (enter "h" for help) [Ynaqh] y
=== file_collision with block
Overwrite ./foo.txt? (enter "h" for help) [Ynaqdhm] h
Y - yes, overwrite
n - no, do not overwrite
a - all, overwrite this and all others
q - quit, abort
d - diff, show the differences between the old and the new
h - help, show this help
m - merge, run merge tool
Overwrite ./foo.txt? (enter "h" for help) [Ynaqdhm] d
- file_collision with no block
+ file_collision with block
Retrying...
Overwrite ./foo.txt? (enter "h" for help) [Ynaqdhm] y
Thank you.
Metadata
Metadata
Assignees
Labels
No labels