github.com/dmitris/glide@v0.0.0-20170130172825-a68f1bf824dc/action/remove.go (about)

     1  package action
     2  
     3  import (
     4  	"github.com/Masterminds/glide/cache"
     5  	"github.com/Masterminds/glide/cfg"
     6  	"github.com/Masterminds/glide/msg"
     7  	gpath "github.com/Masterminds/glide/path"
     8  	"github.com/Masterminds/glide/repo"
     9  )
    10  
    11  // Remove removes a dependncy from the configuration.
    12  func Remove(packages []string, inst *repo.Installer) {
    13  	cache.SystemLock()
    14  	base := gpath.Basepath()
    15  	EnsureGopath()
    16  	EnsureVendorDir()
    17  	conf := EnsureConfig()
    18  	glidefile, err := gpath.Glide()
    19  	if err != nil {
    20  		msg.Die("Could not find Glide file: %s", err)
    21  	}
    22  
    23  	msg.Info("Preparing to remove %d packages.", len(packages))
    24  	conf.Imports = rmDeps(packages, conf.Imports)
    25  	conf.DevImports = rmDeps(packages, conf.DevImports)
    26  
    27  	// Copy used to generate locks.
    28  	confcopy := conf.Clone()
    29  
    30  	//confcopy.Imports = inst.List(confcopy)
    31  
    32  	if err := repo.SetReference(confcopy, inst.ResolveTest); err != nil {
    33  		msg.Err("Failed to set references: %s", err)
    34  	}
    35  
    36  	err = inst.Export(confcopy)
    37  	if err != nil {
    38  		msg.Die("Unable to export dependencies to vendor directory: %s", err)
    39  	}
    40  
    41  	// Write glide.yaml
    42  	if err := conf.WriteFile(glidefile); err != nil {
    43  		msg.Die("Failed to write glide YAML file: %s", err)
    44  	}
    45  
    46  	// Write glide lock
    47  	writeLock(conf, confcopy, base)
    48  }
    49  
    50  // rmDeps returns a list of dependencies that do not contain the given pkgs.
    51  //
    52  // It generates neither an error nor a warning for a pkg that does not exist
    53  // in the list of deps.
    54  func rmDeps(pkgs []string, deps []*cfg.Dependency) []*cfg.Dependency {
    55  	res := []*cfg.Dependency{}
    56  	for _, d := range deps {
    57  		rem := false
    58  		for _, p := range pkgs {
    59  			if p == d.Name {
    60  				rem = true
    61  			}
    62  		}
    63  		if !rem {
    64  			res = append(res, d)
    65  		}
    66  	}
    67  	return res
    68  }