Method: Thor::Shell::Basic#file_collision

Defined in:
lib/thor/shell/basic.rb

#file_collision(destination) ⇒ Object

Deals with file collision and returns true if the file should be overwritten and false otherwise. If a block is given, it uses the block response as the content for the diff.

Parameters

destination<String>

the destination file to solve conflicts

block<Proc>

an optional block that returns the value to be used in diff and merge



207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
# File 'lib/thor/shell/basic.rb', line 207

def file_collision(destination)
  return true if @always_force
  options = block_given? ? "[Ynaqdhm]" : "[Ynaqh]"

  loop do
    answer = ask(
      %[Overwrite #{destination}? (enter "h" for help) #{options}],
      add_to_history: false
    )

    case answer
    when nil
      say ""
      return true
    when is?(:yes), is?(:force), ""
      return true
    when is?(:no), is?(:skip)
      return false
    when is?(:always)
      return @always_force = true
    when is?(:quit)
      say "Aborting..."
      raise SystemExit
    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

      say "Please specify merge tool to `THOR_MERGE` env."
    else
      say file_collision_help(block_given?)
    end
  end
end