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

Function applyPackageOverride

pkg/packages/packages.go:409–466  ·  view source on GitHub ↗
(packages []*StepPackageVersion, override *PackageVersionOverride)

Source from the content-addressed store, hash-verified

407}
408
409func applyPackageOverride(packages []*StepPackageVersion, override *PackageVersionOverride) []*StepPackageVersion {
410 if override.Version == "" {
411 return packages // not specifying a version is technically an error, but we'll just no-op it for safety; should have been filtered out by ParsePackageOverrideString before we get here
412 }
413
414 var matcher func(pkg *StepPackageVersion) bool = nil
415
416 switch {
417 case override.PackageID == "" && override.ActionName == "": // match everything
418 matcher = func(pkg *StepPackageVersion) bool {
419 return true
420 }
421 case override.PackageID != "" && override.ActionName == "": // match on package ID only
422 matcher = func(pkg *StepPackageVersion) bool {
423 return pkg.PackageID == override.PackageID
424 }
425 case override.PackageID == "" && override.ActionName != "": // match on step only
426 matcher = func(pkg *StepPackageVersion) bool {
427 return pkg.ActionName == override.ActionName
428 }
429 case override.PackageID != "" && override.ActionName != "": // match on both; shouldn't be possible but let's ensure it works anyway
430 matcher = func(pkg *StepPackageVersion) bool {
431 return pkg.PackageID == override.PackageID && pkg.ActionName == override.ActionName
432 }
433 }
434
435 if override.PackageReferenceName != "" { // must also match package reference name
436 if matcher == nil {
437 matcher = func(pkg *StepPackageVersion) bool {
438 return pkg.PackageReferenceName == override.PackageReferenceName
439 }
440 } else {
441 prevMatcher := matcher
442 matcher = func(pkg *StepPackageVersion) bool {
443 return pkg.PackageReferenceName == override.PackageReferenceName && prevMatcher(pkg)
444 }
445 }
446 }
447
448 if matcher == nil {
449 return packages // we can't possibly match against anything; no-op. Should have been filtered out by ParsePackageOverrideString
450 }
451
452 result := make([]*StepPackageVersion, len(packages))
453 for i, p := range packages {
454 if matcher(p) {
455 result[i] = &StepPackageVersion{
456 PackageID: p.PackageID,
457 ActionName: p.ActionName,
458 PackageReferenceName: p.PackageReferenceName,
459 Version: override.Version, // Important bit
460 }
461 } else {
462 result[i] = p
463 }
464 }
465 return result
466}

Callers 1

ApplyPackageOverridesFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected