mirror of
https://github.com/cheat/cheat.git
synced 2026-05-27 19:48:44 +02:00
4799c2cb17
Bumps [github.com/go-git/go-git/v5](https://github.com/go-git/go-git) from 5.16.5 to 5.19.1. - [Release notes](https://github.com/go-git/go-git/releases) - [Changelog](https://github.com/go-git/go-git/blob/main/HISTORY.md) - [Commits](https://github.com/go-git/go-git/compare/v5.16.5...v5.19.1) --- updated-dependencies: - dependency-name: github.com/go-git/go-git/v5 dependency-version: 5.19.1 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com>
78 lines
2.2 KiB
Markdown
78 lines
2.2 KiB
Markdown
# go-billy [](https://pkg.go.dev/github.com/go-git/go-billy/v5) [](https://github.com/go-git/go-billy/actions?query=workflow%3ATest)
|
|
|
|
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 [go-git/go-git](https://github.com/go-git/go-git) project.
|
|
|
|
## Version support
|
|
|
|
go-billy v5 is in maintenance mode. Users should upgrade to [go-billy v6](https://pkg.go.dev/github.com/go-git/go-billy/v6) where possible.
|
|
|
|
## Installation
|
|
|
|
```go
|
|
import "github.com/go-git/go-billy/v5" // with go modules enabled (GO111MODULE=on or outside GOPATH)
|
|
import "github.com/go-git/go-billy" // with go modules disabled
|
|
```
|
|
|
|
## Usage
|
|
|
|
Billy exposes filesystems using the
|
|
[`Filesystem` interface](https://pkg.go.dev/github.com/go-git/go-billy/v5?tab=doc#Filesystem).
|
|
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.
|
|
|
|
```go
|
|
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](LICENSE)
|