in pkg/repo/repo.go [87:180]
func NewRepo(repoPath string, fetcher api.GroupFetcher) (*Repo, error) {
var err error
if repoPath == "" {
repoPath, err = os.Getwd()
if err != nil {
return nil, fmt.Errorf("unable to determine enhancements repo path: %s", err)
}
}
proposalPath := filepath.Join(repoPath, ProposalPathStub)
fi, err := os.Stat(proposalPath)
if err != nil {
return nil, errors.Wrapf(
err,
"getting file info for proposal path %s",
proposalPath,
)
}
if !fi.IsDir() {
return nil, errors.Wrap(
err,
"checking if proposal path is a directory",
)
}
prrApprovalPath := filepath.Join(proposalPath, PRRApprovalPathStub)
fi, err = os.Stat(prrApprovalPath)
if err != nil {
return nil, errors.Wrapf(
err,
"getting file info for PRR approval path %s",
prrApprovalPath,
)
}
if !fi.IsDir() {
return nil, errors.Wrap(
err,
"checking if PRR approval path is a directory",
)
}
proposalReadme := filepath.Join(proposalPath, "README.md")
fi, err = os.Stat(proposalReadme)
if err != nil {
return nil, errors.Wrapf(
err,
"getting file info for proposal README path %s",
proposalPath,
)
}
if !fi.Mode().IsRegular() {
return nil, errors.Wrap(
err,
"checking if proposal README is a file",
)
}
groups, err := fetcher.FetchGroups()
if err != nil {
return nil, fmt.Errorf("fetching groups: %w", err)
}
prrApprovers, err := fetcher.FetchPRRApprovers()
if err != nil {
return nil, fmt.Errorf("fetching PRR approvers: %w", err)
}
kepHandler := &api.KEPHandler{Groups: groups, PRRApprovers: prrApprovers}
prrHandler := &api.PRRHandler{PRRApprovers: prrApprovers}
repo := &Repo{
BasePath: repoPath,
ProposalPath: proposalPath,
PRRApprovalPath: prrApprovalPath,
ProposalReadme: proposalReadme,
KEPHandler: kepHandler,
PRRHandler: prrHandler,
}
proposalTemplate, err := repo.getProposalTemplate()
if err != nil {
return nil, errors.Wrap(err, "getting proposal template")
}
repo.ProposalTemplate = proposalTemplate
// build a default client with normal os.Stdxx and Filesystem access. Tests can build their own
// with appropriate test objects
return repo, nil
}