|  | package action | 
|  |  | 
|  | import ( | 
|  | "os" | 
|  | "path/filepath" | 
|  |  | 
|  | "github.com/Masterminds/glide/mirrors" | 
|  | "github.com/Masterminds/glide/msg" | 
|  | gpath "github.com/Masterminds/glide/path" | 
|  | ) | 
|  |  | 
|  | // MirrorsList displays a list of currently setup mirrors. | 
|  | func MirrorsList() error { | 
|  | home := gpath.Home() | 
|  |  | 
|  | op := filepath.Join(home, "mirrors.yaml") | 
|  |  | 
|  | if _, err := os.Stat(op); os.IsNotExist(err) { | 
|  | msg.Info("No mirrors exist. No mirrors.yaml file not found") | 
|  | return nil | 
|  | } | 
|  |  | 
|  | ov, err := mirrors.ReadMirrorsFile(op) | 
|  | if err != nil { | 
|  | msg.Die("Unable to read mirrors.yaml file: %s", err) | 
|  | } | 
|  |  | 
|  | if len(ov.Repos) == 0 { | 
|  | msg.Info("No mirrors found") | 
|  | return nil | 
|  | } | 
|  |  | 
|  | msg.Info("Mirrors...") | 
|  | for _, r := range ov.Repos { | 
|  | if r.Vcs == "" { | 
|  | msg.Info("--> %s replaced by %s", r.Original, r.Repo) | 
|  | } else { | 
|  | msg.Info("--> %s replaced by %s (%s)", r.Original, r.Repo, r.Vcs) | 
|  | } | 
|  | } | 
|  |  | 
|  | return nil | 
|  | } | 
|  |  | 
|  | // MirrorsSet sets a mirror to use | 
|  | func MirrorsSet(o, r, v string) error { | 
|  | if o == "" || r == "" { | 
|  | msg.Err("Both the original and mirror values are required") | 
|  | return nil | 
|  | } | 
|  |  | 
|  | home := gpath.Home() | 
|  |  | 
|  | op := filepath.Join(home, "mirrors.yaml") | 
|  |  | 
|  | var ov *mirrors.Mirrors | 
|  | if _, err := os.Stat(op); os.IsNotExist(err) { | 
|  | msg.Info("No mirrors.yaml file exists. Creating new one") | 
|  | ov = &mirrors.Mirrors{ | 
|  | Repos: make(mirrors.MirrorRepos, 0), | 
|  | } | 
|  | } else { | 
|  | ov, err = mirrors.ReadMirrorsFile(op) | 
|  | if err != nil { | 
|  | msg.Die("Error reading existing mirrors.yaml file: %s", err) | 
|  | } | 
|  | } | 
|  |  | 
|  | found := false | 
|  | for i, re := range ov.Repos { | 
|  | if re.Original == o { | 
|  | found = true | 
|  | msg.Info("%s found in mirrors. Replacing with new settings", o) | 
|  | ov.Repos[i].Repo = r | 
|  | ov.Repos[i].Vcs = v | 
|  | } | 
|  | } | 
|  |  | 
|  | if !found { | 
|  | nr := &mirrors.MirrorRepo{ | 
|  | Original: o, | 
|  | Repo:     r, | 
|  | Vcs:      v, | 
|  | } | 
|  | ov.Repos = append(ov.Repos, nr) | 
|  | } | 
|  |  | 
|  | msg.Info("%s being set to %s", o, r) | 
|  |  | 
|  | err := ov.WriteFile(op) | 
|  | if err != nil { | 
|  | msg.Err("Error writing mirrors.yaml file: %s", err) | 
|  | } else { | 
|  | msg.Info("mirrors.yaml written with changes") | 
|  | } | 
|  |  | 
|  | return nil | 
|  | } | 
|  |  | 
|  | // MirrorsRemove removes a mirrors setting | 
|  | func MirrorsRemove(k string) error { | 
|  | if k == "" { | 
|  | msg.Err("The mirror to remove is required") | 
|  | return nil | 
|  | } | 
|  |  | 
|  | home := gpath.Home() | 
|  |  | 
|  | op := filepath.Join(home, "mirrors.yaml") | 
|  |  | 
|  | if _, err := os.Stat(op); os.IsNotExist(err) { | 
|  | msg.Err("mirrors.yaml file not found") | 
|  | return nil | 
|  | } | 
|  |  | 
|  | ov, err := mirrors.ReadMirrorsFile(op) | 
|  | if err != nil { | 
|  | msg.Die("Unable to read mirrors.yaml file: %s", err) | 
|  | } | 
|  |  | 
|  | var nre mirrors.MirrorRepos | 
|  | var found bool | 
|  | for _, re := range ov.Repos { | 
|  | if re.Original != k { | 
|  | nre = append(nre, re) | 
|  | } else { | 
|  | found = true | 
|  | } | 
|  | } | 
|  |  | 
|  | if !found { | 
|  | msg.Warn("%s was not found in mirrors", k) | 
|  | } else { | 
|  | msg.Info("%s was removed from mirrors", k) | 
|  | ov.Repos = nre | 
|  |  | 
|  | err = ov.WriteFile(op) | 
|  | if err != nil { | 
|  | msg.Err("Error writing mirrors.yaml file: %s", err) | 
|  | } else { | 
|  | msg.Info("mirrors.yaml written with changes") | 
|  | } | 
|  | } | 
|  |  | 
|  | return nil | 
|  | } |