8
8
using Neptuo . Activators ;
9
9
using Neptuo . Logging ;
10
10
using NuGet . Common ;
11
+ using NuGet . Protocol ;
11
12
using NuGet . Protocol . Core . Types ;
12
13
using NuGet . Versioning ;
13
14
using PackageManager . Logging ;
@@ -71,11 +72,16 @@ public async Task<IEnumerable<IPackage>> SearchAsync(IEnumerable<IPackageSource>
71
72
queryTransformer . Transform ( term ) ;
72
73
term . Id . Remove ( searchText ) ;
73
74
74
- bool isLateIdSearch = false ;
75
+ NuGetSearchTerm lateTerm = null ;
75
76
if ( term . IsEmpty ( ) )
77
+ {
76
78
term . Id . Add ( searchText ) ;
79
+ }
77
80
else
78
- isLateIdSearch = true ;
81
+ {
82
+ lateTerm = term . Clone ( ) ;
83
+ lateTerm . Id . Add ( searchText ) ;
84
+ }
79
85
80
86
log . Debug ( $ "Searching - user text:'{ searchText } '; target query:'{ term } '.") ;
81
87
@@ -103,6 +109,21 @@ public async Task<IEnumerable<IPackage>> SearchAsync(IEnumerable<IPackageSource>
103
109
continue ;
104
110
}
105
111
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
+
106
127
int sourceSearchPackageCount = 0 ;
107
128
foreach ( IPackageSearchMetadata package in await SearchAsync ( search , term . ToString ( ) , options , cancellationToken ) )
108
129
{
@@ -112,8 +133,11 @@ public async Task<IEnumerable<IPackage>> SearchAsync(IEnumerable<IPackageSource>
112
133
if ( result . Count >= options . PageSize )
113
134
break ;
114
135
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 } '.") ;
116
139
continue ;
140
+ }
117
141
118
142
await AddPackageAsync ( result , repository , package , options . IsPrereleaseIncluded , cancellationToken ) ;
119
143
sourceSearchPackageCount ++ ;
@@ -122,6 +146,15 @@ public async Task<IEnumerable<IPackage>> SearchAsync(IEnumerable<IPackageSource>
122
146
// If package source reached end, skip it from next probing.
123
147
if ( sourceSearchPackageCount < options . PageSize )
124
148
sourcesToSkip . Add ( packageSource ) ;
149
+
150
+ if ( localTerm != null )
151
+ {
152
+ term = localTerm ;
153
+ localTerm = null ;
154
+
155
+ if ( clearLateTerm )
156
+ lateTerm = null ;
157
+ }
125
158
}
126
159
127
160
if ( ! hasItems )
0 commit comments