aboutsummaryrefslogtreecommitdiffstats
path: root/storage/filesystem
diff options
context:
space:
mode:
authorJavi Fontan <jfontan@gmail.com>2018-07-27 12:24:09 +0200
committerJavi Fontan <jfontan@gmail.com>2018-07-27 12:24:09 +0200
commit3657a32e0ead55601a2af578abecd65dd2d8b64b (patch)
treee26b73542e52cc5619d69aaf64ee027a15b679ad /storage/filesystem
parent4b366ac48de72f63905c6e92e387677e83e97d5c (diff)
downloadgo-git-3657a32e0ead55601a2af578abecd65dd2d8b64b.tar.gz
storage/filesystem: add back IndexStorage
Signed-off-by: Javi Fontan <jfontan@gmail.com>
Diffstat (limited to 'storage/filesystem')
-rw-r--r--storage/filesystem/index.go47
1 files changed, 47 insertions, 0 deletions
diff --git a/storage/filesystem/index.go b/storage/filesystem/index.go
new file mode 100644
index 0000000..2ebf57e
--- /dev/null
+++ b/storage/filesystem/index.go
@@ -0,0 +1,47 @@
+package filesystem
+
+import (
+ "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)
+
+ e := index.NewEncoder(f)
+ 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(f)
+ err = d.Decode(idx)
+ return idx, err
+}