CocoaPods / cocoapods-downloader

A small library that provides downloaders for various source types (HTTP/SVN/Git/Mercurial)
MIT License
84 stars 72 forks source link

Faulty extraction in remote_file.rb if compressed file contains only .framework #84

Open 3sands opened 5 years ago

3sands commented 5 years ago

I'm trying to download via http a pod that is uploaded as a tarball with only a .framework as its contents. Right now, because the .framework is a technically just a directory, the cocoapods downloader will move the contents of the .framework without consideration of the structure. Specifically, I'm looking at lines 106-122 in remote_file.rb.

# If the archive is a tarball and it only contained a folder, move its
# contents to the target (#727)
#
if should_flatten?
  contents = target_path.children
  contents.delete(target_path + @filename)
  entry = contents.first
  if contents.count == 1 && entry.directory?
    tmp_entry = entry.sub_ext("#{entry.extname}.tmp")
    begin
      FileUtils.move(entry, tmp_entry)
      FileUtils.move(tmp_entry.children, target_path)
    ensure
      FileUtils.remove_entry(tmp_entry)
    end
  end
end

If the conditional is changed to if contents.count == 1 && entry.directory? && File.extname(entry) != '.framework', I am able to successfully pod install. Without it, the named pod folder in the pods directory of the project is empty.

amorde commented 5 years ago

This should probably be expanded to handle any "directory" that should remain a directory, such as .app, .framework, .ipa, .xcappdata, etc.

3sands commented 5 years ago

I added a preliminary PR to fix the issue and am available to make any corrections or edits.