mirror of
https://github.com/kopia/kopia.git
synced 2025-12-23 22:57:50 -05:00
* Implement volume shadow copy support on Windows * Update go-vss version * Fix unused variables * Rename upload_actions*.go files * Move vss settings to a separate policy section * Handle existing shadow copy root * Fix tests * Fix lint issues * Add cli policy test * Add OS snapshot integration test * Add GitHub Actions VSS test * Fix "Incorrect function" error for root VSS snapshots * Rename err to finalErr in createOSSnapshot * Add OSSnapshotMode test * Do not modify paths starting with \\?\ on Windows * Allow warning messages in logfile tests * Fix ignorefs not wrapping OS snapshot directory * Retry VSS creation if another op was in progress --------- Co-authored-by: Jarek Kowalski <jaak@jkowalski.net>
65 lines
1.8 KiB
Go
65 lines
1.8 KiB
Go
package cli
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/alecthomas/kingpin/v2"
|
|
"github.com/pkg/errors"
|
|
|
|
"github.com/kopia/kopia/snapshot/policy"
|
|
)
|
|
|
|
type policyOSSnapshotFlags struct {
|
|
policyEnableVolumeShadowCopy string
|
|
}
|
|
|
|
func (c *policyOSSnapshotFlags) setup(cmd *kingpin.CmdClause) {
|
|
osSnapshotMode := []string{policy.OSSnapshotNeverString, policy.OSSnapshotAlwaysString, policy.OSSnapshotWhenAvailableString, inheritPolicyString}
|
|
|
|
cmd.Flag("enable-volume-shadow-copy", "Enable Volume Shadow Copy snapshots ('never', 'always', 'when-available', 'inherit')").PlaceHolder("MODE").EnumVar(&c.policyEnableVolumeShadowCopy, osSnapshotMode...)
|
|
}
|
|
|
|
func (c *policyOSSnapshotFlags) setOSSnapshotPolicyFromFlags(ctx context.Context, fp *policy.OSSnapshotPolicy, changeCount *int) error {
|
|
if err := applyPolicyOSSnapshotMode(ctx, "enable volume shadow copy", &fp.VolumeShadowCopy.Enable, c.policyEnableVolumeShadowCopy, changeCount); err != nil {
|
|
return errors.Wrap(err, "enable volume shadow copy")
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func applyPolicyOSSnapshotMode(ctx context.Context, desc string, val **policy.OSSnapshotMode, str string, changeCount *int) error {
|
|
if str == "" {
|
|
// not changed
|
|
return nil
|
|
}
|
|
|
|
var mode policy.OSSnapshotMode
|
|
|
|
switch str {
|
|
case inheritPolicyString, defaultPolicyString:
|
|
*changeCount++
|
|
|
|
log(ctx).Infof(" - resetting %q to a default value inherited from parent.", desc)
|
|
|
|
*val = nil
|
|
|
|
return nil
|
|
case policy.OSSnapshotNeverString:
|
|
mode = policy.OSSnapshotNever
|
|
case policy.OSSnapshotAlwaysString:
|
|
mode = policy.OSSnapshotAlways
|
|
case policy.OSSnapshotWhenAvailableString:
|
|
mode = policy.OSSnapshotWhenAvailable
|
|
default:
|
|
return errors.Errorf("invalid %q mode %q", desc, str)
|
|
}
|
|
|
|
*changeCount++
|
|
|
|
log(ctx).Infof(" - setting %q to %v.", desc, mode)
|
|
|
|
*val = &mode
|
|
|
|
return nil
|
|
}
|