You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Till Wegmüller ac42675b20 Fixup go module path 7 months ago
helper Add capability tests to chroot, mount and polyfill 1 year ago
memfs Rename capability names to <name>Capability 1 year ago
osfs Merge syscall stuff 7 months ago
test Add TempDir 1 year ago
util Add TempDir 1 year ago
.gitignore Add TempDir 1 year ago
.travis.yml ci: test Go 1.9.x and 1.10.x 1 year ago
DCO added DCO 2 years ago
LICENSE LICENSE: changed to Apache 2.0 2 years ago
MAINTAINERS MAINTAINERS: add @mcuadros 2 years ago
Makefile travis: add codecov.io (#13) 2 years ago
README.md readme: fix a brok en sentenc 1 year ago
appveyor.yml bump v4 version 2 years ago
fs.go Rename capability names to <name>Capability 1 year ago
fs_test.go Add capability tests to chroot, mount and polyfill 1 year ago
go.mod Fixup go module path 7 months ago
go.sum go modules support 1 year ago

README.md

go-billy GoDoc Build Status Build status codecov

The missing interface filesystem abstraction for Go. Billy implements an interface based on the os standard library, allowing to develop applications without dependency on the underlying storage. Makes it virtually free to implement mocks and testing over filesystem operations.

Billy was born as part of src-d/go-git project.

Installation

go get -u gopkg.in/src-d/go-billy.v4/...

Usage

Billy exposes filesystems using the Filesystem interface. Each filesystem implementation gives you a New method, whose arguments depend on the implementation itself, that returns a new Filesystem.

The following example caches in memory all readable files in a directory from any billy’s filesystem implementation.

func LoadToMemory(origin billy.Filesystem, path string) (*memory.Memory, error) {
	memory := memory.New()

	files, err := origin.ReadDir("/")
	if err != nil {
		return nil, err
	}

	for _, file := range files {
		if file.IsDir() {
			continue
		}

		src, err := origin.Open(file.Name())
		if err != nil {
			return nil, err
		}

		dst, err := memory.Create(file.Name())
		if err != nil {
			return nil, err
		}

		if _, err = io.Copy(dst, src); err != nil {
			return nil, err
		}

		if err := dst.Close(); err != nil {
			return nil, err
		}

		if err := src.Close(); err != nil {
			return nil, err
		}
	}

	return memory, nil
}

Why billy?

The library billy deals with storage systems and Billy is the name of a well-known, IKEA bookcase. That’s it.

License

Apache License Version 2.0, see LICENSE