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 }