Documentation ¶
Index ¶
- Constants
- Variables
- func ApplyLayer(dest string, layer ArchiveReader) 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) 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) error
ApplyLayer parses a diff in the standard layer format from `layer`, and applies it to the directory `dest`.
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.Includes` (if non-nil) or not in `options.Excludes`.
func UnpackLayer ¶
func UnpackLayer(dest string, layer ArchiveReader) 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 { Includes []string Excludes []string Compression Compression NoLchown bool }
type TempArchive ¶
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.