| // Package mirrors handles managing mirrors in the running application |
| package mirrors |
| |
| import ( |
| "fmt" |
| "os" |
| "path/filepath" |
| |
| "github.com/Masterminds/glide/msg" |
| gpath "github.com/Masterminds/glide/path" |
| ) |
| |
| var mirrors map[string]*mirror |
| |
| func init() { |
| mirrors = make(map[string]*mirror) |
| } |
| |
| type mirror struct { |
| Repo, Vcs string |
| } |
| |
| // Get retrieves informtion about an mirror. It returns. |
| // - bool if found |
| // - new repo location |
| // - vcs type |
| func Get(k string) (bool, string, string) { |
| o, f := mirrors[k] |
| if !f { |
| return false, "", "" |
| } |
| |
| return true, o.Repo, o.Vcs |
| } |
| |
| // Load pulls the mirrors into memory |
| func Load() error { |
| home := gpath.Home() |
| |
| op := filepath.Join(home, "mirrors.yaml") |
| |
| var ov *Mirrors |
| if _, err := os.Stat(op); os.IsNotExist(err) { |
| msg.Debug("No mirrors.yaml file exists") |
| ov = &Mirrors{ |
| Repos: make(MirrorRepos, 0), |
| } |
| } else { |
| ov, err = ReadMirrorsFile(op) |
| if err != nil { |
| return fmt.Errorf("Error reading existing mirrors.yaml file: %s", err) |
| } |
| } |
| |
| msg.Info("Loading mirrors from mirrors.yaml file") |
| for _, o := range ov.Repos { |
| msg.Debug("Found mirror: %s to %s (%s)", o.Original, o.Repo, o.Vcs) |
| no := &mirror{ |
| Repo: o.Repo, |
| Vcs: o.Vcs, |
| } |
| mirrors[o.Original] = no |
| } |
| |
| return nil |
| } |