Skip to content
This repository was archived by the owner on Sep 11, 2020. It is now read-only.

Commit b713101

Browse files
authored
Merge pull request #902 from jfontan/feature/new-packfile-parser
Bugfixes and IndexStorage
2 parents a08061a + 3657a32 commit b713101

File tree

4 files changed

+49
-135
lines changed

4 files changed

+49
-135
lines changed

plumbing/format/idxfile/idxfile.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ func (idx *MemoryIndex) findHashIndex(h plumbing.Hash) int {
8787
low = mid + 1
8888
}
8989

90-
if low > high {
90+
if low >= high {
9191
break
9292
}
9393
}

plumbing/format/packfile/decoder.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -457,7 +457,7 @@ func (d *Decoder) recallByOffset(o int64) (plumbing.EncodedObject, error) {
457457

458458
func (d *Decoder) recallByHash(h plumbing.Hash) (plumbing.EncodedObject, error) {
459459
if d.s.IsSeekable {
460-
if offset, err := d.idx.FindOffset(h); err != nil {
460+
if offset, err := d.idx.FindOffset(h); err == nil {
461461
return d.DecodeObjectAt(offset)
462462
}
463463
}

plumbing/format/packfile/index_test.go

Lines changed: 0 additions & 133 deletions
This file was deleted.

storage/filesystem/index.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package filesystem
2+
3+
import (
4+
"os"
5+
6+
"gopkg.in/src-d/go-git.v4/plumbing/format/index"
7+
"gopkg.in/src-d/go-git.v4/storage/filesystem/dotgit"
8+
"gopkg.in/src-d/go-git.v4/utils/ioutil"
9+
)
10+
11+
type IndexStorage struct {
12+
dir *dotgit.DotGit
13+
}
14+
15+
func (s *IndexStorage) SetIndex(idx *index.Index) (err error) {
16+
f, err := s.dir.IndexWriter()
17+
if err != nil {
18+
return err
19+
}
20+
21+
defer ioutil.CheckClose(f, &err)
22+
23+
e := index.NewEncoder(f)
24+
err = e.Encode(idx)
25+
return err
26+
}
27+
28+
func (s *IndexStorage) Index() (i *index.Index, err error) {
29+
idx := &index.Index{
30+
Version: 2,
31+
}
32+
33+
f, err := s.dir.Index()
34+
if err != nil {
35+
if os.IsNotExist(err) {
36+
return idx, nil
37+
}
38+
39+
return nil, err
40+
}
41+
42+
defer ioutil.CheckClose(f, &err)
43+
44+
d := index.NewDecoder(f)
45+
err = d.Decode(idx)
46+
return idx, err
47+
}

0 commit comments

Comments
 (0)