Changes for version 1.0

  • Implement a large shared buffer; alleviate the need to copy tar file headers and file contents from one place to another when reading and writing
  • Allow reading from the filesystem and writing to tar streams in large blocks, thanks to a large shared buffer; no more reading and writing in blocks of 512 bytes at a time, which becomes rather slow for very large files
  • Remove the need to memcpy() a new file header buffer for each file
  • Allow the caller to specify a blocking factor in the constructor Archive::Tar::Builder->new(), in multiples of 512 bytes
  • Introduce a new Archive::Tar::Builder usage pattern; instead of allowing caller to add "members" to the archive, new archive members are written on-the-fly with the archive() and archive_as() methods, which are much friendlier to making tarball streams from arbitrary parts of a filesystem
  • Add 'flush()' method to Archive::Tar::Builder; allow caller to flush buffers at the end of an archive
  • Add 'finish()' method to Archive::Tar::Builder; allow caller to flush buffers and die() if any errors are encountered at the end of an archive
  • Use breadth-first, not depth-first, recursion in src/b_find.c, to prevent loss of items upon extraction
  • Add a 'follow_symlinks' option to Archive::Tar::Builder->new()
  • Resolve an issue wherein certain long paths are split incorrectly
  • Strip any leading slashes from paths generated while archiving
  • As a bonus, much of the codebase has been simplified due to the unified usage of a large shared buffer

Modules

Stream tarball data to a file handle
Make it possible to organize this project in this manner using ExtUtils::MakeMaker

Provides

in lib/Archive/Tar/Builder/UserCache.pm