lastn/main.go

66 lines
1.6 KiB
Go
Executable File

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(),
}
}