( packageVersionBaseline []*StepPackageVersion, defaultPackageVersion string, // the --package-version command line flag initialPackageOverrideFlags []string, // the --package command line flag (multiple occurrences) asker question.Asker, stdout io.Writer)
| 534 | } |
| 535 | |
| 536 | func AskPackageOverrideLoop( |
| 537 | packageVersionBaseline []*StepPackageVersion, |
| 538 | defaultPackageVersion string, // the --package-version command line flag |
| 539 | initialPackageOverrideFlags []string, // the --package command line flag (multiple occurrences) |
| 540 | asker question.Asker, |
| 541 | stdout io.Writer) ([]*StepPackageVersion, []*PackageVersionOverride, error) { |
| 542 | packageVersionOverrides := make([]*PackageVersionOverride, 0) |
| 543 | |
| 544 | // pickup any partial package specifications that may have arrived on the commandline |
| 545 | if defaultPackageVersion != "" { |
| 546 | // blind apply to everything |
| 547 | packageVersionOverrides = append(packageVersionOverrides, &PackageVersionOverride{Version: defaultPackageVersion}) |
| 548 | } |
| 549 | |
| 550 | for _, s := range initialPackageOverrideFlags { |
| 551 | ambOverride, err := ParsePackageOverrideString(s) |
| 552 | if err != nil { |
| 553 | continue // silently ignore anything that wasn't parseable (should we emit a warning?) |
| 554 | } |
| 555 | resolvedOverride, err := ResolvePackageOverride(ambOverride, packageVersionBaseline) |
| 556 | if err != nil { |
| 557 | continue // silently ignore anything that wasn't parseable (should we emit a warning?) |
| 558 | } |
| 559 | packageVersionOverrides = append(packageVersionOverrides, resolvedOverride) |
| 560 | } |
| 561 | |
| 562 | overriddenPackageVersions := ApplyPackageOverrides(packageVersionBaseline, packageVersionOverrides) |
| 563 | |
| 564 | outerLoop: |
| 565 | for { |
| 566 | err := printPackageVersions(stdout, overriddenPackageVersions) |
| 567 | if err != nil { |
| 568 | return nil, nil, err |
| 569 | } |
| 570 | |
| 571 | // While there are any unresolved package versions, force those |
| 572 | for _, pkgVersionEntry := range overriddenPackageVersions { |
| 573 | if strings.TrimSpace(pkgVersionEntry.Version) == "" { |
| 574 | |
| 575 | var answer = "" |
| 576 | for strings.TrimSpace(answer) == "" { // if they enter a blank line just ask again repeatedly |
| 577 | err = asker(&survey.Input{ |
| 578 | Message: output.Yellowf("Unable to find a version for \"%s\". Specify a version:", pkgVersionEntry.PackageID), |
| 579 | }, &answer, survey.WithValidator(func(ans interface{}) error { |
| 580 | str, ok := ans.(string) |
| 581 | if !ok { |
| 582 | return errors.New("internal error; answer was not a string") |
| 583 | } |
| 584 | if !isValidVersion(str) { |
| 585 | return fmt.Errorf("\"%s\" is not a valid version", str) |
| 586 | } |
| 587 | return nil |
| 588 | })) |
| 589 | |
| 590 | if err != nil { |
| 591 | return nil, nil, err |
| 592 | } |
| 593 | } |
no test coverage detected