mirror of
https://github.com/kopia/kopia.git
synced 2026-02-01 18:23:36 -05:00
* chore(general): remove unused `Behavior` type * chore(test): leverage `testutil.ServerParameters` in server test
69 lines
2.1 KiB
Go
69 lines
2.1 KiB
Go
// Package feature tracks features that are supported by Kopia client to ensure forwards and backwards
|
|
// compatibility.
|
|
package feature
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
// IfNotUnderstood describes the behavior of Kopia when a required feature is not understood.
|
|
type IfNotUnderstood struct {
|
|
Warn bool `json:"warn"` // warn instead of failing
|
|
Message string `json:"message,omitempty"` // message to show to users
|
|
URL string `json:"url,omitempty"` // URL to show to users
|
|
UpgradeToVersion string `json:"upgradeToVersion,omitempty"` // suggest upgrading to a particular version
|
|
}
|
|
|
|
// Feature identifies a feature that particular Kopia client must understand.
|
|
type Feature string
|
|
|
|
// Required describes a single required feature that a client must understand
|
|
// along with desired behavior when not understood.
|
|
type Required struct {
|
|
Feature Feature `json:"feature"`
|
|
IfNotUnderstood IfNotUnderstood `json:"ifNotUnderstood"`
|
|
}
|
|
|
|
// UnsupportedMessage returns a message to display to users if the feature is unsupported.
|
|
func (r Required) UnsupportedMessage() string {
|
|
msg := fmt.Sprintf("This version of Kopia does not support feature '%v'.", r.Feature)
|
|
|
|
if r.IfNotUnderstood.Message != "" {
|
|
msg += "\n" + r.IfNotUnderstood.Message
|
|
}
|
|
|
|
if r.IfNotUnderstood.URL != "" {
|
|
msg += "\nSee: " + r.IfNotUnderstood.URL
|
|
}
|
|
|
|
if r.IfNotUnderstood.UpgradeToVersion != "" {
|
|
msg += "\nPlease upgrade to version " + r.IfNotUnderstood.UpgradeToVersion + " or newer."
|
|
}
|
|
|
|
return msg
|
|
}
|
|
|
|
// GetUnsupportedFeatures compares the provided list of required features to the list of supported features
|
|
// and returns the list of []RequireFeature that are not supported.
|
|
func GetUnsupportedFeatures(required []Required, supported []Feature) []Required {
|
|
var result []Required
|
|
|
|
for _, req := range required {
|
|
if !isSupported(req, supported) {
|
|
result = append(result, req)
|
|
}
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
func isSupported(req Required, supported []Feature) bool {
|
|
for _, s := range supported {
|
|
if req.Feature == s {
|
|
return true
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|