blob: 9d5d2ac75ec07ac71bdb397e27908a0e6613c1ff [file] [log] [blame]
// Package importer imports dependency configuration from Glide, Godep, GPM, GB and gom
package importer
import (
"io/ioutil"
"os"
"path/filepath"
"github.com/Masterminds/glide/cfg"
"github.com/Masterminds/glide/gb"
"github.com/Masterminds/glide/godep"
"github.com/Masterminds/glide/gom"
"github.com/Masterminds/glide/gpm"
)
var i = &DefaultImporter{}
// Import uses the DefaultImporter to import from Glide, Godep, GPM, GB and gom.
func Import(path string) (bool, []*cfg.Dependency, error) {
return i.Import(path)
}
// Importer enables importing depenency configuration.
type Importer interface {
// Import imports dependency configuration. It returns:
// - A bool if any configuration was found.
// - []*cfg.Dependency containing dependency configuration if any is found.
// - An error if one was reported.
Import(path string) (bool, []*cfg.Dependency, error)
}
// DefaultImporter imports from Glide, Godep, GPM, GB and gom.
type DefaultImporter struct{}
// Import tries to import configuration from Glide, Godep, GPM, GB and gom.
func (d *DefaultImporter) Import(path string) (bool, []*cfg.Dependency, error) {
// Try importing from Glide first.
p := filepath.Join(path, "glide.yaml")
if _, err := os.Stat(p); err == nil {
// We found glide configuration.
yml, err := ioutil.ReadFile(p)
if err != nil {
return false, []*cfg.Dependency{}, err
}
conf, err := cfg.ConfigFromYaml(yml)
if err != nil {
return false, []*cfg.Dependency{}, err
}
return true, conf.Imports, nil
}
// Try importing from Godep
if godep.Has(path) {
deps, err := godep.Parse(path)
if err != nil {
return false, []*cfg.Dependency{}, err
}
return true, deps, nil
}
// Try importing from GPM
if gpm.Has(path) {
deps, err := gpm.Parse(path)
if err != nil {
return false, []*cfg.Dependency{}, err
}
return true, deps, nil
}
// Try importin from GB
if gb.Has(path) {
deps, err := gb.Parse(path)
if err != nil {
return false, []*cfg.Dependency{}, err
}
return true, deps, nil
}
// Try importing from gom
if gom.Has(path) {
deps, err := gom.Parse(path)
if err != nil {
return false, []*cfg.Dependency{}, err
}
return true, deps, nil
}
// When none are found.
return false, []*cfg.Dependency{}, nil
}