mirror of
https://github.com/rclone/rclone.git
synced 2025-12-06 00:03:32 +00:00
Compare commits
3 Commits
dependabot
...
fix-7827-h
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1bdeabfa46 | ||
|
|
656ef8952f | ||
|
|
010ed973df |
@@ -48,6 +48,7 @@ func (o *Object) SetModTime(ctx context.Context, modTime time.Time) error {
|
|||||||
realpath := o.fs.realpath(o.Remote())
|
realpath := o.fs.realpath(o.Remote())
|
||||||
err := o.fs.client.Chtimes(realpath, modTime, modTime)
|
err := o.fs.client.Chtimes(realpath, modTime, modTime)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
fs.Errorf(o, "SetModTime: ChTimes(%q, %v, %v) returned error: %v", realpath, modTime, modTime, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
o.modTime = modTime
|
o.modTime = modTime
|
||||||
@@ -113,31 +114,49 @@ func (o *Object) Update(ctx context.Context, in io.Reader, src fs.ObjectInfo, op
|
|||||||
|
|
||||||
err := o.fs.client.MkdirAll(dirname, 0755)
|
err := o.fs.client.MkdirAll(dirname, 0755)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
fs.Errorf(o, "update: MkdirAll(%q, 0755) returned error: %v", dirname, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = o.fs.client.Stat(realpath)
|
_, err = o.fs.client.Stat(realpath)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
fs.Errorf(o, "update: Stat(%q) returned error: %v", realpath, err)
|
||||||
err = o.fs.client.Remove(realpath)
|
err = o.fs.client.Remove(realpath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
fs.Errorf(o, "update: Remove(%q) returned error: %v", realpath, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
out, err := o.fs.client.Create(realpath)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
cleanup := func() {
|
cleanup := func() {
|
||||||
rerr := o.fs.client.Remove(realpath)
|
rerr := o.fs.client.Remove(realpath)
|
||||||
if rerr != nil {
|
if rerr != nil {
|
||||||
|
fs.Errorf(o, "update: cleanup: Remove(%q) returned error: %v", realpath, err)
|
||||||
fs.Errorf(o.fs, "failed to remove [%v]: %v", realpath, rerr)
|
fs.Errorf(o.fs, "failed to remove [%v]: %v", realpath, rerr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = io.Copy(out, in)
|
var out *hdfs.FileWriter
|
||||||
|
err = o.fs.pacer.Call(func() (bool, error) {
|
||||||
|
if out != nil {
|
||||||
|
_ = out.Close()
|
||||||
|
out = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
out, err = o.fs.client.Create(realpath)
|
||||||
|
if err != nil {
|
||||||
|
fs.Errorf(o, "update: Create(%q) returned error: %v", realpath, err)
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = io.Copy(out, in)
|
||||||
|
if err == nil {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
return errors.Is(err, io.ErrUnexpectedEOF), err
|
||||||
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
fs.Errorf(o, "update: io.Copy returned error: %v", err)
|
||||||
cleanup()
|
cleanup()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -160,21 +179,25 @@ func (o *Object) Update(ctx context.Context, in io.Reader, src fs.ObjectInfo, op
|
|||||||
return errors.Is(err, hdfs.ErrReplicating), err
|
return errors.Is(err, hdfs.ErrReplicating), err
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
fs.Errorf(o, "update: Close(%#v) returned error: %v", out, err)
|
||||||
cleanup()
|
cleanup()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
info, err := o.fs.client.Stat(realpath)
|
info, err := o.fs.client.Stat(realpath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
fs.Errorf(o, "update: Stat#2(%q) returned error: %v", realpath, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = o.SetModTime(ctx, src.ModTime(ctx))
|
err = o.SetModTime(ctx, src.ModTime(ctx))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
fs.Errorf(o, "update: SetModTime(%v) returned error: %v", src.ModTime(ctx), err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
o.size = info.Size()
|
o.size = info.Size()
|
||||||
|
|
||||||
|
fs.Errorf(o, "update: returned no error")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user