sync: don't update mod times if --dry-run set - fixes #1100

This commit is contained in:
Nick Craig-Wood 2017-02-15 23:09:44 +00:00
parent f15c6b68b6
commit b52c80e85c
2 changed files with 26 additions and 10 deletions

View File

@ -172,17 +172,21 @@ func equal(src, dst Object, sizeOnly, checkSum bool) bool {
// mod time differs but hash is the same to reset mod time if required
if !Config.NoUpdateModTime {
// Size and hash the same but mtime different so update the
// mtime of the dst object here
err := dst.SetModTime(srcModTime)
if err == ErrorCantSetModTime {
Debugf(src, "src and dst identical but can't set mod time without re-uploading")
return false
} else if err != nil {
Stats.Error()
Errorf(dst, "Failed to set modification time: %v", err)
if Config.DryRun {
Logf(src, "Not updating modification time as --dry-run")
} else {
Infof(src, "Updated modification time in destination")
// Size and hash the same but mtime different so update the
// mtime of the dst object here
err := dst.SetModTime(srcModTime)
if err == ErrorCantSetModTime {
Debugf(src, "src and dst identical but can't set mod time without re-uploading")
return false
} else if err != nil {
Stats.Error()
Errorf(dst, "Failed to set modification time: %v", err)
} else {
Infof(src, "Updated modification time in destination")
}
}
}
return true

View File

@ -308,10 +308,22 @@ func TestSyncAfterChangingModtimeOnly(t *testing.T) {
fstest.CheckItems(t, r.flocal, file1)
fstest.CheckItems(t, r.fremote, file2)
fs.Config.DryRun = true
defer func() { fs.Config.DryRun = false }()
fs.Stats.ResetCounters()
err := fs.Sync(r.fremote, r.flocal)
require.NoError(t, err)
fstest.CheckItems(t, r.flocal, file1)
fstest.CheckItems(t, r.fremote, file2)
fs.Config.DryRun = false
fs.Stats.ResetCounters()
err = fs.Sync(r.fremote, r.flocal)
require.NoError(t, err)
fstest.CheckItems(t, r.flocal, file1)
fstest.CheckItems(t, r.fremote, file1)
}