gopkg.in/tools/godep.v35@v35.0.0-20151212003741-483cb8869554/restore.go (about) 1 package main 2 3 import ( 4 "log" 5 "os" 6 ) 7 8 var cmdRestore = &Command{ 9 Name: "restore", 10 Short: "check out listed dependency versions in GOPATH", 11 Long: ` 12 Restore checks out the Godeps-specified version of each package in GOPATH. 13 14 If -v is given, verbose output is enabled. 15 16 If -d is given, debug output is enabled (you probably don't want this, see -v above). 17 `, 18 Run: runRestore, 19 } 20 21 func runRestore(cmd *Command, args []string) { 22 g, err := loadDefaultGodepsFile() 23 if err != nil { 24 log.Fatalln(err) 25 } 26 hadError := false 27 for _, dep := range g.Deps { 28 err := download(dep) 29 if err != nil { 30 log.Printf("error downloading dep (%s): %s\n", dep.ImportPath, err.Error()) 31 hadError = true 32 } 33 } 34 if !hadError { 35 for _, dep := range g.Deps { 36 err := restore(dep) 37 if err != nil { 38 log.Printf("error restoring dep (%s): %s\n", dep.ImportPath, err.Error()) 39 hadError = true 40 } 41 } 42 } 43 if hadError { 44 os.Exit(1) 45 } 46 } 47 48 // download downloads the given dependency. 49 func download(dep Dependency) error { 50 // make sure pkg exists somewhere in GOPATH 51 52 args := []string{"get", "-d"} 53 if verbose { 54 args = append(args, "-v") 55 } 56 57 return runIn(".", "go", append(args, dep.ImportPath)...) 58 } 59 60 // restore checks out the given revision. 61 func restore(dep Dependency) error { 62 ps, err := LoadPackages(dep.ImportPath) 63 if err != nil { 64 return err 65 } 66 pkg := ps[0] 67 68 dep.vcs, err = VCSForImportPath(dep.ImportPath) 69 if err != nil { 70 dep.vcs, _, err = VCSFromDir(pkg.Dir, pkg.Root) 71 if err != nil { 72 return err 73 } 74 } 75 76 if !dep.vcs.exists(pkg.Dir, dep.Rev) { 77 dep.vcs.vcs.Download(pkg.Dir) 78 } 79 return dep.vcs.RevSync(pkg.Dir, dep.Rev) 80 }