github.com/goguardian/glide@v0.0.0-20160311175917-84255172e124/gb/gb.go (about)

     1  package gb
     2  
     3  import (
     4  	"encoding/json"
     5  	"os"
     6  	"path/filepath"
     7  
     8  	"github.com/Masterminds/glide/cfg"
     9  	"github.com/Masterminds/glide/msg"
    10  	"github.com/Masterminds/glide/util"
    11  )
    12  
    13  // Has returns true if this dir has a GB-flavored manifest file.
    14  func Has(dir string) bool {
    15  	path := filepath.Join(dir, "vendor/manifest")
    16  	_, err := os.Stat(path)
    17  	return err == nil
    18  }
    19  
    20  // Parse parses a GB-flavored manifest file.
    21  func Parse(dir string) ([]*cfg.Dependency, error) {
    22  	path := filepath.Join(dir, "vendor/manifest")
    23  	if fi, err := os.Stat(path); err != nil || fi.IsDir() {
    24  		return []*cfg.Dependency{}, nil
    25  	}
    26  
    27  	msg.Info("Found GB manifest file.\n")
    28  	buf := []*cfg.Dependency{}
    29  	file, err := os.Open(path)
    30  	if err != nil {
    31  		return buf, err
    32  	}
    33  	defer file.Close()
    34  
    35  	man := Manifest{}
    36  
    37  	dec := json.NewDecoder(file)
    38  	if err := dec.Decode(&man); err != nil {
    39  		return buf, err
    40  	}
    41  
    42  	seen := map[string]bool{}
    43  
    44  	for _, d := range man.Dependencies {
    45  		pkg, sub := util.NormalizeName(d.Importpath)
    46  		if _, ok := seen[pkg]; ok {
    47  			if len(sub) == 0 {
    48  				continue
    49  			}
    50  			for _, dep := range buf {
    51  				if dep.Name == pkg {
    52  					dep.Subpackages = append(dep.Subpackages, sub)
    53  				}
    54  			}
    55  		} else {
    56  			seen[pkg] = true
    57  			dep := &cfg.Dependency{
    58  				Name:       pkg,
    59  				Reference:  d.Revision,
    60  				Repository: d.Repository,
    61  			}
    62  			if len(sub) > 0 {
    63  				dep.Subpackages = []string{sub}
    64  			}
    65  			buf = append(buf, dep)
    66  		}
    67  	}
    68  	return buf, nil
    69  }