diff --git a/src/backup/backup.go b/src/backup/backup.go new file mode 100644 index 0000000..91bb456 --- /dev/null +++ b/src/backup/backup.go @@ -0,0 +1,60 @@ +package backup + +import ( + "os" + "os/exec" + + "github.com/yuk7/wsldl/lib/utils" +) + +//Execute is default run entrypoint. +func Execute(name string, args []string) { + opttar := false + optreg := true + switch len(args) { + case 0: + opttar = true + optreg = true + + case 1: + switch args[0] { + case "--tar": + opttar = true + case "--reg": + optreg = true + } + + default: + utils.ErrorExit(os.ErrInvalid, true, true, false) + } + + if optreg { + lxguid, err := utils.WslGetUUID(name) + if err != nil { + utils.ErrorExit(err, true, true, false) + } + regexe := os.Getenv("SystemRoot") + "\\System32\\reg.exe" + regpath := "HKEY_CURRENT_USER\\" + utils.LxssBaseKey + "\\" + lxguid + _, err = exec.Command(regexe, "export", regpath, "backup.reg", "/y").Output() + if err != nil { + utils.ErrorExit(err, true, true, false) + } + } + if opttar { + wslexe := os.Getenv("SystemRoot") + "\\System32\\wsl.exe" + _, err := exec.Command(wslexe, "--export", name, "backup.tar").Output() + if err != nil { + utils.ErrorExit(err, true, true, false) + } + } +} + +// ShowHelp shows help message +func ShowHelp(showTitle bool) { + if showTitle { + println("Usage:") + } + println(" backup [contents]") + println(" - `--tar`: Output backup.tar to the current directory") + println(" - `--reg`: Output settings registry file to the current directory") +} diff --git a/src/help/help.go b/src/help/help.go index 16f77cf..5487f06 100644 --- a/src/help/help.go +++ b/src/help/help.go @@ -1,6 +1,7 @@ package help import ( + "github.com/yuk7/wsldl/backup" "github.com/yuk7/wsldl/clean" "github.com/yuk7/wsldl/config" "github.com/yuk7/wsldl/get" @@ -18,7 +19,9 @@ func Execute(args []string) { case "config", "set": config.ShowHelp(true) case "get": - config.ShowHelp(true) + get.ShowHelp(true) + case "backup": + backup.ShowHelp(true) case "clean": clean.ShowHelp(true) case "help": @@ -39,6 +42,8 @@ func ShowHelpAll() { println() get.ShowHelp(false) println() + backup.ShowHelp(false) + println() clean.ShowHelp(false) println() ShowHelp(false) diff --git a/src/main.go b/src/main.go index 659cab8..1e88c83 100644 --- a/src/main.go +++ b/src/main.go @@ -4,6 +4,7 @@ import ( "os" "path/filepath" + "github.com/yuk7/wsldl/backup" "github.com/yuk7/wsldl/clean" "github.com/yuk7/wsldl/config" "github.com/yuk7/wsldl/get" @@ -43,6 +44,9 @@ func main() { case "get": get.Execute(name, os.Args[2:]) + case "backup": + backup.Execute(name, os.Args[2:]) + case "clean": clean.Execute(name, os.Args[2:])