func (container *Container) Copy(resource string) (archive.Archive, error) { if err := container.Mount(); err != nil { return nil, err } var filter []string basePath := path.Join(container.RootfsPath(), resource) stat, err := os.Stat(basePath) if err != nil { container.Unmount() return nil, err } if !stat.IsDir() { d, f := path.Split(basePath) basePath = d filter = []string{f} } else { filter = []string{path.Base(basePath)} basePath = path.Dir(basePath) } archive, err := archive.TarFilter(basePath, &archive.TarOptions{ Compression: archive.Uncompressed, Includes: filter, }) if err != nil { return nil, err } return EofReader(archive, func() { container.Unmount() }), nil }
func (container *Container) Copy(resource string) (io.ReadCloser, error) { if err := container.Mount(); err != nil { return nil, err } var filter []string basePath := path.Join(container.basefs, resource) stat, err := os.Stat(basePath) if err != nil { container.Unmount() return nil, err } if !stat.IsDir() { d, f := path.Split(basePath) basePath = d filter = []string{f} } else { filter = []string{path.Base(basePath)} basePath = path.Dir(basePath) } archive, err := archive.TarFilter(basePath, &archive.TarOptions{ Compression: archive.Uncompressed, Includes: filter, }) if err != nil { return nil, err } return utils.NewReadCloserWrapper(archive, func() error { err := archive.Close() container.Unmount() return err }), nil }
func (container *Container) Copy(resource string) (archive.Archive, error) { if err := container.EnsureMounted(); err != nil { return nil, err } var filter []string basePath := path.Join(container.RootfsPath(), resource) stat, err := os.Stat(basePath) if err != nil { return nil, err } if !stat.IsDir() { d, f := path.Split(basePath) basePath = d filter = []string{f} } else { filter = []string{path.Base(basePath)} basePath = path.Dir(basePath) } return archive.TarFilter(basePath, archive.Uncompressed, filter) }
// Returns an archive of the contents for the id func (a *Driver) Diff(id string) (archive.Archive, error) { return archive.TarFilter(path.Join(a.rootPath(), "diff", id), &archive.TarOptions{ Compression: archive.Uncompressed, }) }