Skip to content

Commit b08327b

Browse files
committed
file, added field Mode
1 parent b35fc29 commit b08327b

File tree

4 files changed

+13
-14
lines changed

4 files changed

+13
-14
lines changed

file.go

+6-4
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,19 @@ package git
22

33
import (
44
"bytes"
5+
"os"
56
"strings"
67
)
78

89
// File represents git file objects.
910
type File struct {
1011
Name string
12+
Mode os.FileMode
1113
Blob
1214
}
1315

14-
func newFile(name string, b *Blob) *File {
15-
return &File{Name: name, Blob: *b}
16+
func newFile(name string, m os.FileMode, b *Blob) *File {
17+
return &File{Name: name, Mode: m, Blob: *b}
1618
}
1719

1820
// Contents returns the contents of a file as a string.
@@ -57,13 +59,13 @@ func NewFileIter(r *Repository, t *Tree) *FileIter {
5759

5860
func (iter *FileIter) Next() (*File, error) {
5961
for {
60-
name, _, obj, err := iter.w.Next()
62+
name, entry, obj, err := iter.w.Next()
6163
if err != nil {
6264
return nil, err
6365
}
6466

6567
if blob, ok := obj.(*Blob); ok {
66-
return newFile(name, blob), nil
68+
return newFile(name, entry.Mode, blob), nil
6769
}
6870
}
6971
}

file_test.go

+1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ func (s *SuiteFile) TestIter(c *C) {
5858
expected := t.files[k]
5959
file, err := iter.Next()
6060
c.Assert(err, IsNil, Commentf("subtest %d, iter %d, err=%v", i, k, err))
61+
c.Assert(file.Mode.String(), Equals, "-rw-r--r--")
6162
c.Assert(file.Hash.IsZero(), Equals, false)
6263
c.Assert(file.Hash, Equals, file.ID())
6364
c.Assert(file.Name, Equals, expected.Name, Commentf("subtest %d, iter %d, name=%s, expected=%s", i, k, file.Name, expected.Hash))

tree.go

+5-10
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,12 @@ type TreeEntry struct {
4141
// File returns the hash of the file identified by the `path` argument.
4242
// The path is interpreted as relative to the tree receiver.
4343
func (t *Tree) File(path string) (*File, error) {
44-
hash, err := t.findHash(path)
44+
e, err := t.findEntry(path)
4545
if err != nil {
4646
return nil, ErrFileNotFound
4747
}
4848

49-
obj, err := t.r.Storage.Get(*hash)
49+
obj, err := t.r.Storage.Get(e.Hash)
5050
if err != nil {
5151
if err == core.ObjectNotFoundErr {
5252
return nil, ErrFileNotFound // a git submodule
@@ -61,10 +61,10 @@ func (t *Tree) File(path string) (*File, error) {
6161
blob := &Blob{}
6262
blob.Decode(obj)
6363

64-
return newFile(path, blob), nil
64+
return newFile(path, e.Mode, blob), nil
6565
}
6666

67-
func (t *Tree) findHash(path string) (*core.Hash, error) {
67+
func (t *Tree) findEntry(path string) (*TreeEntry, error) {
6868
pathParts := strings.Split(path, "/")
6969

7070
var tree *Tree
@@ -75,12 +75,7 @@ func (t *Tree) findHash(path string) (*core.Hash, error) {
7575
}
7676
}
7777

78-
entry, err := tree.entry(pathParts[0])
79-
if err != nil {
80-
return nil, err
81-
}
82-
83-
return &entry.Hash, nil
78+
return tree.entry(pathParts[0])
8479
}
8580

8681
var errDirNotFound = errors.New("directory not found")

tree_test.go

+1
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ func (s *SuiteTree) TestFiles(c *C) {
264264
iter := tree.Files()
265265
defer iter.Close()
266266
for file, err := iter.Next(); err == nil; file, err = iter.Next() {
267+
c.Assert(file.Mode.String(), Equals, "-rw-r--r--")
267268
output = append(output, file.Name)
268269
}
269270
sort.Strings(output)

0 commit comments

Comments
 (0)