|  | package action | 
|  |  | 
|  | import ( | 
|  | "os" | 
|  | "path/filepath" | 
|  |  | 
|  | "github.com/Masterminds/glide/msg" | 
|  | "github.com/Masterminds/glide/overrides" | 
|  | gpath "github.com/Masterminds/glide/path" | 
|  | ) | 
|  |  | 
|  | // OverridesList displays a list of currently setup overrides. | 
|  | func OverridesList() error { | 
|  | home := gpath.Home() | 
|  |  | 
|  | op := filepath.Join(home, "overrides.yaml") | 
|  |  | 
|  | if _, err := os.Stat(op); os.IsNotExist(err) { | 
|  | msg.Info("No overrides exist. No overrides.yaml file not found") | 
|  | return nil | 
|  | } | 
|  |  | 
|  | ov, err := overrides.ReadOverridesFile(op) | 
|  | if err != nil { | 
|  | msg.Die("Unable to read overrides.yaml file: %s", err) | 
|  | } | 
|  |  | 
|  | if len(ov.Repos) == 0 { | 
|  | msg.Info("No overrides found") | 
|  | return nil | 
|  | } | 
|  |  | 
|  | msg.Info("Overrides...") | 
|  | 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 | 
|  | } | 
|  |  | 
|  | // OverridesSet sets an override to use | 
|  | func OverridesSet(o, r, v string) error { | 
|  | if o == "" || r == "" { | 
|  | msg.Err("Both the original and overriding values are required") | 
|  | return nil | 
|  | } | 
|  |  | 
|  | home := gpath.Home() | 
|  |  | 
|  | op := filepath.Join(home, "overrides.yaml") | 
|  |  | 
|  | var ov *overrides.Overrides | 
|  | if _, err := os.Stat(op); os.IsNotExist(err) { | 
|  | msg.Info("No overrides.yaml file exists. Creating new one") | 
|  | ov = &overrides.Overrides{ | 
|  | Repos: make(overrides.OverrideRepos, 0), | 
|  | } | 
|  | } else { | 
|  | ov, err = overrides.ReadOverridesFile(op) | 
|  | if err != nil { | 
|  | msg.Die("Error reading existing overrides.yaml file: %s", err) | 
|  | } | 
|  | } | 
|  |  | 
|  | found := false | 
|  | for i, re := range ov.Repos { | 
|  | if re.Original == o { | 
|  | found = true | 
|  | msg.Info("%s found in overrides. Replacing with new settings", o) | 
|  | ov.Repos[i].Repo = r | 
|  | ov.Repos[i].Vcs = v | 
|  | } | 
|  | } | 
|  |  | 
|  | if !found { | 
|  | nr := &overrides.OverrideRepo{ | 
|  | 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 overrides.yaml file: %s", err) | 
|  | } else { | 
|  | msg.Info("overrides.yaml written with changes") | 
|  | } | 
|  |  | 
|  | return nil | 
|  | } | 
|  |  | 
|  | // OverridesRemove removes an override setting | 
|  | func OverridesRemove(k string) error { | 
|  | if k == "" { | 
|  | msg.Err("The override to remove is required") | 
|  | return nil | 
|  | } | 
|  |  | 
|  | home := gpath.Home() | 
|  |  | 
|  | op := filepath.Join(home, "overrides.yaml") | 
|  |  | 
|  | if _, err := os.Stat(op); os.IsNotExist(err) { | 
|  | msg.Err("overrides.yaml file not found") | 
|  | return nil | 
|  | } | 
|  |  | 
|  | ov, err := overrides.ReadOverridesFile(op) | 
|  | if err != nil { | 
|  | msg.Die("Unable to read overrides.yaml file: %s", err) | 
|  | } | 
|  |  | 
|  | var nre overrides.OverrideRepos | 
|  | 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 overrides", k) | 
|  | } else { | 
|  | msg.Info("%s was removed from overrides", k) | 
|  | ov.Repos = nre | 
|  |  | 
|  | err = ov.WriteFile(op) | 
|  | if err != nil { | 
|  | msg.Err("Error writing overrides.yaml file: %s", err) | 
|  | } else { | 
|  | msg.Info("overrides.yaml written with changes") | 
|  | } | 
|  | } | 
|  |  | 
|  | return nil | 
|  | } |