You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This library abstracts read and write access to a set of go-git repositories. It comes with several implementations to support different storage methods:
plain: stored in the filesystem, supports transactions.
legacysiva: siva file generated by borges. This implementation only supports reading and does not support transactions.
When transactions are supported the writes to the repositories will be atomic and could only be seen by new readers when Commit function is called. That is, after opening a repository in read only mode any writes to it by another thread or process won't modify its contents. This is useful when the storage that is being used for reading repositories is being updated at the same time. More information and example in siva package documentation.
Installation
go-borges supports go modules and can be added to your project with:
$ go get github.com/src-d/go-borges
Example of utilization
This example lists the repositories downloaded by gitcollector.
package main
import (
"fmt"
"os"
"github.com/src-d/go-borges"
"github.com/src-d/go-borges/siva"
"gopkg.in/src-d/go-billy.v4/osfs"
)
func main() {
if len(os.Args) != 2 {
fmt.Println("you need to provide the path of your siva files")
os.Exit(1)
}
fs := osfs.New(os.Args[1])
lib, err := siva.NewLibrary("library", fs, &siva.LibraryOptions{
Bucket: 2,
RootedRepo: true,
Transactional: true,
})
if err != nil {
panic(err)
}
repos, err := lib.Repositories(borges.ReadOnlyMode)
if err != nil {
panic(err)
}
err = repos.ForEach(func(r borges.Repository) error {
id := r.ID().String()
head, err := r.R().Head()
if err != nil {
return err
}
fmt.Printf("repository: %v, HEAD: %v\n", id, head.Hash().String())
return nil
})
}