gopkg.in/tools/godep.v21@v21.0.0-20151104013723-2cf1d6e3f557/restore.go (about) 1 package main 2 3 import ( 4 "log" 5 "os" 6 ) 7 8 var cmdRestore = &Command{ 9 Usage: "restore [-v]", 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 Run: runRestore, 17 } 18 19 func init() { 20 cmdRestore.Flag.BoolVar(&verbose, "v", false, "enable verbose output") 21 } 22 23 func runRestore(cmd *Command, args []string) { 24 g, err := loadDefaultGodepsFile() 25 if err != nil { 26 log.Fatalln(err) 27 } 28 hadError := false 29 for _, dep := range g.Deps { 30 err := download(dep) 31 if err != nil { 32 log.Println("restore:", err) 33 hadError = true 34 } 35 } 36 if !hadError { 37 for _, dep := range g.Deps { 38 err := restore(dep) 39 if err != nil { 40 log.Println("restore:", err) 41 hadError = true 42 } 43 } 44 } 45 if hadError { 46 os.Exit(1) 47 } 48 } 49 50 // download downloads the given dependency. 51 func download(dep Dependency) error { 52 // make sure pkg exists somewhere in GOPATH 53 54 args := []string{"get", "-d"} 55 if verbose { 56 args = append(args, "-v") 57 } 58 59 return runIn(".", "go", append(args, dep.ImportPath)...) 60 } 61 62 // restore checks out the given revision. 63 func restore(dep Dependency) error { 64 ps, err := LoadPackages(dep.ImportPath) 65 if err != nil { 66 return err 67 } 68 pkg := ps[0] 69 70 dep.vcs, err = VCSForImportPath(dep.ImportPath) 71 if err != nil { 72 dep.vcs, _, err = VCSFromDir(pkg.Dir, pkg.Root) 73 if err != nil { 74 return err 75 } 76 } 77 78 if !dep.vcs.exists(pkg.Dir, dep.Rev) { 79 dep.vcs.vcs.Download(pkg.Dir) 80 } 81 return dep.vcs.RevSync(pkg.Dir, dep.Rev) 82 }