]> Cypherpunks repositories - gostls13.git/commit
archive/tar: implement Writer support for sparse files
authorJoe Tsai <joetsai@digital-static.net>
Sat, 19 Aug 2017 01:18:38 +0000 (18:18 -0700)
committerJoe Tsai <thebrokentoaster@gmail.com>
Wed, 23 Aug 2017 22:38:45 +0000 (22:38 +0000)
commite0ab505a97eed8773ea16842f2748b6d518fedd9
tree216110bff7cb3dbcc3f490ae5e074a7021aa1291
parent645ecf5d4806bfef470da2ac1fad8df40c73beb8
archive/tar: implement Writer support for sparse files

This CL is the second step (of two; part1 is CL/56771) for adding
sparse file support to the Writer.

There are no new identifiers exported in this CL, but this does make
use of Header.SparseHoles added in part1. If the Typeflag is set to
TypeGNUSparse or len(SparseHoles) > 0, then the Writer will emit an
sparse file, where the holes must be written by the user as zeros.

If TypeGNUSparse is set, then the output file must use the GNU format.
Otherwise, it must use the PAX format (with GNU-defined PAX keys).

A future CL may export Reader.Discard and Writer.FillZeros,
but those methods are currently unexported, and only used by the
tests for efficiency reasons.
Calling Discard or FillZeros on a hole 10GiB in size does take
time, even if it is essentially a memcopy.

Updates #13548

Change-Id: Id586d9178c227c0577f796f731ae2cbb72355601
Reviewed-on: https://go-review.googlesource.com/57212
Reviewed-by: Ian Lance Taylor <iant@golang.org>
13 files changed:
src/archive/tar/common.go
src/archive/tar/example_test.go
src/archive/tar/reader_test.go
src/archive/tar/testdata/gnu-nil-sparse-data.tar [new file with mode: 0644]
src/archive/tar/testdata/gnu-nil-sparse-hole.tar [new file with mode: 0644]
src/archive/tar/testdata/gnu-sparse-big.tar [new file with mode: 0644]
src/archive/tar/testdata/pax-nil-sparse-data.tar [new file with mode: 0644]
src/archive/tar/testdata/pax-nil-sparse-hole.tar [new file with mode: 0644]
src/archive/tar/testdata/pax-sparse-big.tar [new file with mode: 0644]
src/archive/tar/testdata/writer-big-long.tar
src/archive/tar/testdata/writer-big.tar
src/archive/tar/writer.go
src/archive/tar/writer_test.go