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  }