@@ -124,6 +124,14 @@ func NewPackageListFromRefList(reflist *PackageRefList, collection *PackageColle
124124 return result , nil
125125}
126126
127+ // Has checks whether package is already in the list
128+ func (l * PackageList ) Has (p * Package ) bool {
129+ key := l .keyFunc (p )
130+ _ , ok := l .packages [key ]
131+
132+ return ok
133+ }
134+
127135// Add appends package to package list, additionally checking for uniqueness
128136func (l * PackageList ) Add (p * Package ) error {
129137 key := l .keyFunc (p )
@@ -511,15 +519,27 @@ func (l *PackageList) FilterWithProgress(queries []PackageQuery, withDependencie
511519
512520 // try to satisfy dependencies
513521 for _ , dep := range missing {
514- // dependency might have already been satisfied
515- // with packages already been added
516- if result .Search (dep , false ) != nil {
517- continue
522+ if dependencyOptions & DepFollowAllVariants == 0 {
523+ // dependency might have already been satisfied
524+ // with packages already been added
525+ //
526+ // when follow-all-variants is enabled, we need to try to expand anyway,
527+ // as even if dependency is satisfied now, there might be other ways to satisfy dependency
528+ if result .Search (dep , false ) != nil {
529+ if dependencyOptions & DepVerboseResolve == DepVerboseResolve && progress != nil {
530+ progress .ColoredPrintf ("@{y}Already satisfied dependency@|: %s with %s" , & dep , result .Search (dep , true ))
531+ }
532+ continue
533+ }
518534 }
519535
520536 searchResults := l .Search (dep , true )
521537 if len (searchResults ) > 0 {
522538 for _ , p := range searchResults {
539+ if result .Has (p ) {
540+ continue
541+ }
542+
523543 if dependencyOptions & DepVerboseResolve == DepVerboseResolve && progress != nil {
524544 progress .ColoredPrintf ("@{g}Injecting package@|: %s" , p )
525545 }
0 commit comments