blob: de87f61c453dea47f1341525300469fbbffcb588 [file] [log] [blame]
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
}