Releases: JuliaIO/Tar.jl
v1.9.2
Tar v1.9.2
Closed issues:
- permission docs are inaccurate (#38)
- Mismatched tree hash (#100)
- Unsupported entry type: hardlink (#101)
- Not recording non-empty directories is problematic (#103)
Merged pull requests:
- extract: normalize tarball modes (like git) (#99) (@StefanKarpinski)
- Support for extracting hard links (#102) (@StefanKarpinski)
- miscellaneous fixes and improvements (#104) (@StefanKarpinski)
- fix bugs handling unusual tarballs with directory after contents (#105) (@StefanKarpinski)
- Tar.create: include entries for non-empty directories (#106) (@StefanKarpinski)
- tests: better tests for tarball truncation (#107) (@StefanKarpinski)
v1.9.1
Tar v1.9.1
Closed issues:
- Extracting error (#94)
Merged pull requests:
- macOS: apparently Sys.isexecutable is not reliable (#87) (@StefanKarpinski)
- extract: always chmod files on extraction (#88) (@StefanKarpinski)
- Add regression test for permissions in
Tar.create
(#89) (@giordano) - Update TagBot setup (#90) (@giordano)
- README.md: fix typos (#93) (@fingolfin)
- When extracting, don't use
filemode()
on windows (#97) (@staticfloat) - Tar.extract: slight mode improvement (#98) (@StefanKarpinski)
v1.9.0
Tar v1.9.0
This is the release in which Tar.jl has become a stdlib, so many changes were made to accommodate that. The primary "feature" in this release is technically a bug fix: previously on Windows Tar would not correctly detect executable files and it would always extract all files as executable; now, when using Julia ≥ 1.6 it will do both correctly.
Closed issues:
- AssertionError when extracting tarball (#80)
Merged pull requests:
- tests: make it easier to turn GNU tar tests on/off (#71) (@StefanKarpinski)
- tests: drop all non-stdlib test dependencies (#72) (@StefanKarpinski)
- travis config: also test Linux & Windows 32-bit (#73) (@StefanKarpinski)
- travis config: can't test on nightly since Tar is a stdlib (#74) (@StefanKarpinski)
- tests: use mktempdir() to get absolute paths, instead of hard-coding (#75) (@StefanKarpinski)
- can_symlink: don't modify logging (#76) (@StefanKarpinski)
- Fix inference problems in read_header (#78) (@timholy)
- update .travis.yml (copy from Downloads.jl) (#79) (@StefanKarpinski)
- Set up GitHub Actions for testing (#82) (@StefanKarpinski)
- Windows file modes: turn executable bits off for plain files (#83) (@StefanKarpinski)
- Use
Sys.isexecutable()
on Windows to determine file mode (#84) (@staticfloat) - Windows extract: always chmod files (#85) (@StefanKarpinski)
v1.8.0
Tar v1.8.0
This release adds one "feature": it no longer checks that the magic
field of TAR header blocks contains the string ustar
. It seems that some implementations don't fill in this magic value and instead leave the field empty. If we're reading a block that isn't actually in TAR format we'll figure it out since the checksum won't be right.
It also fixes incorrect documentation of how Tar.extract
handles permissions and adds a README section on reading and writing compressed tarballs using either external commands (e.g. gzip
) or transcoding streams packages (e.g. CodecZlib
).
Closed issues:
- unknown magic string for tar file: "" (#67)
- permission docs are inaccurate (#38)
- Document and/or simplify how to create compressed tarball (#66)
Merged pull requests:
- read: ignore the magic header field (fix #67) (#69) (@StefanKarpinski)
- fix two documentation issues (#70) (@StefanKarpinski)
v1.7.0
Tar v1.7.0
The only feature introduced in this release is the ability to Tar.list
streams that do not support the mark
, unmark
and reset
API for rewinding IO streams.
Merged pull requests:
- Tar.list: refactor to avoid using mark/unmark/reset (#68) (@StefanKarpinski)
v1.6.1
Tar v1.6.1
This patch release fixes an uncommon bug that can occur when the amount of data available to read is not a multiple of the TAR file block size of 512 bytes. This can occur, for example, when reading tarball data from a network socket.
Merged pull requests:
- Fix padding assertion errors (#65) (@staticfloat)
v1.6.0
Tar v1.6.0
The major feature of this release is being able to simulate symlinks by copying on file systems that cannot create them.
Closed issues:
- tree_hash giving invalid result (#59)
Merged pull requests:
- use arg_mkdir to handle directory creation (#60) (@StefanKarpinski)
- Fix variable name in
git_file_hash()
error path (#62) (@staticfloat) - copy_symlinks: allow
extract
to simulate symlinks with copies (#63) (@StefanKarpinski)
v1.5.0
Tar v1.5.0
This is a big release. The major features are:
Tar.list
has a method which takes a callback instead of returning a vector of headers.- All arguments that can be files or IO handles can now also be commands and pipelines.
- Support for "skeleton" files.
Skeleton files provide a means of reconstructing exact tarballs from an on-disk extracted tree: during Tar.extract
you can provide a file (or IO handle or command) to save the "skeleton" of the tarball to. This skeleton is all the headers in the tarball without any file data, prefixed with a header allowing the file to be recognized as a skeleton file. Later, if you provide the skeleton file to Tar.create
when making a tarball of that extracted directory, it will use the skeleton to reconstruct the original tarball, filling in the missing file data from files on disk. If the files haven't changed, the reconstructed tarball will be identical.
Merged pull requests:
- skeletons: allow exact tarball recreation via skeleton files (#48) (@StefanKarpinski)
- test structure, error handling fixes, tweaks (#49) (@StefanKarpinski)
- read_data without sink: return view into buffer (#50) (@StefanKarpinski)
- list with callback: iterate instead of listing (#51) (@StefanKarpinski)
- open_write(IO): always flush IO handle (#53) (@StefanKarpinski)
- propagate global metadata & relax metadata checking (#54) (@StefanKarpinski)
- tests: move setup/helper code to separate file (#55) (@StefanKarpinski)
- tests: actually test that GNU tar can list a skeleton file (#56) (@StefanKarpinski)
- use ArgTools for read/write args & testing (#57) (@StefanKarpinski)
- Project.toml: add compat for ArgTools (#58) (@StefanKarpinski)
v1.4.0
Tar v1.4.0
This release adds two new API functions:
rewrite
allows a tarball to be rewritten to the standard form thatcreate
produces without needing to fully extract and re-create the tarball. If the input stream is seekable, it makes one pass to index the tarball and uses seek to access file data in the correct order. If the input stream is not seekable, it will collect all the data in a buffer first and then use that.tree_hash
compute the git tree hash (SHA1 and SHA256 supported) of a tarball without needing to extract it to disk. This is particularly useful since some file systems lack features that are significant to git when hashing a file tree (e.g. symlinks, case preservation, ability to set/get executable bits).
This also includes significant refactoring of the internal {read,write}_tarball
functions. This refactoring allows read_tarball
to by extract
, rewrite
and tree_hash
while write_tarball
is used by create
and rewrite
. In the future these internal functions may be promoted to official low-level APIs.
Closed issues:
Merged pull requests:
- implement Tar.tree_hash (with other improvements) (#36) (@StefanKarpinski)
- tree_hash: more efficient file hashing (#37) (@StefanKarpinski)
- README: add note about reproducibility and tree_hash (#39) (@StefanKarpinski)
- read_data: fix premature eof logic (#40) (@StefanKarpinski)
- format change: sort purely by name, no '/' added to dirs (#42) (@StefanKarpinski)
- create.jl: factor out reusable write_tarball function (#43) (@StefanKarpinski)
- new API: Tar.rewrite([pred], old, [new]) (#44) (@StefanKarpinski)
- list_tarball: specialize on read_hdr function (#45) (@StefanKarpinski)
- skip(Process): use buffered I/O when skipping process output (#46) (@StefanKarpinski)
- open_{read,write}: use generic
file
argument name (#47) (@StefanKarpinski)
v1.3.1
Tar v1.3.1
Greatly improved performance: the default buffer size was previously the same as the TAR block size—512 bytes. This is, of course, a tiny buffer which is bad for I/O performance. This release increases the buffer size to 2MiB which, in particular, allows taking advantage of transparent huge page support on Linux.
Merged pull requests: