Version 1.8

    * open() and fstat() files before writing headers, to ensure size indicated
      is the same as size of file archived; the following technique is used to
      achieve this:

        1. open() each inode with O_NOFOLLOW, indiscriminately.  If open()
           returns -1 and sets errno to ELOOP, then use lstat() to obtain
           symlink inode information.

        2. If open() succeeds, use fstat() subsequently, keeping the fd open
           for the duration of the file archival.

    * Fix a bug in b_find() wherein some error recovery code tried to
      destroy the same object twice, potentially

Version 1.7

    * Fix a variety of unit tests which depended on GNU tar availability as
      indicated by CPANTS; make provisions for BSD tars as well

    * Make t/lib-Archive-Tar-Builder_bitfile.t only run when TEST_BIGFILE=1 is
      specified

    * Don't produce archives with mismatched file sizes

    * Implement 'gnu_extensions' flag to make support for arbitrarily long
      filenames an explicit feature to enable, so as to help end developers
      avoid producing archives that cannot be extracted by their native tar

    * Set $! to ENAMETOOLONG when long filenames are detected and the
      aforementioned 'gnu_extensions' flag is not specified

    * Set $! to EINVAL when truncated files are detected

    * Fix an issue in b_error_set() wherein the message actually got clobbered
      due to a missing 'return' statement

    * Retool $builder->archive_as() to display error names for archive members,
      rather than their original filenames, in appropriate circumstances

Version 1.6

    * Avoid stat() calls on files excluded from archive

Version 1.5

    * Correct handling of files between 4 GiB & 8 GiB, inclusive

Version 1.4

    * Do not croak() on a warning

Version 1.3

    * Remove 2 GB file limit

Version 1.2

    * Correct handling of member names in LongLink blocks

    * Correct handling of filenames between 100 and 156 characters

Version 1.1

    * Correct suffix length calculation for directories, so directory path
      is set to archive_as value instead of absolutely path.

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

Version 0.9

    * Resolve issues where files of certain sizes will cause no header value to
      be written in the size field

    * Ensure files >=8GB receive a proper base256-encoded size header field
      value

    * Implement a "ignore_errors" option which causes Archive::Tar::Builder to
      not die() at the end of archiving a stream wherein non-fatal errors were
      encountered

Version 0.8

    * Implemented an error handling mechanism which allows the presentation of
      non-fatal warnings to the caller, but also causes Archive::Tar::Builder
      to exit cleanly in otherwise fatal conditions; simple permissions issues
      while building an archive will no longer stop the stream

    * Allow caller to suppress warn()ings when archiving files

Version 0.7

    * No functional changes; drop unnecessary dependencies from PREREQ_PM in
      Makefile.PL

Version 0.6

    * No functional changes; adds build and test support for Perl 5.6 toolchains
      with the help of a variety of very ugly hacks in various places in unit
      test t/lib-Archive-Tar-Builder.t

Version 0.5

    * Feature-for-feature reimplementation in C with a small XS layer

    * Remove option of "GNU extensions"; GNU extensions are now always available
      and use is implied

    * Slightly better adherence to POSIX ustar header format, such as with ustar
      header magic

Version 0.4

    * Resolve an issue of build-time modules in mk/ being picked up by
      CPAN's indexer, resulting in an "UNAUTHORIZED RELEASE" warning, by
      declaring the PMLIBDIRS value in Makefile.PL to include only 'lib', and
      using a trick (thanks RURBAN!) to cause the PAUSE indexer to not pick up
      the package declarations in the files in mk/

Version 0.3

    Initial release
