diff --git a/cmd/info.go b/cmd/info.go new file mode 100644 index 0000000..6b279c4 --- /dev/null +++ b/cmd/info.go @@ -0,0 +1,35 @@ +/* +Copyright © 2021 NAME HERE + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package cmd + +import ( + "github.com/cupcakearmy/autorestic/internal" + "github.com/spf13/cobra" +) + +var infoCmd = &cobra.Command{ + Use: "info", + Short: "Show info about the config", + Run: func(cmd *cobra.Command, args []string) { + CheckErr(internal.CheckConfig()) + + internal.GetConfig().Describe() + }, +} + +func init() { + rootCmd.AddCommand(infoCmd) +} diff --git a/internal/config.go b/internal/config.go index 10cb2d4..0ee7520 100644 --- a/internal/config.go +++ b/internal/config.go @@ -54,6 +54,60 @@ func GetPathRelativeToConfig(p string) (string, error) { } } +func PrintDescription(left string, right string) { + colors.Body.Printf("%s\t%s\n", colors.Secondary.Sprint(left), strings.TrimPrefix(right, "\t")) +} + +func (c *Config) Describe() { + for name, l := range c.Locations { + var tmp string + colors.PrimaryPrint(`Location: "%s"`, name) + + PrintDescription("From", l.From) + + tmp = "" + for _, to := range l.To { + tmp += fmt.Sprintf("\t→ %s\n", to) + } + PrintDescription("To", tmp) + + if l.Cron != "" { + PrintDescription("Cron", l.Cron) + } + + after, before := len(l.Hooks.After), len(l.Hooks.Before) + if after+before > 0 { + tmp = "" + if before > 0 { + tmp += "\tBefore\n" + for _, cmd := range l.Hooks.Before { + tmp += colors.Faint.Sprintf("\t ▶ %s\n", cmd) + } + } + if after > 0 { + tmp += "\tAfter\n" + for _, cmd := range l.Hooks.After { + tmp += colors.Faint.Sprintf("\t ▶ %s\n", cmd) + } + } + PrintDescription("Hooks", tmp) + } + + if len(l.Options) > 0 { + tmp = "" + for t, options := range l.Options { + tmp += "\t" + t + "\n" + for option, values := range options { + for _, value := range values { + tmp += colors.Faint.Sprintf("\t✧ --%s=%s\n", option, value) + } + } + } + PrintDescription("Options", tmp) + } + } +} + func CheckConfig() error { c := GetConfig() if c == nil {