MCPcopy Create free account
hub / github.com/OctopusDeploy/cli / AskPackageOverrideLoop

Function AskPackageOverrideLoop

pkg/packages/packages.go:536–666  ·  view source on GitHub ↗
(
	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)

Source from the content-addressed store, hash-verified

534}
535
536func 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
564outerLoop:
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 }

Callers 2

AskQuestionsFunction · 0.92

Calls 7

YellowfFunction · 0.92
FormatDocFunction · 0.92
ResolvePackageOverrideFunction · 0.85
ApplyPackageOverridesFunction · 0.85
printPackageVersionsFunction · 0.85
isValidVersionFunction · 0.85

Tested by

no test coverage detected