| // Copyright © 2014 Steve Francia <spf@spf13.com>. | 
 | // Copyright 2013 tsuru authors. All rights reserved. | 
 | // | 
 | // Licensed under the Apache License, Version 2.0 (the "License"); | 
 | // you may not use this file except in compliance with the License. | 
 | // You may obtain a copy of the License at | 
 | // http://www.apache.org/licenses/LICENSE-2.0 | 
 | // | 
 | // Unless required by applicable law or agreed to in writing, software | 
 | // distributed under the License is distributed on an "AS IS" BASIS, | 
 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 | // See the License for the specific language governing permissions and | 
 | // limitations under the License. | 
 |  | 
 | // Package afero provides types and methods for interacting with the filesystem, | 
 | // as an abstraction layer. | 
 |  | 
 | // Afero also provides a few implementations that are mostly interoperable. One that | 
 | // uses the operating system filesystem, one that uses memory to store files | 
 | // (cross platform) and an interface that should be implemented if you want to | 
 | // provide your own filesystem. | 
 |  | 
 | package afero | 
 |  | 
 | import ( | 
 | 	"errors" | 
 | 	"io" | 
 | 	"os" | 
 | 	"time" | 
 | ) | 
 |  | 
 | type Afero struct { | 
 | 	Fs | 
 | } | 
 |  | 
 | // File represents a file in the filesystem. | 
 | type File interface { | 
 | 	io.Closer | 
 | 	io.Reader | 
 | 	io.ReaderAt | 
 | 	io.Seeker | 
 | 	io.Writer | 
 | 	io.WriterAt | 
 |  | 
 | 	Name() string | 
 | 	Readdir(count int) ([]os.FileInfo, error) | 
 | 	Readdirnames(n int) ([]string, error) | 
 | 	Stat() (os.FileInfo, error) | 
 | 	Sync() error | 
 | 	Truncate(size int64) error | 
 | 	WriteString(s string) (ret int, err error) | 
 | } | 
 |  | 
 | // Fs is the filesystem interface. | 
 | // | 
 | // Any simulated or real filesystem should implement this interface. | 
 | type Fs interface { | 
 | 	// Create creates a file in the filesystem, returning the file and an | 
 | 	// error, if any happens. | 
 | 	Create(name string) (File, error) | 
 |  | 
 | 	// Mkdir creates a directory in the filesystem, return an error if any | 
 | 	// happens. | 
 | 	Mkdir(name string, perm os.FileMode) error | 
 |  | 
 | 	// MkdirAll creates a directory path and all parents that does not exist | 
 | 	// yet. | 
 | 	MkdirAll(path string, perm os.FileMode) error | 
 |  | 
 | 	// Open opens a file, returning it or an error, if any happens. | 
 | 	Open(name string) (File, error) | 
 |  | 
 | 	// OpenFile opens a file using the given flags and the given mode. | 
 | 	OpenFile(name string, flag int, perm os.FileMode) (File, error) | 
 |  | 
 | 	// Remove removes a file identified by name, returning an error, if any | 
 | 	// happens. | 
 | 	Remove(name string) error | 
 |  | 
 | 	// RemoveAll removes a directory path and all any children it contains. It | 
 | 	// does not fail if the path does not exist (return nil). | 
 | 	RemoveAll(path string) error | 
 |  | 
 | 	// Rename renames a file. | 
 | 	Rename(oldname, newname string) error | 
 |  | 
 | 	// Stat returns a FileInfo describing the named file, or an error, if any | 
 | 	// happens. | 
 | 	Stat(name string) (os.FileInfo, error) | 
 |  | 
 | 	// The name of this FileSystem | 
 | 	Name() string | 
 |  | 
 | 	//Chmod changes the mode of the named file to mode. | 
 | 	Chmod(name string, mode os.FileMode) error | 
 |  | 
 | 	//Chtimes changes the access and modification times of the named file | 
 | 	Chtimes(name string, atime time.Time, mtime time.Time) error | 
 | } | 
 |  | 
 | var ( | 
 | 	ErrFileClosed        = errors.New("File is closed") | 
 | 	ErrOutOfRange        = errors.New("Out of range") | 
 | 	ErrTooLarge          = errors.New("Too large") | 
 | 	ErrFileNotFound      = os.ErrNotExist | 
 | 	ErrFileExists        = os.ErrExist | 
 | 	ErrDestinationExists = os.ErrExist | 
 | ) |