mirror of https://github.com/restic/restic.git
vss: Add initial support for extended options
This commit is contained in:
parent
faffd15d13
commit
78dbc5ec58
|
@ -445,7 +445,16 @@ func findParentSnapshot(ctx context.Context, repo restic.ListerLoaderUnpacked, o
|
||||||
}
|
}
|
||||||
|
|
||||||
func runBackup(ctx context.Context, opts BackupOptions, gopts GlobalOptions, term *termstatus.Terminal, args []string) error {
|
func runBackup(ctx context.Context, opts BackupOptions, gopts GlobalOptions, term *termstatus.Terminal, args []string) error {
|
||||||
err := opts.Check(gopts, args)
|
var vsscfg fs.VSSConfig
|
||||||
|
var err error
|
||||||
|
|
||||||
|
if runtime.GOOS == "windows" {
|
||||||
|
if vsscfg, err = fs.ParseVSSConfig(gopts.extended); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
err = opts.Check(gopts, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -557,7 +566,7 @@ func runBackup(ctx context.Context, opts BackupOptions, gopts GlobalOptions, ter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
localVss := fs.NewLocalVss(errorHandler, messageHandler)
|
localVss := fs.NewLocalVss(errorHandler, messageHandler, vsscfg)
|
||||||
defer localVss.DeleteSnapshots()
|
defer localVss.DeleteSnapshots()
|
||||||
targetFS = localVss
|
targetFS = localVss
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,12 +3,40 @@ package fs
|
||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/restic/restic/internal/errors"
|
"github.com/restic/restic/internal/errors"
|
||||||
|
"github.com/restic/restic/internal/options"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// VSSConfig holds extended options of windows volume shadow copy service.
|
||||||
|
type VSSConfig struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
if runtime.GOOS == "windows" {
|
||||||
|
options.Register("vss", VSSConfig{})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewVSSConfig returns a new VSSConfig with the default values filled in.
|
||||||
|
func NewVSSConfig() VSSConfig {
|
||||||
|
return VSSConfig{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ParseVSSConfig parses a VSS extended options to VSSConfig struct.
|
||||||
|
func ParseVSSConfig(o options.Options) (VSSConfig, error) {
|
||||||
|
cfg := NewVSSConfig()
|
||||||
|
o = o.Extract("vss")
|
||||||
|
if err := o.Apply("vss", &cfg); err != nil {
|
||||||
|
return VSSConfig{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return cfg, nil
|
||||||
|
}
|
||||||
|
|
||||||
// ErrorHandler is used to report errors via callback
|
// ErrorHandler is used to report errors via callback
|
||||||
type ErrorHandler func(item string, err error) error
|
type ErrorHandler func(item string, err error) error
|
||||||
|
|
||||||
|
@ -31,7 +59,7 @@ var _ FS = &LocalVss{}
|
||||||
|
|
||||||
// NewLocalVss creates a new wrapper around the windows filesystem using volume
|
// NewLocalVss creates a new wrapper around the windows filesystem using volume
|
||||||
// shadow copy service to access locked files.
|
// shadow copy service to access locked files.
|
||||||
func NewLocalVss(msgError ErrorHandler, msgMessage MessageHandler) *LocalVss {
|
func NewLocalVss(msgError ErrorHandler, msgMessage MessageHandler, cfg VSSConfig) *LocalVss {
|
||||||
return &LocalVss{
|
return &LocalVss{
|
||||||
FS: Local{},
|
FS: Local{},
|
||||||
snapshots: make(map[string]VssSnapshot),
|
snapshots: make(map[string]VssSnapshot),
|
||||||
|
|
Loading…
Reference in New Issue