()
| 405 | } |
| 406 | |
| 407 | func (b *moduleSetBuilder) Build() (ModuleSet, error) { |
| 408 | defer xslog.DebugProfile(b.logger)() |
| 409 | |
| 410 | if !b.buildCalled.CompareAndSwap(false, true) { |
| 411 | return nil, errBuildAlreadyCalled |
| 412 | } |
| 413 | if len(b.errs) > 0 { |
| 414 | return nil, errors.Join(b.errs...) |
| 415 | } |
| 416 | if len(b.addedModules) == 0 { |
| 417 | // Allow an empty ModuleSet. |
| 418 | return newModuleSet(nil) |
| 419 | } |
| 420 | // If not empty, we need at least one target Module. |
| 421 | if xslices.Count(b.addedModules, func(m *addedModule) bool { return m.IsTarget() }) < 1 { |
| 422 | return nil, syserror.New("no Modules were targeted in ModuleSetBuilder") |
| 423 | } |
| 424 | |
| 425 | // Get the unique modules, preferring targets over non-targets, and local over remote. |
| 426 | addedModules, err := getUniqueSortedAddedModulesByOpaqueID(b.ctx, b.commitProvider, b.addedModules) |
| 427 | if err != nil { |
| 428 | return nil, err |
| 429 | } |
| 430 | modules, err := xslices.MapError( |
| 431 | addedModules, |
| 432 | func(addedModule *addedModule) (Module, error) { |
| 433 | return addedModule.ToModule(b.ctx, b.moduleDataProvider, b.commitProvider) |
| 434 | }, |
| 435 | ) |
| 436 | if err != nil { |
| 437 | return nil, err |
| 438 | } |
| 439 | return newModuleSet(modules) |
| 440 | } |
| 441 | |
| 442 | func (b *moduleSetBuilder) addError(err error) *moduleSetBuilder { |
| 443 | b.errs = append(b.errs, err) |
nothing calls this directly
no test coverage detected