    # File lib/facets/more/minitar.rb, line 885
        def pack_file(entry, outputter) #:yields action, name, stats:
          outputter = outputter.tar if outputter.kind_of?(Archive::Tar::Minitar::Output)

          stats = {}

          if entry.kind_of?(Hash)
            name = entry[:name]

            entry.each { |kk, vv| stats[kk] = vv unless vv.nil? }
          else
            name = entry
          end

          name = name.sub(%r{\./}, '')
          stat = File.stat(name)
          stats[:mode]   ||= stat.mode
          stats[:mtime]  ||= stat.mtime
          stats[:size]   = stat.size

          if RUBY_PLATFORM =~ /win32/
            stats[:uid]  = nil
            stats[:gid]  = nil
          else
            stats[:uid]  ||= stat.uid
            stats[:gid]  ||= stat.gid
          end

          case
          when File.file?(name)
            outputter.add_file_simple(name, stats) do |os|
              stats[:current] = 0
              yield :file_start, name, stats if block_given?
              File.open(name, "rb") do |ff|
                until ff.eof?
                  stats[:currinc] = os.write(ff.read(4096))
                  stats[:current] += stats[:currinc]
                  yield :file_progress, name, stats if block_given?
                end
              end
              yield :file_done, name, stats if block_given?
            end
          when dir?(name)
            yield :dir, name, stats if block_given?
            outputter.mkdir(name, stats)
          else
            raise "Don't yet know how to pack this type of file."
          end
        end