sync: overlap check is now filter-sensitive
Previously, the overlap check was based on simple prefix checks of the source and destination paths. Now it actually checks whether the destination is excluded via any filter rule or a "--exclude-if-present"-file.
This commit is contained in:
parent
2781f8e2f1
commit
3ccf222acb
4 changed files with 184 additions and 1 deletions
|
@ -1442,6 +1442,61 @@ func TestSyncOverlap(t *testing.T) {
|
|||
checkErr(Sync(ctx, FremoteSync, FremoteSync, false))
|
||||
}
|
||||
|
||||
// Test a sync with filtered overlap
|
||||
func TestSyncOverlapWithFilter(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
r := fstest.NewRun(t)
|
||||
defer r.Finalise()
|
||||
|
||||
fi, err := filter.NewFilter(nil)
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, fi.Add(false, "/rclone-sync-test/"))
|
||||
require.NoError(t, fi.Add(false, "*/layer2/"))
|
||||
fi.Opt.ExcludeFile = ".ignore"
|
||||
ctx = filter.ReplaceConfig(ctx, fi)
|
||||
|
||||
subRemoteName := r.FremoteName + "/rclone-sync-test"
|
||||
FremoteSync, err := fs.NewFs(ctx, subRemoteName)
|
||||
require.NoError(t, FremoteSync.Mkdir(ctx, ""))
|
||||
require.NoError(t, err)
|
||||
|
||||
subRemoteName2 := r.FremoteName + "/rclone-sync-test-include/layer2"
|
||||
FremoteSync2, err := fs.NewFs(ctx, subRemoteName2)
|
||||
require.NoError(t, FremoteSync2.Mkdir(ctx, ""))
|
||||
require.NoError(t, err)
|
||||
|
||||
subRemoteName3 := r.FremoteName + "/rclone-sync-test-ignore-file"
|
||||
FremoteSync3, err := fs.NewFs(ctx, subRemoteName3)
|
||||
require.NoError(t, FremoteSync3.Mkdir(ctx, ""))
|
||||
require.NoError(t, err)
|
||||
r.WriteObject(context.Background(), "/rclone-sync-test-ignore-file/.ignore", "-", t1)
|
||||
|
||||
checkErr := func(err error) {
|
||||
require.Error(t, err)
|
||||
assert.True(t, fserrors.IsFatalError(err))
|
||||
assert.Equal(t, fs.ErrorOverlapping.Error(), err.Error())
|
||||
}
|
||||
|
||||
checkNoErr := func(err error) {
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
checkNoErr(Sync(ctx, FremoteSync, r.Fremote, false))
|
||||
checkErr(Sync(ctx, r.Fremote, FremoteSync, false))
|
||||
checkErr(Sync(ctx, r.Fremote, r.Fremote, false))
|
||||
checkErr(Sync(ctx, FremoteSync, FremoteSync, false))
|
||||
|
||||
checkNoErr(Sync(ctx, FremoteSync2, r.Fremote, false))
|
||||
checkErr(Sync(ctx, r.Fremote, FremoteSync2, false))
|
||||
checkErr(Sync(ctx, r.Fremote, r.Fremote, false))
|
||||
checkErr(Sync(ctx, FremoteSync2, FremoteSync2, false))
|
||||
|
||||
checkNoErr(Sync(ctx, FremoteSync3, r.Fremote, false))
|
||||
checkErr(Sync(ctx, r.Fremote, FremoteSync3, false))
|
||||
checkErr(Sync(ctx, r.Fremote, r.Fremote, false))
|
||||
checkErr(Sync(ctx, FremoteSync3, FremoteSync3, false))
|
||||
}
|
||||
|
||||
// Test with CompareDest set
|
||||
func TestSyncCompareDest(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue