mirror of
https://codeberg.org/shroff/phylum.git
synced 2026-01-04 10:39:47 -06:00
[server][core] fix content copying (close streams)
This commit is contained in:
@@ -508,7 +508,6 @@ func (f filesystem) Copy(src Resource, target string, id uuid.UUID, recursive, o
|
||||
return err
|
||||
}
|
||||
if !src.Dir {
|
||||
logrus.Info("Added for copy: " + src.ID.String())
|
||||
copy[src.ID] = id
|
||||
}
|
||||
|
||||
@@ -539,31 +538,14 @@ func (f filesystem) Copy(src Resource, target string, id uuid.UUID, recursive, o
|
||||
})
|
||||
|
||||
if e == nil {
|
||||
for k, v := range copy {
|
||||
src, err := f.ResourceByID(k)
|
||||
if err != nil {
|
||||
logrus.Warn("Unable to get " + k.String() + ": " + err.Error())
|
||||
continue
|
||||
func() {
|
||||
for k, v := range copy {
|
||||
if _, err := f.copyContents(k, v); err != nil {
|
||||
logrus.Warn("unable to copy " + k.String() + " to " + v.String() + ": " + err.Error())
|
||||
}
|
||||
}
|
||||
dest, err := f.ResourceByID(v)
|
||||
if err != nil {
|
||||
logrus.Warn("Unable to get " + v.String() + ": " + err.Error())
|
||||
continue
|
||||
}
|
||||
in, err := f.OpenRead(src, 0, -1)
|
||||
if err != nil {
|
||||
logrus.Warn("Unable to open " + k.String() + ": " + err.Error())
|
||||
continue
|
||||
}
|
||||
out, err := f.OpenWrite(dest)
|
||||
if err != nil {
|
||||
logrus.Warn("Unable to open " + v.String() + ": " + err.Error())
|
||||
continue
|
||||
}
|
||||
if _, err := io.Copy(out, in); err != nil {
|
||||
logrus.Warn("Unable to copy " + k.String() + " to " + v.String() + ": " + err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
}()
|
||||
} else {
|
||||
logrus.Warn(e)
|
||||
}
|
||||
@@ -571,6 +553,29 @@ func (f filesystem) Copy(src Resource, target string, id uuid.UUID, recursive, o
|
||||
return
|
||||
}
|
||||
|
||||
func (f filesystem) copyContents(k, v uuid.UUID) (int64, error) {
|
||||
src, err := f.ResourceByID(k)
|
||||
if err != nil {
|
||||
return 0, errors.New("unable to get " + k.String() + ": " + err.Error())
|
||||
}
|
||||
dest, err := f.ResourceByID(v)
|
||||
if err != nil {
|
||||
return 0, errors.New("unable to get " + v.String() + ": " + err.Error())
|
||||
}
|
||||
in, err := f.OpenRead(src, 0, -1)
|
||||
if err != nil {
|
||||
return 0, errors.New("Unable to open " + k.String() + ": " + err.Error())
|
||||
}
|
||||
defer in.Close()
|
||||
out, err := f.OpenWrite(dest)
|
||||
if err != nil {
|
||||
return 0, errors.New("Unable to open " + v.String() + ": " + err.Error())
|
||||
}
|
||||
defer out.Close()
|
||||
|
||||
return io.Copy(out, in)
|
||||
}
|
||||
|
||||
func (f filesystem) DiskUsage(r Resource) (DiskUsageInfo, error) {
|
||||
if info, err := f.db.DiskUsage(f.ctx, r.ID); err != nil {
|
||||
return DiskUsageInfo{}, err
|
||||
|
||||
Reference in New Issue
Block a user