|
@@ -1,16 +1,17 @@
|
|
package dav
|
|
package dav
|
|
|
|
|
|
import (
|
|
import (
|
|
- "github.com/G-Node/gogs/pkg/context"
|
|
|
|
- "golang.org/x/net/webdav"
|
|
|
|
- "os"
|
|
|
|
"fmt"
|
|
"fmt"
|
|
|
|
+ "io"
|
|
"net/http"
|
|
"net/http"
|
|
- "github.com/G-Node/gogs/models"
|
|
|
|
|
|
+ "os"
|
|
"regexp"
|
|
"regexp"
|
|
- "github.com/G-Node/git-module"
|
|
|
|
"time"
|
|
"time"
|
|
- "io"
|
|
|
|
|
|
+
|
|
|
|
+ "github.com/G-Node/git-module"
|
|
|
|
+ "github.com/G-Node/gogs/models"
|
|
|
|
+ "github.com/G-Node/gogs/pkg/context"
|
|
|
|
+ "golang.org/x/net/webdav"
|
|
)
|
|
)
|
|
|
|
|
|
var (
|
|
var (
|
|
@@ -65,10 +66,10 @@ func (fs *GinFS) OpenFile(name string, flag int, perm os.FileMode) (webdav.File,
|
|
}
|
|
}
|
|
tree, _ := com.SubTree(path)
|
|
tree, _ := com.SubTree(path)
|
|
trentry, _ := com.GetTreeEntryByPath(path)
|
|
trentry, _ := com.GetTreeEntryByPath(path)
|
|
- return GinFile{trentry: trentry, tree: tree, LChange: com.Committer.When}, nil
|
|
|
|
|
|
+ return &GinFile{trentry: trentry, tree: tree, LChange: com.Committer.When}, nil
|
|
}
|
|
}
|
|
|
|
|
|
-func (fs GinFS) Stat(name string) (os.FileInfo, error) {
|
|
|
|
|
|
+func (fs *GinFS) Stat(name string) (os.FileInfo, error) {
|
|
f, err := fs.OpenFile(name, 0, 0)
|
|
f, err := fs.OpenFile(name, 0, 0)
|
|
if err != nil {
|
|
if err != nil {
|
|
return nil, err
|
|
return nil, err
|
|
@@ -84,27 +85,27 @@ type GinFile struct {
|
|
LChange time.Time
|
|
LChange time.Time
|
|
}
|
|
}
|
|
|
|
|
|
-func (f GinFile) Write(p []byte) (n int, err error) {
|
|
|
|
|
|
+func (f *GinFile) Write(p []byte) (n int, err error) {
|
|
return 0, fmt.Errorf("Write to GinFile not implemented (read only)")
|
|
return 0, fmt.Errorf("Write to GinFile not implemented (read only)")
|
|
}
|
|
}
|
|
|
|
|
|
-func (f GinFile) Close() error {
|
|
|
|
|
|
+func (f *GinFile) Close() error {
|
|
return nil
|
|
return nil
|
|
}
|
|
}
|
|
|
|
|
|
-func (f GinFile) Read(p []byte) (n int, err error) {
|
|
|
|
|
|
+func (f *GinFile) Read(p []byte) (n int, err error) {
|
|
if f.trentry.Type != git.OBJECT_BLOB {
|
|
if f.trentry.Type != git.OBJECT_BLOB {
|
|
return 0, fmt.Errorf("not a blob")
|
|
return 0, fmt.Errorf("not a blob")
|
|
}
|
|
}
|
|
data, err := f.trentry.Blob().Data()
|
|
data, err := f.trentry.Blob().Data()
|
|
- if err != nil{
|
|
|
|
|
|
+ if err != nil {
|
|
return 0, err
|
|
return 0, err
|
|
}
|
|
}
|
|
// todo: annex
|
|
// todo: annex
|
|
return data.Read(p)
|
|
return data.Read(p)
|
|
}
|
|
}
|
|
|
|
|
|
-func (f GinFile) Seek(offset int64, whence int) (int64, error) {
|
|
|
|
|
|
+func (f *GinFile) Seek(offset int64, whence int) (int64, error) {
|
|
switch whence {
|
|
switch whence {
|
|
case 0:
|
|
case 0:
|
|
f.seekoset = offset
|
|
f.seekoset = offset
|
|
@@ -121,7 +122,7 @@ func (f GinFile) Seek(offset int64, whence int) (int64, error) {
|
|
return 0, nil
|
|
return 0, nil
|
|
}
|
|
}
|
|
|
|
|
|
-func (f GinFile) Readdir(count int) ([]os.FileInfo, error) {
|
|
|
|
|
|
+func (f *GinFile) Readdir(count int) ([]os.FileInfo, error) {
|
|
ents, err := f.tree.ListEntries()
|
|
ents, err := f.tree.ListEntries()
|
|
if err != nil {
|
|
if err != nil {
|
|
return nil, err
|
|
return nil, err
|
|
@@ -148,17 +149,17 @@ func (f GinFile) Readdir(count int) ([]os.FileInfo, error) {
|
|
f.dirrcount = len(ents)
|
|
f.dirrcount = len(ents)
|
|
return infos, io.EOF
|
|
return infos, io.EOF
|
|
case f.dirrcount+count < len(ents):
|
|
case f.dirrcount+count < len(ents):
|
|
- infos, err := getFInfos(ents[f.dirrcount:f.dirrcount+count])
|
|
|
|
|
|
+ infos, err := getFInfos(ents[f.dirrcount : f.dirrcount+count])
|
|
if err != nil {
|
|
if err != nil {
|
|
return nil, err
|
|
return nil, err
|
|
}
|
|
}
|
|
- f.dirrcount = f.dirrcount+count
|
|
|
|
|
|
+ f.dirrcount = f.dirrcount + count
|
|
return infos, nil
|
|
return infos, nil
|
|
}
|
|
}
|
|
return nil, nil
|
|
return nil, nil
|
|
}
|
|
}
|
|
|
|
|
|
-func getFInfos(ents [] *git.TreeEntry) ([]os.FileInfo, error) {
|
|
|
|
|
|
+func getFInfos(ents []*git.TreeEntry) ([]os.FileInfo, error) {
|
|
infos := make([]os.FileInfo, len(ents))
|
|
infos := make([]os.FileInfo, len(ents))
|
|
for c, ent := range ents {
|
|
for c, ent := range ents {
|
|
finfo, err := GinFile{trentry: ent}.Stat()
|
|
finfo, err := GinFile{trentry: ent}.Stat()
|
|
@@ -190,7 +191,6 @@ func (i GinFinfo) Sys() interface{} {
|
|
return nil
|
|
return nil
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
func checkPerms(c *context.Context) error {
|
|
func checkPerms(c *context.Context) error {
|
|
return nil
|
|
return nil
|
|
}
|
|
}
|