diff options
author | Máximo Cuadros <mcuadros@gmail.com> | 2017-01-29 02:16:26 +0100 |
---|---|---|
committer | Máximo Cuadros <mcuadros@gmail.com> | 2017-01-29 02:16:26 +0100 |
commit | de1c0bfec0269ff2a31b62d13612d833da178ec4 (patch) | |
tree | 9a47045401c1991747dd1f2e5497efff1e3dc1e5 /storage/filesystem/index.go | |
parent | cf9efc629eae67dc5c05c06e3cb0470bb1696f73 (diff) | |
download | go-git-de1c0bfec0269ff2a31b62d13612d833da178ec4.tar.gz |
storage: IndexStorer implementation
Diffstat (limited to 'storage/filesystem/index.go')
-rw-r--r-- | storage/filesystem/index.go | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/storage/filesystem/index.go b/storage/filesystem/index.go new file mode 100644 index 0000000..456ef0b --- /dev/null +++ b/storage/filesystem/index.go @@ -0,0 +1,44 @@ +package filesystem + +import ( + "os" + + "gopkg.in/src-d/go-git.v4/plumbing/format/index" + "gopkg.in/src-d/go-git.v4/storage/filesystem/internal/dotgit" +) + +type IndexStorage struct { + dir *dotgit.DotGit +} + +func (s *IndexStorage) SetIndex(idx *index.Index) error { + f, err := s.dir.IndexWriter() + if err != nil { + return err + } + + defer f.Close() + + e := index.NewEncoder(f) + return e.Encode(idx) +} + +func (s *IndexStorage) Index() (*index.Index, 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 f.Close() + + d := index.NewDecoder(f) + return idx, d.Decode(idx) +} |