in newt/project/project.go [569:663]
func (proj *Project) loadConfig(download bool) error {
yc, err := config.ReadFile(proj.BasePath + "/" + PROJECT_FILE_NAME)
if err != nil {
return util.NewNewtError(err.Error())
}
// Store configuration object for access to future values,
// this avoids keeping every string around as a project variable when
// we need to process it later.
proj.yc = yc
proj.name, err = yc.GetValString("project.name", nil)
util.OneTimeWarningError(err)
// Local repository always included in initialization
r, err := repo.NewLocalRepo(proj.name)
if err != nil {
return err
}
proj.repos[proj.name] = r
proj.localRepo = r
for _, ignDir := range ignoreSearchDirs {
r.AddIgnoreDir(ignDir)
}
// Assume every item starting with "repository." is a repository descriptor
// and try to load it.
for k, _ := range yc.AllSettings() {
repoName := strings.TrimPrefix(k, "repository.")
if repoName != k {
fields, err := yc.GetValStringMapString(k, nil)
util.OneTimeWarningError(err)
r, err := proj.loadRepo(repoName, fields)
if err != nil {
// if `repository.yml` does not exist, it is not an error; we
// will just download a new copy.
if !util.IsNotExist(err) {
return err
}
}
verReq, err := newtutil.ParseRepoVersion(fields["vers"])
if err != nil {
return util.FmtNewtError(
"Repo \"%s\" contains invalid version requirement: "+
"%s (%s)",
repoName, fields["vers"], err.Error())
}
if err := proj.addRepo(r, download); err != nil {
return err
}
proj.rootRepoReqs[repoName] = verReq
}
}
// Read `repository.yml` files belonging to dependee repos from disk.
// These repos might not be specified in the `project.yml` file, but they
// are still part of the project.
if err := proj.loadRepoDeps(download); err != nil {
return err
}
if !util.SkipNewtCompat {
// Warn the user about incompatibilities with this version of newt.
if err := proj.verifyNewtCompat(); err != nil {
return err
}
}
ignoreDirs, err := yc.GetValStringSlice("project.ignore_dirs", nil)
util.OneTimeWarningError(err)
for _, ignDir := range ignoreDirs {
repoName, dirName, err := newtutil.ParsePackageString(ignDir)
if err != nil {
return err
}
if repoName == "" {
r = proj.LocalRepo()
} else {
r = proj.FindRepo(repoName)
}
if r == nil {
return util.NewNewtError(
fmt.Sprintf("ignore_dirs: unknown repo %s", repoName))
}
r.AddIgnoreDir(dirName)
}
if err := proj.checkNewtVer(); err != nil {
return err
}
return nil
}