in tools/go-agent/cmd/injector.go [76:116]
func (i *projectInjector) injectDir(path string, allProjects bool) error {
if !i.findGoModFileInDir(path) {
return fmt.Errorf("cannot fing go.mod file in %s, plase make sure that your inject path is a project directory", path)
}
// find all projects and main directory
projects, err := i.findProjects(path, allProjects)
if err != nil {
return err
}
// filter validated projects
validatedProjects := make([]*projectWithMainDirectory, 0)
for _, project := range projects {
if project.isValid() {
validatedProjects = append(validatedProjects, project)
}
}
fmt.Printf("total %d validate projects found\n", len(validatedProjects))
// inject library
for _, project := range validatedProjects {
if err := i.injectLibraryInRoot(project.ProjectPath); err != nil {
return err
}
for _, mainDir := range project.MainPackageDirs {
contains, err := i.alreadyContainsLibraryImport(mainDir)
if err != nil {
return err
}
if contains {
fmt.Printf("main package %s already contains imports, skip\n", mainDir)
continue
}
// append a new file to the main package
if err := i.appendNewImportFile(mainDir); err != nil {
return fmt.Errorf("append new import file failed in %s, %v", mainDir, err)
}
fmt.Printf("append new import file success in %s\n", mainDir)
}
}
return nil
}