From 429eb02d64eddf6f5aafa9d30027bd18be4e312d Mon Sep 17 00:00:00 2001 From: stephen mcquay Date: Sun, 10 Jan 2016 09:23:22 -0800 Subject: [PATCH] added list subcommand also cleaned up stray code. Reorganized code to remove awkward handling of push/pull at bottom. --- main.go | 71 +++++++++++++++++++++++++++++++++------------------------ 1 file changed, 41 insertions(+), 30 deletions(-) diff --git a/main.go b/main.go index 02237a2..85a151c 100644 --- a/main.go +++ b/main.go @@ -11,14 +11,14 @@ import ( "os/user" ) -const usage = "saves " - -type link struct { - src string - dst string -} +const usage = "saves " func main() { + if len(os.Args) != 2 { + fmt.Fprintf(os.Stderr, "%s\n", usage) + os.Exit(1) + } + u, err := user.Current() if err != nil { fmt.Fprintf(os.Stderr, "cannot calculate home dir: %v", err) @@ -27,18 +27,30 @@ func main() { docs := fmt.Sprintf("%s/Documents", u.HomeDir) saves := fmt.Sprintf("%s/Documents/saves", u.HomeDir) appSupport := fmt.Sprintf("%s/Library/Application Support", u.HomeDir) - if len(os.Args) != 2 { - fmt.Fprintf(os.Stderr, "%s\n", usage) - os.Exit(1) - } var cmd *exec.Cmd switch os.Args[1] { - case "pull": - cmd = exec.Command("rsync", "-auv", "sj.mcquay.me:~/docs/saves", fmt.Sprintf("%s/", docs)) - case "push": - cmd = exec.Command("rsync", "-auv", fmt.Sprintf("%s/saves", docs), "sj.mcquay.me:~/docs/") - case "link": + case "pull", "push": + if os.Args[1] == "push" { + cmd = exec.Command("rsync", "-auv", "sj.mcquay.me:~/docs/saves", fmt.Sprintf("%s/", docs)) + } else { + cmd = exec.Command("rsync", "-auv", fmt.Sprintf("%s/saves", docs), "sj.mcquay.me:~/docs/") + } + + if cmd == nil { + fmt.Fprintf(os.Stderr, "failed to populate command\n") + os.Exit(1) + } + var so, se bytes.Buffer + cmd.Stdout = &so + cmd.Stderr = &se + if rc := cmd.Run(); rc != nil { + log.Printf("cmd: %+v", cmd) + log.Printf("so: %s", so.Bytes()) + log.Printf("se: %s", se.Bytes()) + log.Printf("rc: %+v", rc) + } + case "link", "ln": dirs, err := ioutil.ReadDir(saves) if err != nil { fmt.Fprintf(os.Stderr, "could not read saves dir: %+v\n", err) @@ -57,23 +69,22 @@ func main() { os.Exit(1) } } - return + case "list", "ls": + dirs, err := ioutil.ReadDir(saves) + if err != nil { + fmt.Fprintf(os.Stderr, "could not read saves dir: %+v\n", err) + os.Exit(1) + } + for _, dir := range dirs { + status := "l" + dst := fmt.Sprintf("%s/%s", appSupport, dir.Name()) + if _, err := os.Lstat(dst); os.IsNotExist(err) { + status = "m" + } + fmt.Printf("%s %s\n", status, dir.Name()) + } default: fmt.Fprintf(os.Stderr, "%s\n", usage) os.Exit(1) } - - if cmd == nil { - fmt.Fprintf(os.Stderr, "failed to populate command\n") - os.Exit(1) - } - var so, se bytes.Buffer - cmd.Stdout = &so - cmd.Stderr = &se - if rc := cmd.Run(); rc != nil { - log.Printf("cmd: %+v", cmd) - log.Printf("so: %s", so.Bytes()) - log.Printf("se: %s", se.Bytes()) - log.Printf("rc: %+v", rc) - } }