lib/berkshelf/core_ext/file_utils.rb
require "fileutils" unless defined?(FileUtils)
module FileUtils
class << self
alias_method :old_mv, :mv
# If we encounter Errno::EACCES, which seems to happen occasionally on Windows,
# try to copy and delete the file instead of moving it.
#
# @see https://github.com/berkshelf/berkshelf/issues/140
# @see http://www.ruby-forum.com/topic/1044813
#
# It's also possible that we get Errno::ENOENT if we try to `mv` a relative
# symlink on Linux
# @see {FileUtils::mv}
def mv(src, dest, options = {})
old_mv(src, dest, **options)
rescue Errno::EACCES, Errno::ENOENT
options.delete(:force) if options.key?(:force)
FileUtils.cp_r(src, dest, **options)
FileUtils.rm_rf(src)
end
end
end