| 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 | 
 | } |