diff options
author | Máximo Cuadros <mcuadros@gmail.com> | 2016-08-26 00:43:17 +0200 |
---|---|---|
committer | Máximo Cuadros <mcuadros@gmail.com> | 2016-08-26 00:43:17 +0200 |
commit | a97ca42cbce377b5725ecc41e4539fc7e263b90d (patch) | |
tree | bea68575b221b80b32fb74e8af584c89802f5586 /tree.go | |
parent | a3418c5e0a3c6e925b5a4fb3ecb1d3db56408d1a (diff) | |
download | go-git-a97ca42cbce377b5725ecc41e4539fc7e263b90d.tar.gz |
Tree, fix modes
Diffstat (limited to 'tree.go')
-rw-r--r-- | tree.go | 21 |
1 files changed, 19 insertions, 2 deletions
@@ -167,7 +167,7 @@ func (t *Tree) Decode(o core.Object) (err error) { return err } - fm, err := strconv.ParseInt(mode[:len(mode)-1], 8, 32) + fm, err := t.decodeFileMode(mode[:len(mode)-1]) if err != nil && err != io.EOF { return err } @@ -185,7 +185,7 @@ func (t *Tree) Decode(o core.Object) (err error) { baseName := name[:len(name)-1] t.Entries = append(t.Entries, TreeEntry{ Hash: hash, - Mode: os.FileMode(fm), + Mode: fm, Name: baseName, }) } @@ -193,6 +193,23 @@ func (t *Tree) Decode(o core.Object) (err error) { return nil } +func (t *Tree) decodeFileMode(mode string) (os.FileMode, error) { + fm, err := strconv.ParseInt(mode, 8, 32) + if err != nil && err != io.EOF { + return 0, err + } + + m := os.FileMode(fm) + switch fm { + case 0040000: //tree + m = m | os.ModeDir + case 0120000: //symlink + m = m | os.ModeSymlink + } + + return m, nil +} + func (t *Tree) buildMap() { t.m = make(map[string]*TreeEntry) for i := 0; i < len(t.Entries); i++ { |