fix metadata generator
This commit is contained in:
parent
cb7f2dee54
commit
3e765a7943
4 changed files with 94 additions and 25 deletions
|
|
@ -43,9 +43,6 @@ func (p *preload) Read(data []byte) (n int, err error) {
|
|||
return
|
||||
}
|
||||
n, err = p.f.readToCache(data)
|
||||
if n < len(data) {
|
||||
_, err = p.f.Seek(p.f.offset, io.SeekStart)
|
||||
}
|
||||
p.written++
|
||||
return
|
||||
}
|
||||
|
|
@ -137,6 +134,9 @@ func (f *File) readToCache(p []byte) (n int, err error) {
|
|||
}
|
||||
f.md.AddChunk(f.offset, n)
|
||||
f.offset += int64(n)
|
||||
if n > 0 && n < len(p) {
|
||||
_, err = f.Seek(f.offset, io.SeekStart)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -37,13 +37,15 @@ type MetadataHandler struct {
|
|||
enc *json.Encoder
|
||||
}
|
||||
|
||||
func MetadataGenerator(file string, dst provider.FS) error {
|
||||
func MetadataGenerator(file string, dst provider.FS, fstat, encrypted bool) error {
|
||||
if !filepath.IsAbs(file) {
|
||||
return errors.New("metadata path is not absolute")
|
||||
}
|
||||
_, err := dst.Fstat(0)
|
||||
if err == provider.ErrFstat {
|
||||
return err
|
||||
if fstat {
|
||||
_, err := dst.Fstat(0)
|
||||
if err == provider.ErrFstat {
|
||||
return err
|
||||
}
|
||||
}
|
||||
f, err := os.OpenFile(file, os.O_RDWR|os.O_CREATE, 0o640)
|
||||
if err != nil {
|
||||
|
|
@ -56,7 +58,11 @@ func MetadataGenerator(file string, dst provider.FS) error {
|
|||
}
|
||||
enc := json.NewEncoder(f)
|
||||
md := make(map[string]*Metadata)
|
||||
fs.WalkDir(provider.WalkFS(dst), ".", func(path string, d stdfs.DirEntry, err error) error {
|
||||
base := "."
|
||||
if encrypted {
|
||||
base = ""
|
||||
}
|
||||
fs.WalkDir(provider.WalkFS(dst), base, func(path string, d stdfs.DirEntry, err error) error {
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
|
@ -74,11 +80,18 @@ func MetadataGenerator(file string, dst provider.FS) error {
|
|||
return nil
|
||||
}
|
||||
size := fi.Size()
|
||||
blocks, err := dst.Fstat(f.Fd())
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
if size <= blocks*512 {
|
||||
if fstat {
|
||||
blocks, err := dst.Fstat(f.Fd())
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
if size <= blocks*512 {
|
||||
md[strings.TrimPrefix(path, dst.Root())] = &Metadata{
|
||||
Size: size,
|
||||
Chunks: chunk.Chunks{{0, size}},
|
||||
}
|
||||
}
|
||||
} else {
|
||||
md[strings.TrimPrefix(path, dst.Root())] = &Metadata{
|
||||
Size: size,
|
||||
Chunks: chunk.Chunks{{0, size}},
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue