| package cmd | 
 |  | 
 | import ( | 
 | 	"encoding/json" | 
 | 	"os" | 
 | 	"path/filepath" | 
 |  | 
 | 	"github.com/Masterminds/cookoo" | 
 | 	"github.com/Masterminds/glide/cfg" | 
 | 	"github.com/Masterminds/glide/gb" | 
 | ) | 
 |  | 
 | func HasGbManifest(c cookoo.Context, p *cookoo.Params) (interface{}, cookoo.Interrupt) { | 
 | 	dir := cookoo.GetString("dir", "", p) | 
 | 	path := filepath.Join(dir, "vendor/manifest") | 
 | 	_, err := os.Stat(path) | 
 | 	return err == nil, nil | 
 | } | 
 |  | 
 | // GbManifest | 
 | // | 
 | // Params: | 
 | // 	- dir (string): The directory where the manifest file is located. | 
 | // Returns: | 
 | // | 
 | func GbManifest(c cookoo.Context, p *cookoo.Params) (interface{}, cookoo.Interrupt) { | 
 | 	dir := cookoo.GetString("dir", ".", p) | 
 | 	return parseGbManifest(dir) | 
 | } | 
 |  | 
 | func parseGbManifest(dir string) ([]*cfg.Dependency, error) { | 
 | 	path := filepath.Join(dir, "vendor/manifest") | 
 | 	if fi, err := os.Stat(path); err != nil || fi.IsDir() { | 
 | 		return []*cfg.Dependency{}, nil | 
 | 	} | 
 |  | 
 | 	Info("Found GB manifest file.\n") | 
 | 	buf := []*cfg.Dependency{} | 
 | 	file, err := os.Open(path) | 
 | 	if err != nil { | 
 | 		return buf, err | 
 | 	} | 
 | 	defer file.Close() | 
 |  | 
 | 	man := gb.Manifest{} | 
 |  | 
 | 	dec := json.NewDecoder(file) | 
 | 	if err := dec.Decode(&man); err != nil { | 
 | 		return buf, err | 
 | 	} | 
 |  | 
 | 	seen := map[string]bool{} | 
 |  | 
 | 	for _, d := range man.Dependencies { | 
 | 		pkg, sub := NormalizeName(d.Importpath) | 
 | 		if _, ok := seen[pkg]; ok { | 
 | 			if len(sub) == 0 { | 
 | 				continue | 
 | 			} | 
 | 			for _, dep := range buf { | 
 | 				if dep.Name == pkg { | 
 | 					dep.Subpackages = append(dep.Subpackages, sub) | 
 | 				} | 
 | 			} | 
 | 		} else { | 
 | 			seen[pkg] = true | 
 | 			dep := &cfg.Dependency{ | 
 | 				Name:       pkg, | 
 | 				Reference:  d.Revision, | 
 | 				Repository: d.Repository, | 
 | 			} | 
 | 			if len(sub) > 0 { | 
 | 				dep.Subpackages = []string{sub} | 
 | 			} | 
 | 			buf = append(buf, dep) | 
 | 		} | 
 | 	} | 
 | 	return buf, nil | 
 | } |