package main import ( "fmt" "local/args" "local/lastn/lastn" "log" "os" "path" "path/filepath" ) func main() { conf := config() log.Println(conf) lastn, err := lastn.New(conf) if err != nil { panic(err) } actions := []func() error{} switch conf.Cmd { case "backup": actions = append(actions, lastn.Push, lastn.Clean) case "list": actions = append(actions, lastn.List) case "clean": actions = append(actions, lastn.Clean) case "restore": actions = append(actions, lastn.Restore) default: panic(fmt.Sprintf("not impl: %s", conf.Cmd)) } for _, action := range actions { if err := action(); err != nil { panic(err) } } } func config() lastn.Config { as := args.NewArgSet() as.Append(args.INT, "n", "number of backups to retain", 5) as.Append(args.STRING, "conf", "path to rclone conf", path.Join(os.Getenv("HOME"), "/.config/rclone/rclone.conf")) as.Append(args.STRING, "root", "path to root", "./public") as.Append(args.STRING, "ns", "ns for backups", path.Join("lastn", "dev")) as.Append(args.STRING, "rclone", "rclone backend name", "blapointe-drive-enc") as.Append(args.STRING, "store", "type of store, like [map rclone]", "map") as.Append(args.STRING, "cmd", "[backup, restore, list, clean]", "backup") if err := as.Parse(); err != nil { panic(err) } root, err := filepath.Abs(as.Get("root").GetString()) if err != nil { panic(err) } return lastn.Config{ N: as.Get("n").GetInt(), Conf: as.Get("conf").GetString(), Rclone: as.Get("rclone").GetString(), Root: root, Ns: as.Get("ns").GetString(), Store: as.Get("store").GetString(), Cmd: as.Get("cmd").GetString(), } }