github.com/matthewbelisle-wf/godep@v0.0.0-20140716191328-dba190f14fc8/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  }