diff --git a/backend/compress/compress.go b/backend/compress/compress.go index 6d99604b8..f635c5e59 100644 --- a/backend/compress/compress.go +++ b/backend/compress/compress.go @@ -257,6 +257,16 @@ func isMetadataFile(filename string) bool { return strings.HasSuffix(filename, metaFileExt) } +// Checks whether a file is a metadata file and returns the original +// file name and a flag indicating whether it was a metadata file or +// not. +func unwrapMetadataFile(filename string) (string, bool) { + if !isMetadataFile(filename) { + return "", false + } + return filename[:len(filename)-len(metaFileExt)], true +} + // makeDataName generates the file name for a data file with specified compression mode func makeDataName(remote string, size int64, mode int) (newRemote string) { if mode != Uncompressed { @@ -979,7 +989,8 @@ func (f *Fs) ChangeNotify(ctx context.Context, notifyFunc func(string, fs.EntryT wrappedNotifyFunc := func(path string, entryType fs.EntryType) { fs.Logf(f, "path %q entryType %d", path, entryType) var ( - wrappedPath string + wrappedPath string + isMetadataFile bool ) switch entryType { case fs.EntryDirectory: @@ -987,7 +998,10 @@ func (f *Fs) ChangeNotify(ctx context.Context, notifyFunc func(string, fs.EntryT case fs.EntryObject: // Note: All we really need to do to monitor the object is to check whether the metadata changed, // as the metadata contains the hash. This will work unless there's a hash collision and the sizes stay the same. - wrappedPath = makeMetadataName(path) + wrappedPath, isMetadataFile = unwrapMetadataFile(path) + if !isMetadataFile { + return + } default: fs.Errorf(path, "press ChangeNotify: ignoring unknown EntryType %d", entryType) return