Documentation ¶
Index ¶
- Constants
- Variables
- func ApplyLayer(dest string, layer ArchiveReader) (int64, error)
- func CanonicalTarNameForPath(p string) (string, error)
- func ChangesSize(newDir string, changes []Change) int64
- func CmdStream(cmd *exec.Cmd, input io.Reader) (io.ReadCloser, error)
- func CompressStream(dest io.WriteCloser, compression Compression) (io.WriteCloser, error)
- func CopyFileWithTar(src, dst string) (err error)
- func CopyWithTar(src, dst string) error
- func DecompressStream(archive io.Reader) (io.ReadCloser, error)
- func IsArchive(header []byte) bool
- func Tar(path string, compression Compression) (io.ReadCloser, error)
- func TarUntar(src, dst string) error
- func TarWithOptions(srcPath string, options *TarOptions) (io.ReadCloser, error)
- func Unpack(decompressedArchive io.Reader, dest string, options *TarOptions) error
- func UnpackLayer(dest string, layer ArchiveReader) (size int64, err error)
- func Untar(archive io.Reader, dest string, options *TarOptions) error
- func UntarPath(src, dst string) error
- type Archive
- type ArchiveReader
- type Archiver
- type Change
- type ChangeType
- type Compression
- type FileInfo
- type TarOptions
- type TempArchive
Constants ¶
const ( ChangeModify = iota ChangeAdd ChangeDelete )
Variables ¶
var (
ErrNotImplemented = errors.New("Function not implemented")
)
Functions ¶
func ApplyLayer ¶
func ApplyLayer(dest string, layer ArchiveReader) (int64, error)
ApplyLayer parses a diff in the standard layer format from `layer`, and applies it to the directory `dest`. Returns the size in bytes of the contents of the layer.
func CanonicalTarNameForPath ¶
CanonicalTarNameForPath returns platform-specific filepath to canonical posix-style path for tar archival. p is relative path.
func ChangesSize ¶
ChangesSize calculates the size in bytes of the provided changes, based on newDir.
func CmdStream ¶
CmdStream executes a command, and returns its stdout as a stream. If the command fails to run or doesn't complete successfully, an error will be returned, including anything written on stderr.
func CompressStream ¶
func CompressStream(dest io.WriteCloser, compression Compression) (io.WriteCloser, error)
func CopyFileWithTar ¶
CopyFileWithTar emulates the behavior of the 'cp' command-line for a single file. It copies a regular file from path `src` to path `dst`, and preserves all its metadata.
If `dst` ends with a trailing slash '/', the final destination path will be `dst/base(src)`.
func CopyWithTar ¶
CopyWithTar creates a tar archive of filesystem path `src`, and unpacks it at filesystem path `dst`. The archive is streamed directly with fixed buffering and no intermediary disk IO.
func DecompressStream ¶
func DecompressStream(archive io.Reader) (io.ReadCloser, error)
func Tar ¶
func Tar(path string, compression Compression) (io.ReadCloser, error)
Tar creates an archive from the directory at `path`, and returns it as a stream of bytes.
func TarUntar ¶
TarUntar is a convenience function which calls Tar and Untar, with the output of one piped into the other. If either Tar or Untar fails, TarUntar aborts and returns the error.
func TarWithOptions ¶
func TarWithOptions(srcPath string, options *TarOptions) (io.ReadCloser, error)
TarWithOptions creates an archive from the directory at `path`, only including files whose relative paths are included in `options.IncludeFiles` (if non-nil) or not in `options.ExcludePatterns`.
func UnpackLayer ¶
func UnpackLayer(dest string, layer ArchiveReader) (size int64, err error)
func Untar ¶
func Untar(archive io.Reader, dest string, options *TarOptions) error
Untar reads a stream of bytes from `archive`, parses it as a tar archive, and unpacks it into the directory at `dest`. The archive may be compressed with one of the following algorithms:
identity (uncompressed), gzip, bzip2, xz.
FIXME: specify behavior when target path exists vs. doesn't exist.
Types ¶
type Archive ¶
type Archive io.ReadCloser
func ExportChanges ¶
ExportChanges produces an Archive from the provided changes, relative to dir.
func Generate ¶
Generate generates a new archive from the content provided as input.
`files` is a sequence of path/content pairs. A new file is added to the archive for each pair. If the last pair is incomplete, the file is created with an empty content. For example:
Generate("foo.txt", "hello world", "emptyfile")
The above call will return an archive with 2 files:
- ./foo.txt with content "hello world"
- ./empty with empty content
FIXME: stream content instead of buffering FIXME: specify permissions and other archive metadata
type ArchiveReader ¶
type Archiver ¶
type Archiver struct {
Untar func(io.Reader, string, *TarOptions) error
}
Archiver allows the reuse of most utility functions of this package with a pluggable Untar function.
func (*Archiver) CopyFileWithTar ¶
func (*Archiver) CopyWithTar ¶
type Change ¶
type Change struct { Path string Kind ChangeType }
func Changes ¶
Changes walks the path rw and determines changes for the files in the path, with respect to the parent layers
func ChangesDirs ¶
ChangesDirs compares two directories and generates an array of Change objects describing the changes. If oldDir is "", then all files in newDir will be Add-Changes.
type ChangeType ¶
type ChangeType int
type Compression ¶
type Compression int
const ( Uncompressed Compression = iota Bzip2 Gzip Xz )
func DetectCompression ¶
func DetectCompression(source []byte) Compression
func (*Compression) Extension ¶
func (compression *Compression) Extension() string
type TarOptions ¶
type TarOptions struct { IncludeFiles []string ExcludePatterns []string Compression Compression NoLchown bool Name string }
type TempArchive ¶
type TempArchive struct { *os.File Size int64 // Pre-computed from Stat().Size() as a convenience // contains filtered or unexported fields }
func NewTempArchive ¶
func NewTempArchive(src Archive, dir string) (*TempArchive, error)
NewTempArchive reads the content of src into a temporary file, and returns the contents of that file as an archive. The archive can only be read once - as soon as reading completes, the file will be deleted.
func (*TempArchive) Close ¶
func (archive *TempArchive) Close() error
Close closes the underlying file if it's still open, or does a no-op to allow callers to try to close the TempArchive multiple times safely.