From 057b56a1b63c9c4447f3fe478fdc09d55b372fd1 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Sat, 10 Feb 2024 21:53:21 +0100 Subject: [PATCH] Rework for recent codebase --- cmd/restic/cmd_webdav.go | 40 ++++++++++++++++++------------------- go.mod | 8 ++++---- go.sum | 8 ++++++++ internal/webdav/dir.go | 4 ++-- internal/webdav/file.go | 4 ++-- internal/webdav/fileinfo.go | 2 +- internal/webdav/fs.go | 4 ++-- 7 files changed, 39 insertions(+), 31 deletions(-) diff --git a/cmd/restic/cmd_webdav.go b/cmd/restic/cmd_webdav.go index e48b82fe4..38c6ff504 100644 --- a/cmd/restic/cmd_webdav.go +++ b/cmd/restic/cmd_webdav.go @@ -1,6 +1,7 @@ package main import ( + "context" "log" "net/http" "os" @@ -22,7 +23,7 @@ The webdav command runs a WebDAV server for the reposiotry that you can then acc `, DisableAutoGenTag: true, RunE: func(cmd *cobra.Command, args []string) error { - return runWebDAV(webdavOptions, globalOptions, args) + return runWebDAV(cmd.Context(), webdavOptions, globalOptions, args) }, } @@ -30,10 +31,9 @@ The webdav command runs a WebDAV server for the reposiotry that you can then acc type WebDAVOptions struct { Listen string - Hosts []string - Tags restic.TagLists - Paths []string - SnapshotTemplate string + restic.SnapshotFilter + TimeTemplate string + PathTemplates []string } var webdavOptions WebDAVOptions @@ -41,32 +41,33 @@ var webdavOptions WebDAVOptions func init() { cmdRoot.AddCommand(cmdWebDAV) - webdavFlags := cmdWebDAV.Flags() - webdavFlags.StringVarP(&webdavOptions.Listen, "listen", "l", "localhost:3080", "set the listen host name and `address`") + fs := cmdWebDAV.Flags() + fs.StringVarP(&webdavOptions.Listen, "listen", "l", "localhost:3080", "set the listen host name and `address`") - webdavFlags.StringArrayVarP(&webdavOptions.Hosts, "host", "H", nil, `only consider snapshots for this host (can be specified multiple times)`) - webdavFlags.Var(&webdavOptions.Tags, "tag", "only consider snapshots which include this `taglist`") - webdavFlags.StringArrayVar(&webdavOptions.Paths, "path", nil, "only consider snapshots which include this (absolute) `path`") - webdavFlags.StringVar(&webdavOptions.SnapshotTemplate, "snapshot-template", time.RFC3339, "set `template` to use for snapshot dirs") + initMultiSnapshotFilter(fs, &webdavOptions.SnapshotFilter, true) + + fs.StringArrayVar(&webdavOptions.PathTemplates, "path-template", nil, "set `template` for path names (can be specified multiple times)") + fs.StringVar(&webdavOptions.TimeTemplate, "time-template", time.RFC3339, "set `template` to use for times") } -func runWebDAV(opts WebDAVOptions, gopts GlobalOptions, args []string) error { +func runWebDAV(ctx context.Context, opts WebDAVOptions, gopts GlobalOptions, args []string) error { if len(args) > 0 { return errors.Fatal("this command does not accept additional arguments") } - repo, err := OpenRepository(gopts) + repo, err := OpenRepository(ctx, gopts) if err != nil { return err } - lock, err := lockRepo(repo) + lock, ctx, err := lockRepo(ctx, repo, gopts.RetryLock, gopts.JSON) defer unlockRepo(lock) if err != nil { return err } - err = repo.LoadIndex(gopts.ctx) + bar := newIndexProgress(gopts.Quiet, gopts.JSON) + err = repo.LoadIndex(ctx, bar) if err != nil { return err } @@ -74,14 +75,13 @@ func runWebDAV(opts WebDAVOptions, gopts GlobalOptions, args []string) error { errorLogger := log.New(os.Stderr, "error log: ", log.Flags()) cfg := fuse.Config{ - Hosts: opts.Hosts, - Tags: opts.Tags, - Paths: opts.Paths, - SnapshotTemplate: opts.SnapshotTemplate, + Filter: opts.SnapshotFilter, + TimeTemplate: opts.TimeTemplate, + PathTemplates: opts.PathTemplates, } root := fuse.NewRoot(repo, cfg) - h, err := webdav.NewWebDAV(gopts.ctx, root) + h, err := webdav.NewWebDAV(ctx, root) if err != nil { return err } diff --git a/go.mod b/go.mod index afcbc427b..f9e95e8c8 100644 --- a/go.mod +++ b/go.mod @@ -25,12 +25,12 @@ require ( github.com/spf13/cobra v1.7.0 github.com/spf13/pflag v1.0.5 go.uber.org/automaxprocs v1.5.3 - golang.org/x/crypto v0.18.0 - golang.org/x/net v0.20.0 + golang.org/x/crypto v0.19.0 + golang.org/x/net v0.21.0 golang.org/x/oauth2 v0.16.0 golang.org/x/sync v0.6.0 - golang.org/x/sys v0.16.0 - golang.org/x/term v0.16.0 + golang.org/x/sys v0.17.0 + golang.org/x/term v0.17.0 golang.org/x/text v0.14.0 golang.org/x/time v0.5.0 google.golang.org/api v0.157.0 diff --git a/go.sum b/go.sum index fb70ac9d5..c98abbaa0 100644 --- a/go.sum +++ b/go.sum @@ -205,6 +205,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= +golang.org/x/crypto v0.19.0 h1:ENy+Az/9Y1vSrlrvBSyna3PITt4tiZLf7sgCjZBX7Wo= +golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -224,6 +226,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= +golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.16.0 h1:aDkGMBSYxElaoP81NpoUoz2oo2R2wHdZpGToUxfyQrQ= golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o= @@ -251,11 +255,15 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= +golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U= +golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= diff --git a/internal/webdav/dir.go b/internal/webdav/dir.go index 434bf9e4d..2f898b306 100644 --- a/internal/webdav/dir.go +++ b/internal/webdav/dir.go @@ -5,8 +5,8 @@ import ( "io" "os" - "bazil.org/fuse" - "bazil.org/fuse/fs" + "github.com/anacrolix/fuse" + "github.com/anacrolix/fuse/fs" "github.com/restic/restic/internal/debug" "golang.org/x/net/webdav" ) diff --git a/internal/webdav/file.go b/internal/webdav/file.go index 2e92c8440..4f4e4949e 100644 --- a/internal/webdav/file.go +++ b/internal/webdav/file.go @@ -5,8 +5,8 @@ import ( "io" "os" - "bazil.org/fuse" - "bazil.org/fuse/fs" + "github.com/anacrolix/fuse" + "github.com/anacrolix/fuse/fs" "github.com/restic/restic/internal/debug" "golang.org/x/net/webdav" ) diff --git a/internal/webdav/fileinfo.go b/internal/webdav/fileinfo.go index 375c29454..9f934486c 100644 --- a/internal/webdav/fileinfo.go +++ b/internal/webdav/fileinfo.go @@ -4,7 +4,7 @@ import ( "os" "time" - "bazil.org/fuse" + "github.com/anacrolix/fuse" ) // virtFileInfo is used to construct an os.FileInfo for a server. diff --git a/internal/webdav/fs.go b/internal/webdav/fs.go index 02dd92c3d..077d6675b 100644 --- a/internal/webdav/fs.go +++ b/internal/webdav/fs.go @@ -6,8 +6,8 @@ import ( "path" "strings" - "bazil.org/fuse" - fusefs "bazil.org/fuse/fs" + "github.com/anacrolix/fuse" + fusefs "github.com/anacrolix/fuse/fs" "github.com/restic/restic/internal/debug" "golang.org/x/net/webdav" )