func()

in packages/packages.go [212:256]


func (i *FileSystemIndexer) getPackagesFromFileSystem(ctx context.Context) (Packages, error) {
	span, _ := apm.StartSpan(ctx, "GetFromFileSystem", "app")
	span.Context.SetLabel("indexer", i.label)
	defer span.End()

	type packageKey struct {
		name    string
		version string
	}
	packagesFound := make(map[packageKey]struct{})

	var pList Packages
	for _, basePath := range i.paths {
		packagePaths, err := i.getPackagePaths(basePath)
		if err != nil {
			return nil, err
		}

		i.logger.Info("Searching packages in " + basePath)
		for _, path := range packagePaths {
			p, err := NewPackage(i.logger, path, i.fsBuilder)
			if err != nil {
				return nil, fmt.Errorf("loading package failed (path: %s): %w", path, err)
			}

			key := packageKey{name: p.Name, version: p.Version}
			if _, found := packagesFound[key]; found {
				i.logger.Debug("duplicated package",
					zap.String("package.name", p.Name),
					zap.String("package.version", p.Version),
					zap.String("package.path", p.BasePath))
				continue
			}

			packagesFound[key] = struct{}{}
			pList = append(pList, p)

			i.logger.Debug("found package",
				zap.String("package.name", p.Name),
				zap.String("package.version", p.Version),
				zap.String("package.path", p.BasePath))
		}
	}
	return pList, nil
}