Adds option -C to allow archives created with ptar to be uploaded to PAUSE in case of Windows or world +w permissions on unix.
When you pass a filehandle to Archive::Tar::write() or create_archive(), it closes the filehandle after writing to it. I think it makes more sense not to close a handle that A::T didn't open, since the application may need to write additional data to it. (Consider sockets, package files containing encapsulated tar archives, etc.)
$ perl -e 'use Archive::Tar; open(PKG, ">mypkg") or die "open: $!"; my $tar = Archive::Tar->new; $tar->add_data("foo.txt","hello"); $tar->write(\*PKG); print PKG "more data" or die "print: $!";' print: Bad file descriptor at -e line 1.
Subject: $@ not cleaned up after eval
This section of code seems to be trying to use future functionality not yet present in IO::Zlib (tell). I was chasing another bug and getting very confused by this population of $@. Could I request you cleanup $@ if you expect and/or don't care about failure from this eval?
Archive::Tar generates file headers with space padded numbers for size, mtime and checksum. This format is incompatible with some versions of the busybox implementation of tar (I am using 1.13.2), which requires 0 padded numbers (despite comments in the source that say otherwise).
I've included a patch that adds a control flag that enables zero padded numbers in the header. It passes all tests with ActiveState Perl 5.8.8 on WinXP.
As seen in [rt.cpan.org #48879], although the recommended way of retrieving the last error is to use an instance method ($tar->error), the returned value is effectively global: an error in one Archive::Tar instance changes the error string of another instance.
This change separates the error strings from each other while keeping the (deprecated) global value of $Archive::Tar::error pointing to the last error regardless of its instance.
We also support calling error() as a class method (Archive::Tar->error). In this case it returns the global value, which matches the old behaviour.
http://www.nntp.perl.org/group/perl.cpan.testers/2008/08/msg2083310.html
Mailed the author to find a less fragile solution, but for now we require all the individual modules, and all at the same version.
A::T didn't always handle filenames that evaluated to false (like '0') gracefully. This patch adds a few 'or defined' check to the A::T codebase and a test to ensure filenames like '0' are handeled correctly. - Apply #28407: Unicode and Archive::Tar - documentation patch as
FAQ patch
FAQ patch - Following a report from rgs that A::T 1.31 doesn't play nicely
with -Dmksymlinks under perl core, rewrite the symlink logic in A::T::File->new to continue building an object when reading a symlink fails, rather than refusing to read on a symlink (which is obviously wrong) - Quell warnings when a gid is not resolvable to a group name
the binary files; this was done for core integration, but the new uupacktool.pl script means we dont have to do this anymore Apply core perl Change 30997 by rgs@stcosmo on 2007/04/20 15:03:57 - Address: #27124: Unneeded warning sent when checking for file
inclusion containsfile() will no longer warn to STDERR when a file is not contained in an archive and $WARN is set to 'true'. - Address #26492: Dangling symlinks not preserved: Archive::Tar used
to complain about dangling symlinks, unlike standard gnu tar, which would add them silently. This patch brings A::T's behaviour in line with gnu tar - Minor pod fixes
Cleanup Archive-Tar temporary test files - address #17985: INSTALLDIRS needs to be 'perl' for >= perl-5.9.3 - address #18296: Archive::Tar 1.29 PATCH for VMS to fix test case
failure in 99_pod.t (it's actually a File::Find bug, but this patch works around that) - address: #18720 ([PATCH] Archive::Tar creates POSIX style tar files
unnecessarily and by default, leading to compatibility problems particularly with WinZip.) patch rejected, docpatch added with FAQ and SEE ALSO - apply performance patch from #20399 to enable the user to
avoid repeated calls to cwd() if desired.
testing, rather than bundling them - make extract* methods accept a::t::file objects too - address #17624: Unnecessary calls to cwd() -- cwd() is only
called when needed - address #17935: Archive::Tar::write('file_name') should close
or return file handle. -- filehandles are now closed - address #17395: [PATCH] allow extract() to select files by
regexes or substrings; patch did not get integrated, but a FAQ on how to achieve this was added to the FAQ section - address #17310 (Archive-Tar 1.26_01 not tolerant to Archives
with Garbage) -- Garbage protection should be much improved now
which fixes a failure in Archive::Tar tests when perl is built with -Dmksymlinks - integrate Change 26870 by craigb@craigb-brianor on
2006/01/17 04:03:01 holding vms specific patches - mention 'full_name' as property type to list_archive - address #14922 -- unable to reproduce, but add a test
case to make sure the issue doesn't occur - apply the docpatch provided by:
#15935: File type constants are not documented - document our lack of support for stringified archives and
compressed archives opened to a non-io-zlib fh - 1.27 was skipped due to PAUSE issues
of the makefile.pl, meaning it didn't get instaleld by default.
the tests -- code may need some extra work to be reliable (#12678) - Add faq about accessing 'tar.Z' files, as provided by Paul Marquess - Add a warning if the read() call from new() fails to return data - Address #13636, where heuristics were 'upgrading' a file to a
directory if the file had an @LongLink entry, and the shortened filename ended in a '/'. - Add ptardiff program as suggested by KWILLIAMS (#13658)
extra directory upon extract (bug #11342) - Added support for 'perlio' (available for perl5.8 and up).
See the Archive::Tar documentation for details
This release holds only bugfixes.
- Make list_files() also return full_path() rather than name(),
as that would ignore the prefix field. This was found to break PPM (bug #8537)
This release holds only bugfixes.
- Make the size of symlinks be 0 in tar headers, so the next entry
is not interpreted as contents of the symlink (bug #7937) - Strip high bits from the mode of the file, as they are stored
differently in the tar header
- Make Archive::Tar be kinder to archives that contain garbage,
proceeding anyway as long as that's possible.
This release holds mostly bugfixes, in the form of a rewrite of the handling of the 'prefix' header field. - Rewrote 02_methods.t to be more independant - Rewrote the way 'prefix' headers are dealt with - Require IO::String now to do archive stringification - Add new method 'full_path' to A::T::Item objects
to users - On tar read errors, binary chunks are no longer dumped to STDOUT,
but instead the error offset is reported
This release holds some bugfixes and also the return of bin/ptar - Make new() comply with the documentation and return undef on
a read() failure.
- Re-adds bin/ptar, which disappeared from this distribution after
0.22 (sorry about that).
- Makes 'IO::Zlib' a default prerequisite. You can still disable
this by supplying the -n option to 'perl Makefile.PL'.
This release holds some bugfixes and extra tests over the 1.07 release:
- Fix a file renaming bug that forgot to carry over path info
- Fix a bug where adding dirs on win32 gave 'permission denied'
- Fix some documentation typos
- Add extra tests explicilty for Archive::Tar::File
- Move completely from FileHandle to IO::File
This release holds some bugfixes over the 1.06 release: - Quell some annoying warnings about binmode on unopened filehandles - Add tests for binary files included in a tarball
This release holds some bugfixes and new features over the 1.05 release. - The chown() code somehow didn't make it into the 1.05 release - Patch gethandle() to treat all IO::File handles as binary.
This should make win32 users happy
New feature added:
- A method called 'contains_file' that will tell you if a certain file
is already in the archive.
This release holds some bugfixes and new features over the 1.04 release. - The Test::Harness that came with perl 5.6.0 was buggy, require
a higher version in the Makefile.PL - Add a global variable $CHOWN that controls whether Archive::Tar
should attempt to chown() files or not when it can.
This release hold a bugfix over the 1.03 release: - NULL-byte padding was done also on files that had no real content,
like symlinks, thus ending up with a number of bytes not dividable by 512.
This release holds some bugfixes over the 1.02 release, mainly these: - Always do a readlink on the full path, never just the file - Make Archive::Tar write proper headers when dealing with symlinks
For this $Archive::Tar::FOLLOW_SYMLINKS is introduced
This release holds some bugfixes over the 1.01 release, mainly these:
- Silly thinko fix in File.pm
- Quell some warnings if files are empty
- The cache of previously added files was not being emptied
Also, some new features are added:
This release holds some bugfixes over the 1.00 release, mainly these:
Some new features/changes:
This release marks the new development track as 'stable'. Version got upped to '1.00'. Not many changes, merely lots of successful test reports constitute this version. However, a tiny fix regarding the reserved string 'VERSION' has been applied, as well as a few more FAQ entries have been added.
This release only entails a bug fix on 0.99_05 -- C<extract_archive> was dealing wrongly with special files such as hardlinks etc. This is now fixed.
Apparently windows has some issues with long path names. This version introduces an adapted test suite for Win32 machines.
Make Archive::Tar work happily on perl 5.005_03
This release only has bug fixes on 0.99_02.
Fixed handling of long file names when extracting with C<extract_archive>
Fixed handling of prefixes in tar headers that contain regex metacharacters.
Fixed a few spurious warnings about comparing non-numbers.
Expanded the test cases accordingly.
Added options to be passed to read, namely:
Implemented the '././@LongLink' support, which is GNU's way of dealing with filenames that are longer than 255 chars.
Added a global variable $WARN which controls whether warnings get printed or just stored.
Fixed a few small bugs that considered files named '0' or '' to not really be files and refuse to package them.
Total rewrite from the ground up. Removed as many as the nasty bits (no pun intended) as possible and tucked them away. No code from the old distribution remains.
Cleaned up the API, introduced clean error handling and just generally removed a lot of cruft.
Note that Archive::Tar now requires perl version 5.005_03 or higher to run.
Introduced 2 new submodules:
Archive::Tar::Constant
Simply holds all constants, like block length, tar headers etc
Archive::Tar::File
Object class for all files in a tar archive, to make for easier manipulataion of the archive in-memory. See perldoc Archive::Tar::File after installation.
Added a few features:
write() now takes an optional 3rd paramater (prefix) which will allow
you to tuck away all files in that sub directory.
rename() is introduced, allowing for easy renaming of files in the archive.
get_files() returns a file of all Archive::Tar::File objects in the current read-in archive.
Bundled 0.072 and 0.22 to be able to work on Win32 and non-Win32 platforms. Since the previous version is almost 3 years old, bundling seemed like the quickest way to get a working solution again.
Archive::Tar now transparently Does The Right Thing depending what platform you are on -- Win32 users, read the Archive::Tar::Win32 documentation!
I also suppose this makes me the new maintainer...
New class methods create_archive, extract_archive & list_archive.
Archive::Tar no longer keeps the entire archive in memory after reading it. This results in a major reduction in memory consumption.
Added suport for character & block special files. These files are currently created using mknod, so they will only be available on UNIX platforms.
See the file ChangeLog for more complete details.
Fixed (again) the MacOS support and included alpha support for block/character special files as well as improving symlink handling.
NOTE: Archive::Tar is undergoing major work to extend the interface and lower memory consumpton. Any changes to the existing interface should be extensions only.
Fixes a problem with systems that don't like open files being deleted. It also has an explicit copyright notice so folks like Debian can redistribute it in peace, and an new custodial maintainer due to Calle's suffering Carpal Tunnel Syndrome.
Get better soon, Calle!
It fixes a bunch of bugs, implements POSIX-style long pathnames and adds a couple of useful methods. It has also been verified to work on Win32.
This version also includes a small tar-lookalike program, ptar. There is no documentation beyond a usage message, but if you've ever used at Unix-style tar program it should be very familiar.