Documentation ¶
Index ¶
- Constants
- Variables
- func ApplyLayer(dest string, layer ArchiveReader) (int64, error)
- func AssertsDirectory(path string) bool
- 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 CopyResource(srcPath, dstPath string) error
- func CopyTo(content ArchiveReader, srcInfo CopyInfo, dstPath string) error
- func CopyWithTar(src, dst string) error
- func DecompressStream(archive io.Reader) (io.ReadCloser, error)
- func HasTrailingPathSeparator(path string) bool
- func IsArchive(header []byte) bool
- func PreserveTrailingDotOrSeparator(cleanedPath, originalPath string) string
- func SpecifiesCurrentDir(path string) bool
- func SplitPathDirEntry(localizedPath string) (dir, base string)
- 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 CopyInfo
- type FileInfo
- type TarChownOptions
- type TarOptions
- type TempArchive
Constants ¶
const ( ChangeModify = iota ChangeAdd ChangeDelete )
Variables ¶
var ( ErrNotDirectory = errors.New("not a directory") ErrDirNotExists = errors.New("no such directory") ErrCannotCopyDir = errors.New("cannot copy directory") ErrInvalidCopySource = errors.New("invalid copy source content") )
Errors used or returned by this file.
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 AssertsDirectory ¶
AssertsDirectory returns whether the given path is asserted to be a directory, i.e., the path ends with a trailing '/' or `/.`, assuming a path separator of `/`.
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.
Destination handling is in an operating specific manner depending where the daemon is running. If `dst` ends with a trailing slash the final destination path will be `dst/base(src)` (Linux) or `dst\base(src)` (Windows).
func CopyResource ¶
CopyResource performs an archive copy from the given source path to the given destination path. The source path MUST exist and the destination path's parent directory must exist.
func CopyTo ¶
func CopyTo(content ArchiveReader, srcInfo CopyInfo, dstPath string) error
CopyTo handles extracting the given content whose entries should be sourced from srcInfo to dstPath.
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 HasTrailingPathSeparator ¶
HasTrailingPathSeparator returns whether the given path ends with the system's path separator character.
func PreserveTrailingDotOrSeparator ¶
PreserveTrailingDotOrSeparator returns the given cleaned path (after processing using any utility functions from the path or filepath stdlib packages) and appends a trailing `/.` or `/` if its corresponding original path (from before being processed by utility functions from the path or filepath stdlib packages) ends with a trailing `/.` or `/`. If the cleaned path already ends in a `.` path segment, then another is not added. If the clean path already ends in a path separator, then another is not added.
func SpecifiesCurrentDir ¶
SpecifiesCurrentDir returns whether the given path specifies a "current directory", i.e., the last path segment is `.`.
func SplitPathDirEntry ¶
SplitPathDirEntry splits the given path between its parent directory and its basename in that directory.
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
func PrepareArchiveCopy ¶
func PrepareArchiveCopy(srcContent ArchiveReader, srcInfo, dstInfo CopyInfo) (dstDir string, content Archive, err error)
PrepareArchiveCopy prepares the given srcContent archive, which should contain the archived resource described by srcInfo, to the destination described by dstInfo. Returns the possibly modified content archive along with the path to the destination directory which it should be extracted to.
func TarResource ¶
TarResource archives the resource at the given sourcePath into a Tar archive. A non-nil error is returned if sourcePath does not exist or is asserted to be a directory but exists as another type of file.
This function acts as a convenient wrapper around TarWithOptions, which requires a directory as the source path. TarResource accepts either a directory or a file path and correctly sets the Tar options.
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 TarChownOptions ¶
type TarChownOptions struct {
UID, GID int
}
type TarOptions ¶
type TarOptions struct { IncludeFiles []string ExcludePatterns []string Compression Compression NoLchown bool ChownOpts *TarChownOptions Name string IncludeSourceDir bool // When unpacking, specifies whether overwriting a directory with a // non-directory is allowed and vice versa. NoOverwriteDirNonDir bool }
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.