| // Package gpm reads GPM's Godeps files. | 
 | // | 
 | // It is not a complete implementaton of GPM. | 
 | package gpm | 
 |  | 
 | import ( | 
 | 	"bufio" | 
 | 	"os" | 
 | 	"path/filepath" | 
 | 	"strings" | 
 |  | 
 | 	"github.com/Masterminds/glide/cfg" | 
 | 	"github.com/Masterminds/glide/msg" | 
 | 	gpath "github.com/Masterminds/glide/path" | 
 | ) | 
 |  | 
 | // Has indicates whether a Godeps file exists. | 
 | func Has(dir string) bool { | 
 | 	path := filepath.Join(dir, "Godeps") | 
 | 	_, err := os.Stat(path) | 
 | 	return err == nil | 
 | } | 
 |  | 
 | // 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)) | 
 |  | 
 | 	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 | 
 | } | 
 |  | 
 | func parseGodepsLine(line string) ([]string, bool) { | 
 | 	line = strings.TrimSpace(line) | 
 |  | 
 | 	if len(line) == 0 || strings.HasPrefix(line, "#") { | 
 | 		return []string{}, false | 
 | 	} | 
 |  | 
 | 	return strings.Fields(line), true | 
 | } |