Tar.( let* ) in favor of the new Tar.Syntax module (@kit-ty-kate, #167)read operation (@dinosaure, @BChabanne, @reynir, #161)x-maintenance-intent field into opam files (@hannesm, #162)Tar_eio with the last version of tar (@patricoferris, #159)Tar_lwt_unix.run for Tar.Really_read _ that one tar block was always read. This meant that using Tar.Really_read with a size different from 512 would fail. (Reported by @jonahbeckford, review by @hannesm, @reynir, #153)Tar_unix.extract and Tar_lwt_unix.extract (@reynir, #155)Tar_lwt_unix.run as we do with Tar_unix.run and Tar_eio.run. This was an oversight in v3.0.0. (Reported by @jonahbeckford, @reynir, #150)Header.marshal and the checksum and the length (@reynir, #145)BREAKING: de-functorize the package (@hannesm, @reynir, @dinosaure, #140, #143, #146)
These PRs attempt to de-functorize Tar so that users can implement I/O themselves, using Tar's own element serialization/deserialization functions to take advantage of read/write methods. This avoids imposing on the user the implementation of a module that is too rigid in his/her case (which could have performance implications).
Tar offers functions for serializing/deserializing tar-specific elements from string. It is then up to the user to know how to obtain or write these strings.
To this, these PRs add "logics" (see 'a Tar.t) requiring read and/or write implementations and describing how to extract all entries from a tar file or how to write a tar file according to a "dispenser" (like Seq.to_dispenser) of entries.
These logics do not depend on a particular "scheduler", and these PRs propose a derivation of these logics with tar-unix, tar-eio and tar-mirage. These latter derivations mean that the API for these packages has only been extended, and there are no breaking changes as such.
These logics also make it easy to offer a compression/decompression layer with decompress, so you can easily manipulate and/or create a .tar.gz file.
tar: support pax Global Extended Headers. This adds state to tar parsing. (#119, #120, @MisterDA)Tar.HeaderWriter and Tar.HeaderReader supported both, but Tar.Header.Link only had LongLink and (de)serialized to (from) GNU LongName (#127)Tar.HEADERREADER and Tar.HEADERWRITER describing the output of Tar.HeaderReader and Tar.HeaderWriter respectively (#127)Tar.READER.t and Tar.WRITER.t are renamed to io (#127)write_global function for writing a global PAX extended header (#127)End_of_stream and Checksum_mismatch are removed (#127)Tar_cstruct module as it was unused (#127)Normal) as directories for backward compatibility (reported in #129, fix by @reynir)ppx_cstructdependency (@hannesm, review by @reynir, #117)tar-mirage: implement mirage-kv.6.0.0 (@reynir, @hannesm)tar-mirage: fix writing of data when data+tar header is a multiple of sector_size greater than 1 (@reynir, review by @hannesm, #100)tar-mirage: fix writing of data, previously the end_of_archive was set 512 bytes short (#99 @hannesm @reynir)tar-mirage requires and implements mirage-kv.5.0.0 (@hannesm, #96)tar-mirage implements Mirage_kv.RW (append-only) (@hannesm, @reynir, @dinosaure, review by @MisterDA, #93)cstruct in tar: unnecessary memsets removed, use Cstruct.of_string (@hannesm, #93)tar-mirage read buffer allocation error (@reynir, review by @hannesm, #94)tar and tar-mirage do not require re anymore, tar-mirage doesn't depend on iopage and works with solo5 and other improvements (@hannesm, review by @reynir, #90)tar-mirage requires mirage-block.2.0.0 (@kit-ty-kate, #86)io-page-unix dependency (@hannesm, #87)O_CLOEXEC on opened files and be sure to close opened files (@MisterDA, @talex5, #83)camlp-stream) (@Sudha247, #84)Remove Tar.Make.Header, Tar_cstruct.Header, Tar_unix.Header, and Tar_lwt_unix.Header to keep only Tar.Header and use it everywhere.
Tar.Make.Header.get_next_header becomes Tar.Make.get_next_header;Tar_cstruct.Header.get_next_header becomes Tar_cstruct.get_next_header;Tar_lwt_unix.Header.get_next_header becomes Tar_lwt_unix.get_next_header;Tar_lwt_unix.Header.of_file becomes Tar_lwt_unix.header_of_file;Tar_unix.Header.get_next_header becomes Tar_unix.get_next_header;Tar_unix.Header.of_file becomes Tar_unix.header_of_file;Tar_*.Header.t values have to be changed to Tar.Header.t. (@MisterDA, @dinosaure, #77)Tar_unix.transform and Tar_lwt_unix.transform to help transforming headers of a streamed tar archive between two file descriptors. (@MisterDA, @dinosaure, #77){build} tag on the dune dependency (@CraigFe, @hannesm, #72)ocaml-tar to newer MirageOS interfaces (@hannesm, @dinosaure, #73)file_mode defaults to 0o400 (@reynir, @MisterDA, @dinosaure, #78)ppx_cstruct instead of cstruct.ppx (#65 @avsm @djs55)-safe-string)tar, tar-unix, tar-mirageFailure exceptions from int_of_string