class Thor::Shell::Basic

def file_collision(destination)


block:: an optional block that returns the value to be used in diff and merge
destination:: the destination file to solve conflicts
==== Parameters

response as the content for the diff.
overwritten and false otherwise. If a block is given, it uses the block
Deals with file collision and returns true if the file should be
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
    end
  end
end