diff --git a/pkg/cmd/restore.go b/pkg/cmd/restore.go index 41c57d750..e5e590103 100644 --- a/pkg/cmd/restore.go +++ b/pkg/cmd/restore.go @@ -23,8 +23,11 @@ import ( "github.com/spf13/cobra" ) +var preserveConfig bool + func init() { rootCmd.AddCommand(restoreCmd) + restoreCmd.Flags().BoolVar(&preserveConfig, "preserve-config", false, "Preserve existing configuration instead of restoring from dump") } var restoreCmd = &cobra.Command{ @@ -35,7 +38,7 @@ var restoreCmd = &cobra.Command{ initialize.FullInitWithoutAsync() }, Run: func(_ *cobra.Command, args []string) { - if err := dump.Restore(args[0]); err != nil { + if err := dump.Restore(args[0], !preserveConfig); err != nil { log.Critical(err.Error()) } }, diff --git a/pkg/modules/dump/restore.go b/pkg/modules/dump/restore.go index 9a37d3a77..c01623148 100644 --- a/pkg/modules/dump/restore.go +++ b/pkg/modules/dump/restore.go @@ -45,7 +45,7 @@ import ( const maxConfigSize = 5 * 1024 * 1024 // 5 MB, should be largely enough // Restore takes a zip file name and restores it -func Restore(filename string) error { +func Restore(filename string, overrideConfig bool) error { r, err := zip.OpenReader(filename) if err != nil { @@ -101,9 +101,14 @@ func Restore(filename string) error { /////// // Restore the config file - err = restoreConfig(configFile, dotEnvFile) - if err != nil { - return err + if overrideConfig { + err = restoreConfig(configFile, dotEnvFile) + if err != nil { + return err + } + } else { + log.Warning("Preserving existing configuration (--preserve-config flag used)") + log.Warning("Configuration preserved - ensure your current config is compatible with the restored data") } log.Info("Restoring...") @@ -188,7 +193,9 @@ func Restore(filename string) error { /////// // Done log.Infof("Done restoring dump.") - log.Infof("Restart Vikunja to make sure the new configuration file is applied.") + if overrideConfig { + log.Infof("Restart Vikunja to make sure the new configuration file is applied.") + } return nil }