def download(target, options = nil)
case target
when Rake::Task
download target.name, options
when String
modified = File.stat(target).mtime if File.exist?(target)
temp = Tempfile.new(File.basename(target))
temp.binmode
read({:progress=>verbose}.merge(options || {}).merge(:modified=>modified)) { |chunk| temp.write chunk }
temp.close
mkpath File.dirname(target)
mv temp.path, target
when File
read({:progress=>verbose}.merge(options || {}).merge(:modified=>target.mtime)) { |chunk| target.write chunk }
target.flush
else
raise ArgumentError, 'Expecting a target that is either a file name (string, task) or object that responds to write (file, pipe).' unless target.respond_to?(:write)
read({:progress=>verbose}.merge(options || {})) { |chunk| target.write chunk }
target.flush
end
end