소스 검색

[dav] Account for seek in pure git files

cgars 7 년 전
부모
커밋
18a940d685
1개의 변경된 파일6개의 추가작업 그리고 2개의 파일을 삭제
  1. 6 2
      pkg/dav/dav.go

+ 6 - 2
pkg/dav/dav.go

@@ -18,6 +18,7 @@ import (
 	"golang.org/x/net/context"
 	"golang.org/x/net/webdav"
 	log "gopkg.in/clog.v1"
+	"io/ioutil"
 )
 
 var (
@@ -130,6 +131,7 @@ func (f *GinFile) read(p []byte) (int, error) {
 		return 0, err
 	}
 	// todo: read with pipes
+	io.CopyN(ioutil.Discard, data, f.seekoset)
 	n, err := data.Read(p)
 	if err != nil {
 		return n, err
@@ -157,8 +159,7 @@ func (f *GinFile) Read(p []byte) (int, error) {
 		f.afp.Seek(f.seekoset, io.SeekStart)
 		return f.afp.Read(p)
 	}
-	copy(p, tmp[f.seekoset:])
-	n = n - int(f.seekoset)
+	copy(p, tmp)
 	f.Seek(int64(n), io.SeekCurrent)
 	return n, nil
 }
@@ -253,7 +254,10 @@ func (f GinFile) Stat() (os.FileInfo, error) {
 		return GinFinfo{TreeEntry: f.trentry, LChange: f.LChange}, nil
 	}
 	peek := make([]byte, ANNEXPEEKSIZE)
+	offset := f.seekoset
+	f.seekoset = 0
 	n, err := f.read(peek)
+	f.seekoset = offset
 	if err != nil {
 		return nil, err
 	}