# File lib/mixlib/archive/tar.rb, line 72
      def create(files, gzip: false)
        tgt_dir = File.dirname(archive)
        target = Tempfile.new(File.basename(archive), tgt_dir)

        Gem::Package::TarWriter.new(target) do |tar|
          files.each do |fn|
            mode = File.stat(fn).mode
            if File.symlink?(fn)
              target = File.readlink(fn)
              tar.add_symlink(fn, target, mode)
            elsif File.directory?(fn)
              tar.mkdir(fn, mode)
            elsif File.file?(fn)
              file = File.open(fn, "rb")
              tar.add_file(fn, mode) do |io|
                io.write(file.read)
              end
              file.close
            end
          end
        end

        target.close
        if gzip
          Zlib::GzipWriter.open(archive, Zlib::BEST_COMPRESSION) do |gz|
            gz.mtime = File.mtime(target.path)
            gz.orig_name = File.basename(archive)
            File.open(target.path) do |file|
              while (chunk = file.read(16 * 1024))
                gz.write(chunk)
              end
            end
          end
        else
          FileUtils.mv(target.path, archive)
        end
      ensure
        target.close unless target.closed?
      end