forked from TrueCloudLab/rclone
test changenotify: add command to help debugging changenotify
This commit is contained in:
parent
f8884a7200
commit
4a9469a3dc
2 changed files with 55 additions and 0 deletions
|
@ -54,6 +54,7 @@ import (
|
||||||
_ "github.com/rclone/rclone/cmd/size"
|
_ "github.com/rclone/rclone/cmd/size"
|
||||||
_ "github.com/rclone/rclone/cmd/sync"
|
_ "github.com/rclone/rclone/cmd/sync"
|
||||||
_ "github.com/rclone/rclone/cmd/test"
|
_ "github.com/rclone/rclone/cmd/test"
|
||||||
|
_ "github.com/rclone/rclone/cmd/test/changenotify"
|
||||||
_ "github.com/rclone/rclone/cmd/test/histogram"
|
_ "github.com/rclone/rclone/cmd/test/histogram"
|
||||||
_ "github.com/rclone/rclone/cmd/test/info"
|
_ "github.com/rclone/rclone/cmd/test/info"
|
||||||
_ "github.com/rclone/rclone/cmd/test/makefiles"
|
_ "github.com/rclone/rclone/cmd/test/makefiles"
|
||||||
|
|
54
cmd/test/changenotify/changenotify.go
Normal file
54
cmd/test/changenotify/changenotify.go
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
// Package changenotify tests rclone's changenotify support
|
||||||
|
package changenotify
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"errors"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/rclone/rclone/cmd"
|
||||||
|
"github.com/rclone/rclone/cmd/test"
|
||||||
|
"github.com/rclone/rclone/fs"
|
||||||
|
"github.com/rclone/rclone/fs/config/flags"
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
pollInterval = 10 * time.Second
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
test.Command.AddCommand(commandDefinition)
|
||||||
|
cmdFlags := commandDefinition.Flags()
|
||||||
|
flags.DurationVarP(cmdFlags, &pollInterval, "poll-interval", "", pollInterval, "Time to wait between polling for changes.")
|
||||||
|
}
|
||||||
|
|
||||||
|
var commandDefinition = &cobra.Command{
|
||||||
|
Use: "changenotify remote:",
|
||||||
|
Short: `Log any change notify requests for the remote passed in.`,
|
||||||
|
RunE: func(command *cobra.Command, args []string) error {
|
||||||
|
cmd.CheckArgs(1, 1, command, args)
|
||||||
|
f := cmd.NewFsSrc(args)
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
|
// Start polling function
|
||||||
|
features := f.Features()
|
||||||
|
if do := features.ChangeNotify; do != nil {
|
||||||
|
pollChan := make(chan time.Duration)
|
||||||
|
do(ctx, changeNotify, pollChan)
|
||||||
|
pollChan <- pollInterval
|
||||||
|
fs.Logf(nil, "Waiting for changes, polling every %v", pollInterval)
|
||||||
|
} else {
|
||||||
|
return errors.New("poll-interval is not supported by this remote")
|
||||||
|
}
|
||||||
|
select {}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// changeNotify invalidates the directory cache for the relativePath
|
||||||
|
// passed in.
|
||||||
|
//
|
||||||
|
// if entryType is a directory it invalidates the parent of the directory too.
|
||||||
|
func changeNotify(relativePath string, entryType fs.EntryType) {
|
||||||
|
fs.Logf(nil, "%q: %v", relativePath, entryType)
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue