mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
daemon: clean up vestiges of ContainerFS
Now that the type of Container.BaseFS has been reverted to a string, values can never implement the extractor or archiver interfaces. Rip out the dead code to support archiving and unarchiving through those interfcaes. Signed-off-by: Cory Snider <csnider@mirantis.com>
This commit is contained in:
parent
9ce2b30b81
commit
6ca4eda960
2 changed files with 8 additions and 39 deletions
|
@ -21,32 +21,6 @@ import (
|
||||||
// path does not refer to a directory.
|
// path does not refer to a directory.
|
||||||
var ErrExtractPointNotDirectory = errors.New("extraction point is not a directory")
|
var ErrExtractPointNotDirectory = errors.New("extraction point is not a directory")
|
||||||
|
|
||||||
// The daemon will use the following interfaces if the container fs implements
|
|
||||||
// these for optimized copies to and from the container.
|
|
||||||
type extractor interface {
|
|
||||||
ExtractArchive(src io.Reader, dst string, opts *archive.TarOptions) error
|
|
||||||
}
|
|
||||||
|
|
||||||
type archiver interface {
|
|
||||||
ArchivePath(src string, opts *archive.TarOptions) (io.ReadCloser, error)
|
|
||||||
}
|
|
||||||
|
|
||||||
// helper functions to extract or archive
|
|
||||||
func extractArchive(i interface{}, src io.Reader, dst string, opts *archive.TarOptions, root string) error {
|
|
||||||
if ea, ok := i.(extractor); ok {
|
|
||||||
return ea.ExtractArchive(src, dst, opts)
|
|
||||||
}
|
|
||||||
|
|
||||||
return chrootarchive.UntarWithRoot(src, dst, opts, root)
|
|
||||||
}
|
|
||||||
|
|
||||||
func archivePath(i interface{}, src string, opts *archive.TarOptions, root string) (io.ReadCloser, error) {
|
|
||||||
if ap, ok := i.(archiver); ok {
|
|
||||||
return ap.ArchivePath(src, opts)
|
|
||||||
}
|
|
||||||
return chrootarchive.Tar(src, opts, root)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ContainerCopy performs a deprecated operation of archiving the resource at
|
// ContainerCopy performs a deprecated operation of archiving the resource at
|
||||||
// the specified path in the container identified by the given name.
|
// the specified path in the container identified by the given name.
|
||||||
func (daemon *Daemon) ContainerCopy(name string, res string) (io.ReadCloser, error) {
|
func (daemon *Daemon) ContainerCopy(name string, res string) (io.ReadCloser, error) {
|
||||||
|
@ -229,7 +203,6 @@ func (daemon *Daemon) containerArchivePath(container *container.Container, path
|
||||||
// also catches the case when the root directory of the container is
|
// also catches the case when the root directory of the container is
|
||||||
// requested: we want the archive entries to start with "/" and not the
|
// requested: we want the archive entries to start with "/" and not the
|
||||||
// container ID.
|
// container ID.
|
||||||
driver := container.BaseFS
|
|
||||||
|
|
||||||
// Get the source and the base paths of the container resolved path in order
|
// Get the source and the base paths of the container resolved path in order
|
||||||
// to get the proper tar options for the rebase tar.
|
// to get the proper tar options for the rebase tar.
|
||||||
|
@ -246,7 +219,7 @@ func (daemon *Daemon) containerArchivePath(container *container.Container, path
|
||||||
}
|
}
|
||||||
opts := archive.TarResourceRebaseOpts(sourceBase, filepath.Base(absPath))
|
opts := archive.TarResourceRebaseOpts(sourceBase, filepath.Base(absPath))
|
||||||
|
|
||||||
data, err := archivePath(driver, sourceDir, opts, container.BaseFS)
|
data, err := chrootarchive.Tar(sourceDir, opts, container.BaseFS)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
@ -287,7 +260,6 @@ func (daemon *Daemon) containerExtractToDir(container *container.Container, path
|
||||||
|
|
||||||
// Normalize path before sending to rootfs'
|
// Normalize path before sending to rootfs'
|
||||||
path = filepath.FromSlash(path)
|
path = filepath.FromSlash(path)
|
||||||
driver := container.BaseFS
|
|
||||||
|
|
||||||
// Check if a drive letter supplied, it must be the system drive. No-op except on Windows
|
// Check if a drive letter supplied, it must be the system drive. No-op except on Windows
|
||||||
path, err = system.CheckSystemDriveAndRemoveDriveLetter(path)
|
path, err = system.CheckSystemDriveAndRemoveDriveLetter(path)
|
||||||
|
@ -333,14 +305,14 @@ func (daemon *Daemon) containerExtractToDir(container *container.Container, path
|
||||||
// a volume file path.
|
// a volume file path.
|
||||||
var baseRel string
|
var baseRel string
|
||||||
if strings.HasPrefix(resolvedPath, `\\?\Volume{`) {
|
if strings.HasPrefix(resolvedPath, `\\?\Volume{`) {
|
||||||
if strings.HasPrefix(resolvedPath, driver) {
|
if strings.HasPrefix(resolvedPath, container.BaseFS) {
|
||||||
baseRel = resolvedPath[len(driver):]
|
baseRel = resolvedPath[len(container.BaseFS):]
|
||||||
if baseRel[:1] == `\` {
|
if baseRel[:1] == `\` {
|
||||||
baseRel = baseRel[1:]
|
baseRel = baseRel[1:]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
baseRel, err = filepath.Rel(driver, resolvedPath)
|
baseRel, err = filepath.Rel(container.BaseFS, resolvedPath)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -348,9 +320,6 @@ func (daemon *Daemon) containerExtractToDir(container *container.Container, path
|
||||||
// Make it an absolute path.
|
// Make it an absolute path.
|
||||||
absPath = filepath.Join(string(filepath.Separator), baseRel)
|
absPath = filepath.Join(string(filepath.Separator), baseRel)
|
||||||
|
|
||||||
// @ TODO: gupta-ak: Technically, this works since it no-ops
|
|
||||||
// on Windows and the file system is local anyway on linux.
|
|
||||||
// But eventually, it should be made driver aware.
|
|
||||||
toVolume, err := checkIfPathIsInAVolume(container, absPath)
|
toVolume, err := checkIfPathIsInAVolume(container, absPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -372,7 +341,7 @@ func (daemon *Daemon) containerExtractToDir(container *container.Container, path
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := extractArchive(driver, content, resolvedPath, options, container.BaseFS); err != nil {
|
if err := chrootarchive.UntarWithRoot(content, resolvedPath, options, container.BaseFS); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -415,7 +384,6 @@ func (daemon *Daemon) containerCopy(container *container.Container, resource str
|
||||||
|
|
||||||
// Normalize path before sending to rootfs
|
// Normalize path before sending to rootfs
|
||||||
resource = filepath.FromSlash(resource)
|
resource = filepath.FromSlash(resource)
|
||||||
driver := container.BaseFS
|
|
||||||
|
|
||||||
basePath, err := container.GetResourcePath(resource)
|
basePath, err := container.GetResourcePath(resource)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -431,7 +399,7 @@ func (daemon *Daemon) containerCopy(container *container.Container, resource str
|
||||||
basePath = d
|
basePath = d
|
||||||
filter = []string{f}
|
filter = []string{f}
|
||||||
}
|
}
|
||||||
archv, err := archivePath(driver, basePath, &archive.TarOptions{
|
archv, err := chrootarchive.Tar(basePath, &archive.TarOptions{
|
||||||
Compression: archive.Uncompressed,
|
Compression: archive.Uncompressed,
|
||||||
IncludeFiles: filter,
|
IncludeFiles: filter,
|
||||||
}, container.BaseFS)
|
}, container.BaseFS)
|
||||||
|
|
|
@ -7,6 +7,7 @@ import (
|
||||||
"github.com/docker/docker/container"
|
"github.com/docker/docker/container"
|
||||||
"github.com/docker/docker/errdefs"
|
"github.com/docker/docker/errdefs"
|
||||||
"github.com/docker/docker/pkg/archive"
|
"github.com/docker/docker/pkg/archive"
|
||||||
|
"github.com/docker/docker/pkg/chrootarchive"
|
||||||
"github.com/docker/docker/pkg/ioutils"
|
"github.com/docker/docker/pkg/ioutils"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -61,7 +62,7 @@ func (daemon *Daemon) containerExport(container *container.Container) (arch io.R
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
archv, err := archivePath(basefs, basefs, &archive.TarOptions{
|
archv, err := chrootarchive.Tar(basefs, &archive.TarOptions{
|
||||||
Compression: archive.Uncompressed,
|
Compression: archive.Uncompressed,
|
||||||
IDMap: daemon.idMapping,
|
IDMap: daemon.idMapping,
|
||||||
}, basefs)
|
}, basefs)
|
||||||
|
|
Loading…
Add table
Reference in a new issue