func()

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
}