|  | package action | 
|  |  | 
|  | import ( | 
|  | "path/filepath" | 
|  |  | 
|  | "github.com/Masterminds/glide/cache" | 
|  | "github.com/Masterminds/glide/cfg" | 
|  | "github.com/Masterminds/glide/msg" | 
|  | gpath "github.com/Masterminds/glide/path" | 
|  | "github.com/Masterminds/glide/repo" | 
|  | ) | 
|  |  | 
|  | // Install installs a vendor directory based on an existing Glide configuration. | 
|  | func Install(installer *repo.Installer, stripVendor bool) { | 
|  | cache.SystemLock() | 
|  |  | 
|  | base := "." | 
|  | // Ensure GOPATH | 
|  | EnsureGopath() | 
|  | EnsureVendorDir() | 
|  | conf := EnsureConfig() | 
|  |  | 
|  | // Lockfile exists | 
|  | if !gpath.HasLock(base) { | 
|  | msg.Info("Lock file (glide.lock) does not exist. Performing update.") | 
|  | Update(installer, false, stripVendor) | 
|  | return | 
|  | } | 
|  | // Load lockfile | 
|  | lock, err := cfg.ReadLockFile(filepath.Join(base, gpath.LockFile)) | 
|  | if err != nil { | 
|  | msg.Die("Could not load lockfile.") | 
|  | } | 
|  | // Verify lockfile hasn't changed | 
|  | hash, err := conf.Hash() | 
|  | if err != nil { | 
|  | msg.Die("Could not load lockfile.") | 
|  | } else if hash != lock.Hash { | 
|  | msg.Warn("Lock file may be out of date. Hash check of YAML failed. You may need to run 'update'") | 
|  | } | 
|  |  | 
|  | // Install | 
|  | newConf, err := installer.Install(lock, conf) | 
|  | if err != nil { | 
|  | msg.Die("Failed to install: %s", err) | 
|  | } | 
|  |  | 
|  | msg.Info("Setting references.") | 
|  |  | 
|  | // Set reference | 
|  | if err := repo.SetReference(newConf, installer.ResolveTest); err != nil { | 
|  | msg.Die("Failed to set references: %s (Skip to cleanup)", err) | 
|  | } | 
|  |  | 
|  | err = installer.Export(newConf) | 
|  | if err != nil { | 
|  | msg.Die("Unable to export dependencies to vendor directory: %s", err) | 
|  | } | 
|  |  | 
|  | if stripVendor { | 
|  | msg.Info("Removing nested vendor and Godeps/_workspace directories...") | 
|  | err := gpath.StripVendor() | 
|  | if err != nil { | 
|  | msg.Err("Unable to strip vendor directories: %s", err) | 
|  | } | 
|  | } | 
|  | } |