func()

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
}