|
- package filesystem
-
- import (
- "bufio"
- "os"
-
- "gopkg.in/src-d/go-git.v4/plumbing/format/index"
- "gopkg.in/src-d/go-git.v4/storage/filesystem/dotgit"
- "gopkg.in/src-d/go-git.v4/utils/ioutil"
- )
-
- type IndexStorage struct {
- dir *dotgit.DotGit
- }
-
- func (s *IndexStorage) SetIndex(idx *index.Index) (err error) {
- f, err := s.dir.IndexWriter()
- if err != nil {
- return err
- }
-
- defer ioutil.CheckClose(f, &err)
- bw := bufio.NewWriter(f)
- defer func() {
- if e := bw.Flush(); err == nil && e != nil {
- err = e
- }
- }()
-
- e := index.NewEncoder(bw)
- err = e.Encode(idx)
- return err
- }
-
- func (s *IndexStorage) Index() (i *index.Index, err error) {
- idx := &index.Index{
- Version: 2,
- }
-
- f, err := s.dir.Index()
- if err != nil {
- if os.IsNotExist(err) {
- return idx, nil
- }
-
- return nil, err
- }
-
- defer ioutil.CheckClose(f, &err)
-
- d := index.NewDecoder(bufio.NewReader(f))
- err = d.Decode(idx)
- return idx, err
- }
|