Rework for recent codebase

This commit is contained in:
Alexander Neumann
2024-02-25 11:01:59 +01:00
parent 1de9b82850
commit 057b56a1b6
7 changed files with 39 additions and 31 deletions
+20 -20
View File
@@ -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
}