mirror of
https://github.com/rclone/rclone.git
synced 2024-12-27 01:19:12 +01:00
local: add --local-no-check-updated to disable update checks #2206
This disables the `can't copy - source file is being updated` checks.
This commit is contained in:
parent
aeedacfb50
commit
d5b2ec32f1
@ -28,6 +28,7 @@ var (
|
|||||||
followSymlinks = flags.BoolP("copy-links", "L", false, "Follow symlinks and copy the pointed to item.")
|
followSymlinks = flags.BoolP("copy-links", "L", false, "Follow symlinks and copy the pointed to item.")
|
||||||
skipSymlinks = flags.BoolP("skip-links", "", false, "Don't warn about skipped symlinks.")
|
skipSymlinks = flags.BoolP("skip-links", "", false, "Don't warn about skipped symlinks.")
|
||||||
noUTFNorm = flags.BoolP("local-no-unicode-normalization", "", false, "Don't apply unicode normalization to paths and filenames")
|
noUTFNorm = flags.BoolP("local-no-unicode-normalization", "", false, "Don't apply unicode normalization to paths and filenames")
|
||||||
|
noCheckUpdated = flags.BoolP("local-no-check-updated", "", false, "Don't check to see if the files change during upload")
|
||||||
)
|
)
|
||||||
|
|
||||||
// Constants
|
// Constants
|
||||||
@ -673,16 +674,18 @@ type localOpenFile struct {
|
|||||||
|
|
||||||
// Read bytes from the object - see io.Reader
|
// Read bytes from the object - see io.Reader
|
||||||
func (file *localOpenFile) Read(p []byte) (n int, err error) {
|
func (file *localOpenFile) Read(p []byte) (n int, err error) {
|
||||||
// Check if file has the same size and modTime
|
if !*noCheckUpdated {
|
||||||
fi, err := file.fd.Stat()
|
// Check if file has the same size and modTime
|
||||||
if err != nil {
|
fi, err := file.fd.Stat()
|
||||||
return 0, errors.Wrap(err, "can't read status of source file while transferring")
|
if err != nil {
|
||||||
}
|
return 0, errors.Wrap(err, "can't read status of source file while transferring")
|
||||||
if file.o.size != fi.Size() {
|
}
|
||||||
return 0, errors.Errorf("can't copy - source file is being updated (size changed from %d to %d)", file.o.size, fi.Size())
|
if file.o.size != fi.Size() {
|
||||||
}
|
return 0, errors.Errorf("can't copy - source file is being updated (size changed from %d to %d)", file.o.size, fi.Size())
|
||||||
if !file.o.modTime.Equal(fi.ModTime()) {
|
}
|
||||||
return 0, errors.Errorf("can't copy - source file is being updated (mod time changed from %v to %v)", file.o.modTime, fi.ModTime())
|
if !file.o.modTime.Equal(fi.ModTime()) {
|
||||||
|
return 0, errors.Errorf("can't copy - source file is being updated (mod time changed from %v to %v)", file.o.modTime, fi.ModTime())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
n, err = file.in.Read(p)
|
n, err = file.in.Read(p)
|
||||||
|
@ -29,8 +29,10 @@ func TestMapper(t *testing.T) {
|
|||||||
})
|
})
|
||||||
assert.Equal(t, "potato", m.Load("potato"))
|
assert.Equal(t, "potato", m.Load("potato"))
|
||||||
assert.Equal(t, "-r?'a´o¨", m.Load("-r'áö"))
|
assert.Equal(t, "-r?'a´o¨", m.Load("-r'áö"))
|
||||||
|
}
|
||||||
|
|
||||||
// Test copy with source file that's updating
|
// Test copy with source file that's updating
|
||||||
|
func TestUpdatingCheck(t *testing.T) {
|
||||||
r := fstest.NewRun(t)
|
r := fstest.NewRun(t)
|
||||||
defer r.Finalise()
|
defer r.Finalise()
|
||||||
filePath := "sub dir/local test"
|
filePath := "sub dir/local test"
|
||||||
@ -59,4 +61,16 @@ func TestMapper(t *testing.T) {
|
|||||||
r.WriteFile(filePath, "content updated", time.Now())
|
r.WriteFile(filePath, "content updated", time.Now())
|
||||||
_, err = in.Read(buf)
|
_, err = in.Read(buf)
|
||||||
require.Errorf(t, err, "can't copy - source file is being updated")
|
require.Errorf(t, err, "can't copy - source file is being updated")
|
||||||
|
|
||||||
|
// turn the checking off and try again
|
||||||
|
|
||||||
|
*noCheckUpdated = true
|
||||||
|
defer func() {
|
||||||
|
*noCheckUpdated = false
|
||||||
|
}()
|
||||||
|
|
||||||
|
r.WriteFile(filePath, "content updated", time.Now())
|
||||||
|
_, err = in.Read(buf)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -120,6 +120,18 @@ $ rclone -L ls /tmp/a
|
|||||||
6 b/one
|
6 b/one
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### --local-no-check-updated ####
|
||||||
|
|
||||||
|
Don't check to see if the files change during upload.
|
||||||
|
|
||||||
|
Normally rclone checks the size and modification time of files as they
|
||||||
|
are being uploaded and aborts with a message which starts `can't copy
|
||||||
|
- source file is being updated` if the file changes during upload.
|
||||||
|
|
||||||
|
However on some file systems this modification time check may fail (eg
|
||||||
|
[Glusterfs #2206](https://github.com/ncw/rclone/issues/2206)) so this
|
||||||
|
check can be disabled with this flag.
|
||||||
|
|
||||||
#### --local-no-unicode-normalization ####
|
#### --local-no-unicode-normalization ####
|
||||||
|
|
||||||
This flag is deprecated now. Rclone no longer normalizes unicode file
|
This flag is deprecated now. Rclone no longer normalizes unicode file
|
||||||
|
Loading…
Reference in New Issue
Block a user