gopkg.in/tools/godep.v19@v19.0.0-20151103222550-d423d08236e8/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  }