// Parse parses a GPM-flavored Godeps file. func Parse(dir string) ([]*cfg.Dependency, error) { path := filepath.Join(dir, "Godeps") if i, err := os.Stat(path); err != nil { return []*cfg.Dependency{}, nil } else if i.IsDir() { msg.Info("Godeps is a directory. This is probably a Godep project.\n") return []*cfg.Dependency{}, nil } msg.Info("Found Godeps file in %s", gpath.StripBasepath(dir)) msg.Info("--> Parsing GPM metadata...") buf := []*cfg.Dependency{} file, err := os.Open(path) if err != nil { return buf, err } scanner := bufio.NewScanner(file) for scanner.Scan() { parts, ok := parseGodepsLine(scanner.Text()) if ok { dep := &cfg.Dependency{Name: parts[0]} if len(parts) > 1 { dep.Reference = parts[1] } buf = append(buf, dep) } } if err := scanner.Err(); err != nil { msg.Warn("Scan failed: %s\n", err) return buf, err } return buf, nil }
// Parse parses a GB-flavored manifest file. func Parse(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 } msg.Info("Found GB manifest file in %s", gpath.StripBasepath(dir)) msg.Info("--> Parsing GB metadata...") buf := []*cfg.Dependency{} file, err := os.Open(path) if err != nil { return buf, err } defer file.Close() man := 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 := util.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 }
// Parse parses a Godep's Godeps file. // // It returns the contents as a dependency array. func Parse(dir string) ([]*cfg.Dependency, error) { path := filepath.Join(dir, "Godeps/Godeps.json") if _, err := os.Stat(path); err != nil { return []*cfg.Dependency{}, nil } msg.Info("Found Godeps.json file in %s", gpath.StripBasepath(dir)) msg.Info("--> Parsing Godeps metadata...") buf := []*cfg.Dependency{} godeps := &Godeps{} // Get a handle to the file. file, err := os.Open(path) if err != nil { return buf, err } defer file.Close() dec := json.NewDecoder(file) if err := dec.Decode(godeps); err != nil { return buf, err } seen := map[string]bool{} for _, d := range godeps.Deps { pkg, sub := util.NormalizeName(d.ImportPath) if _, ok := seen[pkg]; ok { if len(sub) == 0 { continue } // Modify existing dep with additional subpackages. 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.Rev} if sub != "" { dep.Subpackages = []string{sub} } buf = append(buf, dep) } } return buf, nil }
// Parse parses a Gomfile. func Parse(dir string) ([]*cfg.Dependency, error) { path := filepath.Join(dir, "Gomfile") if fi, err := os.Stat(path); err != nil || fi.IsDir() { return []*cfg.Dependency{}, nil } msg.Info("Found Gomfile in %s", gpath.StripBasepath(dir)) msg.Info("--> Parsing Gomfile metadata...") buf := []*cfg.Dependency{} goms, err := parseGomfile(path) if err != nil { return []*cfg.Dependency{}, err } for _, gom := range goms { // Do we need to skip this dependency? if val, ok := gom.options["skipdep"]; ok && val.(string) == "true" { continue } // Check for custom cloning command if _, ok := gom.options["command"]; ok { return []*cfg.Dependency{}, errors.New("Glide does not support custom Gomfile commands") } // Check for groups/environments if val, ok := gom.options["group"]; ok { groups := toStringSlice(val) if !stringsContain(groups, "development") && !stringsContain(groups, "production") { // right now we only support development and production msg.Info("Skipping dependency '%s' because it isn't in the development or production group", gom.name) continue } } pkg, sub := util.NormalizeName(gom.name) dep := &cfg.Dependency{ Name: pkg, } if len(sub) > 0 { dep.Subpackages = []string{sub} } // Check for a specific revision if val, ok := gom.options["commit"]; ok { dep.Reference = val.(string) } if val, ok := gom.options["tag"]; ok { dep.Reference = val.(string) } if val, ok := gom.options["branch"]; ok { dep.Reference = val.(string) } // Parse goos and goarch if val, ok := gom.options["goos"]; ok { dep.Os = toStringSlice(val) } if val, ok := gom.options["goarch"]; ok { dep.Arch = toStringSlice(val) } buf = append(buf, dep) } return buf, nil }