package config import ( "encoding/json" "errors" "io/ioutil" "os" "path/filepath" "train/pkg/paths" ) var configFile string func init() { railsConfig := filepath.Join(paths.BaseDir(), "config", "config.json") if _, err := os.Stat(railsConfig); err == nil { configFile = railsConfig } else { configFile = "./config.json" } } type Config struct { Repositories []string `json:"repositories"` Packages map[string]string `json:"packages"` } func LoadConfig() (*Config, error) { if _, err := os.Stat(configFile); os.IsNotExist(err) { cfg := &Config{ Repositories: []string{}, Packages: make(map[string]string), } if err := SaveConfig(cfg); err != nil { return nil, err } return cfg, nil } data, err := ioutil.ReadFile(configFile) if err != nil { return nil, err } var cfg Config if err := json.Unmarshal(data, &cfg); err != nil { return nil, err } return &cfg, nil } func SaveConfig(cfg *Config) error { data, err := json.MarshalIndent(cfg, "", " ") if err != nil { return err } return ioutil.WriteFile(configFile, data, 0644) } func AddRepository(repo string) error { cfg, err := LoadConfig() if err != nil { return err } for _, r := range cfg.Repositories { if r == repo { return errors.New("репозиторий уже добавлен") } } cfg.Repositories = append(cfg.Repositories, repo) return SaveConfig(cfg) } func RemoveRepository(repo string) error { cfg, err := LoadConfig() if err != nil { return err } newRepos := []string{} found := false for _, r := range cfg.Repositories { if r == repo { found = true continue } newRepos = append(newRepos, r) } if !found { return errors.New("репозиторий не найден") } cfg.Repositories = newRepos return SaveConfig(cfg) }