mirror of
https://github.com/kopia/kopia.git
synced 2026-01-28 00:08:04 -05:00
* webdav: added --atomic-writes (defaults to false) to assume WebDAV supports atomic writes * rclone: added --atomic-writes (defaults to true) This allows the provider to assume rclone backend supports atomic writes (most of them do).
46 lines
1.3 KiB
Go
46 lines
1.3 KiB
Go
package cli
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
|
|
"github.com/alecthomas/kingpin"
|
|
|
|
"github.com/kopia/kopia/repo/blob"
|
|
"github.com/kopia/kopia/repo/blob/webdav"
|
|
)
|
|
|
|
type storageWebDAVFlags struct {
|
|
options webdav.Options
|
|
connectFlat bool
|
|
}
|
|
|
|
func (c *storageWebDAVFlags) setup(_ storageProviderServices, cmd *kingpin.CmdClause) {
|
|
cmd.Flag("url", "URL of WebDAV server").Required().StringVar(&c.options.URL)
|
|
cmd.Flag("flat", "Use flat directory structure").BoolVar(&c.connectFlat)
|
|
cmd.Flag("webdav-username", "WebDAV username").Envar("KOPIA_WEBDAV_USERNAME").StringVar(&c.options.Username)
|
|
cmd.Flag("webdav-password", "WebDAV password").Envar("KOPIA_WEBDAV_PASSWORD").StringVar(&c.options.Password)
|
|
cmd.Flag("list-parallelism", "Set list parallelism").Hidden().IntVar(&c.options.ListParallelism)
|
|
cmd.Flag("atomic-writes", "Assume WebDAV provider implements atomic writes").BoolVar(&c.options.AtomicWrites)
|
|
}
|
|
|
|
func (c *storageWebDAVFlags) connect(ctx context.Context, isNew bool) (blob.Storage, error) {
|
|
wo := c.options
|
|
|
|
if wo.Username != "" && wo.Password == "" {
|
|
pass, err := askPass(os.Stdout, "Enter WebDAV password: ")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
wo.Password = pass
|
|
}
|
|
|
|
if c.connectFlat {
|
|
wo.DirectoryShards = []int{}
|
|
}
|
|
|
|
// nolint:wrapcheck
|
|
return webdav.New(ctx, &wo)
|
|
}
|