@@ -41,12 +41,12 @@ private static async Task<IReadOnlyList<PackageIdentity>> GetPackagesAsync(
41
41
params string [ ] feedUrls
42
42
)
43
43
{
44
- var packages = new List < PackageIdentity > ( ) ;
44
+ var packages = new List < ( PackageIdentity packageId , bool isDeprecated ) > ( ) ;
45
45
46
46
foreach ( string feedUrl in feedUrls )
47
47
{
48
48
var feed = new NuGetFeed ( feedUrl ) ;
49
- IReadOnlyList < PackageIdentity > feedPackages = await GetPackagesAsync ( feed ) ;
49
+ IReadOnlyList < ( PackageIdentity , bool ) > feedPackages = await GetPackagesAsync ( feed ) ;
50
50
packages . AddRange ( feedPackages ) ;
51
51
}
52
52
@@ -59,17 +59,18 @@ params string[] feedUrls
59
59
return latestVersions ;
60
60
}
61
61
62
- private static async Task < IReadOnlyList < PackageIdentity > > GetPackagesAsync ( NuGetFeed feed )
62
+ private static async Task < IReadOnlyList < ( PackageIdentity packageId , bool isDeprecated ) > > GetPackagesAsync ( NuGetFeed feed )
63
63
{
64
64
Console . WriteLine ( $ "Getting packages from { feed . FeedUrl } ...") ;
65
65
66
66
if ( feed . FeedUrl == NuGetFeeds . NuGetOrg )
67
67
return await GetPackagesFromNuGetOrgAsync ( feed ) ;
68
68
else
69
- return await GetPackagesFromOtherGalleryAsync ( feed ) ;
69
+ //return await GetPackagesFromOtherGalleryAsync(feed);
70
+ throw new ApplicationException ( "NuGetOrg should be the only feed." ) ;
70
71
}
71
72
72
- private static async Task < IReadOnlyList < PackageIdentity > > GetPackagesFromNuGetOrgAsync ( NuGetFeed feed )
73
+ private static async Task < IReadOnlyList < ( PackageIdentity version , bool isDeprecated ) > > GetPackagesFromNuGetOrgAsync ( NuGetFeed feed )
73
74
{
74
75
Console . WriteLine ( "Fetching owner information..." ) ;
75
76
Dictionary < string , string [ ] > ownerInformation = await feed . GetOwnerMappingAsync ( ) ;
@@ -88,16 +89,16 @@ private static async Task<IReadOnlyList<PackageIdentity>> GetPackagesFromNuGetOr
88
89
89
90
Console . WriteLine ( "Getting versions..." ) ;
90
91
91
- ConcurrentBag < PackageIdentity > identities = [ ] ;
92
+ ConcurrentBag < ( PackageIdentity packageId , bool isDeprecated ) > identities = [ ] ;
92
93
93
94
await Parallel . ForEachAsync ( packageIds , async ( packageId , _ ) =>
94
95
{
95
- IReadOnlyList < NuGetVersion > versions = await feed . GetAllVersionsAsync ( packageId ) ;
96
+ IReadOnlyList < ( NuGetVersion version , bool isDeprecated ) > versions = await feed . GetAllVersionsAsync ( packageId ) ;
96
97
97
- foreach ( NuGetVersion version in versions )
98
+ foreach ( ( NuGetVersion version , bool isDeprecated ) version in versions )
98
99
{
99
- var identity = new PackageIdentity ( packageId , version ) ;
100
- identities . Add ( identity ) ;
100
+ var identity = new PackageIdentity ( packageId , version . version ) ;
101
+ identities . Add ( ( identity , version . isDeprecated ) ) ;
101
102
}
102
103
} ) ;
103
104
@@ -106,49 +107,53 @@ await Parallel.ForEachAsync(packageIds, async (packageId, _) =>
106
107
return identities . ToArray ( ) ;
107
108
}
108
109
109
- private static async Task < IReadOnlyList < PackageIdentity > > GetPackagesFromOtherGalleryAsync ( NuGetFeed feed )
110
- {
111
- Console . WriteLine ( "Enumerating feed..." ) ;
112
-
113
- IReadOnlyList < PackageIdentity > identities = await feed . GetAllPackagesAsync ( ) ;
114
-
115
- identities = identities . Where ( i => PackageFilter . Default . IsMatch ( i . Id ) ) . ToArray ( ) ;
116
-
117
- Console . WriteLine ( $ "Found { identities . Count : N0} package versions.") ;
118
-
119
- return identities . ToArray ( ) ;
120
- }
121
-
122
- private static IReadOnlyList < PackageIdentity > GetLatestVersions ( IReadOnlyList < PackageIdentity > identities , bool usePreviewVersions )
110
+ private static IReadOnlyList < PackageIdentity > GetLatestVersions (
111
+ IReadOnlyList < ( PackageIdentity packageId , bool isDeprecated ) > identities ,
112
+ bool usePreviewVersions
113
+ )
123
114
{
124
115
var result = new List < PackageIdentity > ( ) ;
125
116
126
- IEnumerable < IGrouping < string , PackageIdentity > > groups = identities . GroupBy ( i => i . Id ) ;
117
+ IEnumerable < IGrouping < string , ( PackageIdentity packageId , bool isDeprecated ) > > groups = identities . GroupBy ( i => i . Item1 . Id ) . OrderBy ( g => g . Key ) ;
127
118
128
- foreach ( IGrouping < string , PackageIdentity > group in groups . OrderBy ( g => g . Key ) )
119
+ foreach ( IGrouping < string , ( PackageIdentity packageId , bool isDeprecated ) > group in groups )
129
120
{
130
121
string packageId = group . Key ;
131
- IOrderedEnumerable < PackageIdentity > versions = group . OrderByDescending ( p => p . Version , VersionComparer . VersionReleaseMetadata ) ;
122
+ IOrderedEnumerable < ( PackageIdentity packageId , bool isDeprecated ) > versions =
123
+ group . OrderByDescending ( p => p . packageId . Version , VersionComparer . VersionReleaseMetadata ) ;
132
124
133
- PackageIdentity latestStable = versions . FirstOrDefault ( i => ! i . Version . IsPrerelease ) ;
134
- PackageIdentity latestPrerelease = versions . FirstOrDefault ( i => i . Version . IsPrerelease ) ;
125
+ ( PackageIdentity packageId , bool isDeprecated ) latestStable =
126
+ versions . FirstOrDefault ( i => ! i . packageId . Version . IsPrerelease ) ;
127
+ ( PackageIdentity packageId , bool isDeprecated ) latestPrerelease =
128
+ versions . FirstOrDefault ( i => i . packageId . Version . IsPrerelease ) ;
129
+
130
+ // If the latest version is deprecated, don't include any version.
131
+ if ( latestStable . isDeprecated )
132
+ latestStable = default ;
133
+ if ( latestPrerelease . isDeprecated )
134
+ latestPrerelease = default ;
135
135
136
136
if ( latestStable != default && latestPrerelease != default )
137
137
{
138
- bool stableIsNewer = VersionComparer . VersionReleaseMetadata . Compare ( latestPrerelease . Version , latestStable . Version ) <= 0 ;
138
+ bool stableIsNewer = VersionComparer . VersionReleaseMetadata . Compare (
139
+ latestPrerelease . packageId . Version ,
140
+ latestStable . packageId . Version
141
+ ) <= 0 ;
139
142
if ( stableIsNewer )
140
143
latestPrerelease = default ;
141
144
}
142
145
143
146
// Comment this out for preview-only versions.
144
147
if ( latestStable != default )
145
- result . Add ( latestStable ) ;
148
+ {
149
+ result . Add ( latestStable . packageId ) ;
150
+ }
146
151
147
152
if ( usePreviewVersions )
148
153
{
149
154
// Make sure it's a .NET 9 preview version.
150
- if ( ( latestPrerelease != default ) && latestPrerelease . Version . Major == 9 )
151
- result . Add ( latestPrerelease ) ;
155
+ if ( ( latestPrerelease != default ) && latestPrerelease . packageId . Version . Major == 9 )
156
+ result . Add ( latestPrerelease . packageId ) ;
152
157
}
153
158
}
154
159
0 commit comments