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
}