github.com/opsmatic/godep@v0.1.5/restore.go (about) 1 package main 2 3 import ( 4 "log" 5 "os" 6 "path/filepath" 7 ) 8 9 var cmdRestore = &Command{ 10 Usage: "restore", 11 Short: "check out listed dependency versions in GOPATH", 12 Long: ` 13 Restore checks out the Godeps-specified version of each package in GOPATH. 14 `, 15 Run: runRestore, 16 } 17 18 func runRestore(cmd *Command, args []string) { 19 g, err := ReadAndLoadGodeps(findGodepsJSON()) 20 if err != nil { 21 log.Fatalln(err) 22 } 23 hadError := false 24 for _, dep := range g.Deps { 25 err := restore(dep) 26 if err != nil { 27 log.Println("restore:", err) 28 hadError = true 29 } 30 } 31 if hadError { 32 os.Exit(1) 33 } 34 } 35 36 // restore downloads the given dependency and checks out 37 // the given revision. 38 func restore(dep Dependency) error { 39 // make sure pkg exists somewhere in GOPATH 40 err := runIn(".", "go", "get", "-d", dep.ImportPath) 41 if err != nil { 42 return err 43 } 44 ps, err := LoadPackages(dep.ImportPath) 45 if err != nil { 46 return err 47 } 48 pkg := ps[0] 49 if !dep.vcs.exists(pkg.Dir, dep.Rev) { 50 dep.vcs.vcs.Download(pkg.Dir) 51 } 52 return dep.vcs.RevSync(pkg.Dir, dep.Rev) 53 } 54 55 func findGodepsJSON() (path string) { 56 dir, isDir := findGodeps() 57 if dir == "" { 58 log.Fatalln("No Godeps found (or in any parent directory)") 59 } 60 if isDir { 61 return filepath.Join(dir, "Godeps", "Godeps.json") 62 } 63 return filepath.Join(dir, "Godeps") 64 }