88using Neptuo . Activators ;
99using Neptuo . Logging ;
1010using NuGet . Common ;
11+ using NuGet . Protocol ;
1112using NuGet . Protocol . Core . Types ;
1213using NuGet . Versioning ;
1314using PackageManager . Logging ;
@@ -71,11 +72,16 @@ public async Task<IEnumerable<IPackage>> SearchAsync(IEnumerable<IPackageSource>
7172 queryTransformer . Transform ( term ) ;
7273 term . Id . Remove ( searchText ) ;
7374
74- bool isLateIdSearch = false ;
75+ NuGetSearchTerm lateTerm = null ;
7576 if ( term . IsEmpty ( ) )
77+ {
7678 term . Id . Add ( searchText ) ;
79+ }
7780 else
78- isLateIdSearch = true ;
81+ {
82+ lateTerm = term . Clone ( ) ;
83+ lateTerm . Id . Add ( searchText ) ;
84+ }
7985
8086 log . Debug ( $ "Searching - user text:'{ searchText } '; target query:'{ term } '.") ;
8187
@@ -103,6 +109,21 @@ public async Task<IEnumerable<IPackage>> SearchAsync(IEnumerable<IPackageSource>
103109 continue ;
104110 }
105111
112+ NuGetSearchTerm localTerm = null ;
113+ bool clearLateTerm = false ;
114+ if ( search is LocalPackageSearchResource )
115+ {
116+ // Searching a feed from folder.
117+ localTerm = term ;
118+ term = new NuGetSearchTerm ( ) ;
119+
120+ if ( lateTerm == null )
121+ {
122+ lateTerm = localTerm ;
123+ clearLateTerm = true ;
124+ }
125+ }
126+
106127 int sourceSearchPackageCount = 0 ;
107128 foreach ( IPackageSearchMetadata package in await SearchAsync ( search , term . ToString ( ) , options , cancellationToken ) )
108129 {
@@ -112,8 +133,11 @@ public async Task<IEnumerable<IPackage>> SearchAsync(IEnumerable<IPackageSource>
112133 if ( result . Count >= options . PageSize )
113134 break ;
114135
115- if ( isLateIdSearch && package . Identity . Id . IndexOf ( searchText , StringComparison . InvariantCultureIgnoreCase ) == - 1 )
136+ if ( lateTerm != null && ! lateTerm . IsMatched ( package ) )
137+ {
138+ log . Debug ( $ "Package skipped by late search term '{ lateTerm } '.") ;
116139 continue ;
140+ }
117141
118142 await AddPackageAsync ( result , repository , package , options . IsPrereleaseIncluded , cancellationToken ) ;
119143 sourceSearchPackageCount ++ ;
@@ -122,6 +146,15 @@ public async Task<IEnumerable<IPackage>> SearchAsync(IEnumerable<IPackageSource>
122146 // If package source reached end, skip it from next probing.
123147 if ( sourceSearchPackageCount < options . PageSize )
124148 sourcesToSkip . Add ( packageSource ) ;
149+
150+ if ( localTerm != null )
151+ {
152+ term = localTerm ;
153+ localTerm = null ;
154+
155+ if ( clearLateTerm )
156+ lateTerm = null ;
157+ }
125158 }
126159
127160 if ( ! hasItems )
0 commit comments