From df457f58025d3f159e793328c5913d68b7b0d65d Mon Sep 17 00:00:00 2001 From: Nick Craig-Wood Date: Wed, 26 Mar 2025 14:50:44 +0000 Subject: [PATCH] serve: make the servers self registering This is so that they can import cmd/serve without causing an import loop. The active servers can now be configured by commenting lines out in cmd/all/all.go like all the other commands. --- cmd/all/all.go | 9 +++++++++ cmd/serve/dlna/dlna.go | 2 ++ cmd/serve/docker/docker.go | 3 +++ cmd/serve/ftp/ftp.go | 2 ++ cmd/serve/http/http.go | 2 ++ cmd/serve/nfs/nfs.go | 2 ++ cmd/serve/restic/restic.go | 2 ++ cmd/serve/s3/s3.go | 2 ++ cmd/serve/serve.go | 34 ---------------------------------- cmd/serve/sftp/sftp.go | 2 ++ cmd/serve/webdav/webdav.go | 2 ++ 11 files changed, 28 insertions(+), 34 deletions(-) diff --git a/cmd/all/all.go b/cmd/all/all.go index 37b15c5c3..18c04eaf7 100644 --- a/cmd/all/all.go +++ b/cmd/all/all.go @@ -52,6 +52,15 @@ import ( _ "github.com/rclone/rclone/cmd/rmdirs" _ "github.com/rclone/rclone/cmd/selfupdate" _ "github.com/rclone/rclone/cmd/serve" + _ "github.com/rclone/rclone/cmd/serve/dlna" + _ "github.com/rclone/rclone/cmd/serve/docker" + _ "github.com/rclone/rclone/cmd/serve/ftp" + _ "github.com/rclone/rclone/cmd/serve/http" + _ "github.com/rclone/rclone/cmd/serve/nfs" + _ "github.com/rclone/rclone/cmd/serve/restic" + _ "github.com/rclone/rclone/cmd/serve/s3" + _ "github.com/rclone/rclone/cmd/serve/sftp" + _ "github.com/rclone/rclone/cmd/serve/webdav" _ "github.com/rclone/rclone/cmd/settier" _ "github.com/rclone/rclone/cmd/sha1sum" _ "github.com/rclone/rclone/cmd/size" diff --git a/cmd/serve/dlna/dlna.go b/cmd/serve/dlna/dlna.go index 199350877..a5406cbd4 100644 --- a/cmd/serve/dlna/dlna.go +++ b/cmd/serve/dlna/dlna.go @@ -19,6 +19,7 @@ import ( "github.com/anacrolix/dms/upnp" "github.com/anacrolix/log" "github.com/rclone/rclone/cmd" + "github.com/rclone/rclone/cmd/serve" "github.com/rclone/rclone/cmd/serve/dlna/data" "github.com/rclone/rclone/cmd/serve/dlna/dlnaflags" "github.com/rclone/rclone/fs" @@ -32,6 +33,7 @@ import ( func init() { dlnaflags.AddFlags(Command.Flags()) vfsflags.AddFlags(Command.Flags()) + serve.Command.AddCommand(Command) } // Command definition for cobra. diff --git a/cmd/serve/docker/docker.go b/cmd/serve/docker/docker.go index a13ceb490..6969e34d1 100644 --- a/cmd/serve/docker/docker.go +++ b/cmd/serve/docker/docker.go @@ -12,6 +12,7 @@ import ( "github.com/rclone/rclone/cmd" "github.com/rclone/rclone/cmd/mountlib" + "github.com/rclone/rclone/cmd/serve" "github.com/rclone/rclone/fs/config/flags" "github.com/rclone/rclone/vfs" "github.com/rclone/rclone/vfs/vfsflags" @@ -50,6 +51,8 @@ func init() { // Add common mount/vfs flags mountlib.AddFlags(cmdFlags) vfsflags.AddFlags(cmdFlags) + // Register with parent command + serve.Command.AddCommand(Command) } // Command definition for cobra diff --git a/cmd/serve/ftp/ftp.go b/cmd/serve/ftp/ftp.go index 99af1aef4..18dfcda6c 100644 --- a/cmd/serve/ftp/ftp.go +++ b/cmd/serve/ftp/ftp.go @@ -18,6 +18,7 @@ import ( "time" "github.com/rclone/rclone/cmd" + "github.com/rclone/rclone/cmd/serve" "github.com/rclone/rclone/cmd/serve/proxy" "github.com/rclone/rclone/cmd/serve/proxy/proxyflags" "github.com/rclone/rclone/fs" @@ -88,6 +89,7 @@ func init() { vfsflags.AddFlags(Command.Flags()) proxyflags.AddFlags(Command.Flags()) AddFlags(Command.Flags()) + serve.Command.AddCommand(Command) } // Command definition for cobra diff --git a/cmd/serve/http/http.go b/cmd/serve/http/http.go index cb3ac6ac3..f946d415d 100644 --- a/cmd/serve/http/http.go +++ b/cmd/serve/http/http.go @@ -15,6 +15,7 @@ import ( "github.com/go-chi/chi/v5/middleware" "github.com/rclone/rclone/cmd" + cmdserve "github.com/rclone/rclone/cmd/serve" "github.com/rclone/rclone/cmd/serve/proxy" "github.com/rclone/rclone/cmd/serve/proxy/proxyflags" "github.com/rclone/rclone/fs" @@ -56,6 +57,7 @@ func init() { libhttp.AddTemplateFlagsPrefix(flagSet, flagPrefix, &Opt.Template) vfsflags.AddFlags(flagSet) proxyflags.AddFlags(flagSet) + cmdserve.Command.AddCommand(Command) } // Command definition for cobra diff --git a/cmd/serve/nfs/nfs.go b/cmd/serve/nfs/nfs.go index 6e6878e3c..210ede534 100644 --- a/cmd/serve/nfs/nfs.go +++ b/cmd/serve/nfs/nfs.go @@ -14,6 +14,7 @@ import ( "strings" "github.com/rclone/rclone/cmd" + "github.com/rclone/rclone/cmd/serve" "github.com/rclone/rclone/fs" "github.com/rclone/rclone/fs/config/flags" "github.com/rclone/rclone/vfs" @@ -83,6 +84,7 @@ func AddFlags(flagSet *pflag.FlagSet) { func init() { vfsflags.AddFlags(Command.Flags()) AddFlags(Command.Flags()) + serve.Command.AddCommand(Command) } // Run the command diff --git a/cmd/serve/restic/restic.go b/cmd/serve/restic/restic.go index 1ef186a44..ef02574bd 100644 --- a/cmd/serve/restic/restic.go +++ b/cmd/serve/restic/restic.go @@ -16,6 +16,7 @@ import ( "github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5/middleware" "github.com/rclone/rclone/cmd" + cmdserve "github.com/rclone/rclone/cmd/serve" "github.com/rclone/rclone/fs" "github.com/rclone/rclone/fs/accounting" "github.com/rclone/rclone/fs/config/flags" @@ -60,6 +61,7 @@ func init() { flags.BoolVarP(flagSet, &Opt.AppendOnly, "append-only", "", false, "Disallow deletion of repository data", "") flags.BoolVarP(flagSet, &Opt.PrivateRepos, "private-repos", "", false, "Users can only access their private repo", "") flags.BoolVarP(flagSet, &Opt.CacheObjects, "cache-objects", "", true, "Cache listed objects", "") + cmdserve.Command.AddCommand(Command) } // Command definition for cobra diff --git a/cmd/serve/s3/s3.go b/cmd/serve/s3/s3.go index f1c15b772..6eb3ad582 100644 --- a/cmd/serve/s3/s3.go +++ b/cmd/serve/s3/s3.go @@ -6,6 +6,7 @@ import ( "strings" "github.com/rclone/rclone/cmd" + "github.com/rclone/rclone/cmd/serve" "github.com/rclone/rclone/cmd/serve/proxy/proxyflags" "github.com/rclone/rclone/fs" "github.com/rclone/rclone/fs/config/flags" @@ -41,6 +42,7 @@ func init() { flags.StringVarP(flagSet, &Opt.hashName, "etag-hash", "", Opt.hashName, "Which hash to use for the ETag, or auto or blank for off", "") flags.StringArrayVarP(flagSet, &Opt.authPair, "auth-key", "", Opt.authPair, "Set key pair for v4 authorization: access_key_id,secret_access_key", "") flags.BoolVarP(flagSet, &Opt.noCleanup, "no-cleanup", "", Opt.noCleanup, "Not to cleanup empty folder after object is deleted", "") + serve.Command.AddCommand(Command) } //go:embed serve_s3.md diff --git a/cmd/serve/serve.go b/cmd/serve/serve.go index c415499a0..7e39da585 100644 --- a/cmd/serve/serve.go +++ b/cmd/serve/serve.go @@ -5,44 +5,10 @@ import ( "errors" "github.com/rclone/rclone/cmd" - "github.com/rclone/rclone/cmd/serve/dlna" - "github.com/rclone/rclone/cmd/serve/docker" - "github.com/rclone/rclone/cmd/serve/ftp" - "github.com/rclone/rclone/cmd/serve/http" - "github.com/rclone/rclone/cmd/serve/nfs" - "github.com/rclone/rclone/cmd/serve/restic" - "github.com/rclone/rclone/cmd/serve/s3" - "github.com/rclone/rclone/cmd/serve/sftp" - "github.com/rclone/rclone/cmd/serve/webdav" "github.com/spf13/cobra" ) func init() { - Command.AddCommand(http.Command) - if webdav.Command != nil { - Command.AddCommand(webdav.Command) - } - if restic.Command != nil { - Command.AddCommand(restic.Command) - } - if dlna.Command != nil { - Command.AddCommand(dlna.Command) - } - if ftp.Command != nil { - Command.AddCommand(ftp.Command) - } - if sftp.Command != nil { - Command.AddCommand(sftp.Command) - } - if docker.Command != nil { - Command.AddCommand(docker.Command) - } - if nfs.Command != nil { - Command.AddCommand(nfs.Command) - } - if s3.Command != nil { - Command.AddCommand(s3.Command) - } cmd.Root.AddCommand(Command) } diff --git a/cmd/serve/sftp/sftp.go b/cmd/serve/sftp/sftp.go index 328e7b561..e73c68c6b 100644 --- a/cmd/serve/sftp/sftp.go +++ b/cmd/serve/sftp/sftp.go @@ -7,6 +7,7 @@ import ( "context" "github.com/rclone/rclone/cmd" + "github.com/rclone/rclone/cmd/serve" "github.com/rclone/rclone/cmd/serve/proxy" "github.com/rclone/rclone/cmd/serve/proxy/proxyflags" "github.com/rclone/rclone/fs" @@ -76,6 +77,7 @@ func init() { vfsflags.AddFlags(Command.Flags()) proxyflags.AddFlags(Command.Flags()) AddFlags(Command.Flags(), &Opt) + serve.Command.AddCommand(Command) } // Command definition for cobra diff --git a/cmd/serve/webdav/webdav.go b/cmd/serve/webdav/webdav.go index 348a97c35..d62da7abf 100644 --- a/cmd/serve/webdav/webdav.go +++ b/cmd/serve/webdav/webdav.go @@ -17,6 +17,7 @@ import ( chi "github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5/middleware" "github.com/rclone/rclone/cmd" + cmdserve "github.com/rclone/rclone/cmd/serve" "github.com/rclone/rclone/cmd/serve/proxy" "github.com/rclone/rclone/cmd/serve/proxy/proxyflags" "github.com/rclone/rclone/fs" @@ -67,6 +68,7 @@ func init() { proxyflags.AddFlags(flagSet) flags.StringVarP(flagSet, &Opt.HashName, "etag-hash", "", "", "Which hash to use for the ETag, or auto or blank for off", "") flags.BoolVarP(flagSet, &Opt.DisableGETDir, "disable-dir-list", "", false, "Disable HTML directory list on GET request for a directory", "") + cmdserve.Command.AddCommand(Command) } // Command definition for cobra