|
1 | 1 | using System;
|
2 |
| -using System.Collections.Generic; |
3 | 2 | using System.IO;
|
4 |
| -using System.Linq; |
5 | 3 | using System.Threading;
|
6 | 4 | using System.Threading.Tasks;
|
7 | 5 | using Microsoft.Extensions.Logging;
|
|
10 | 8 |
|
11 | 9 | namespace BaGet.Core
|
12 | 10 | {
|
13 |
| - using NuGetPackageType = NuGet.Packaging.Core.PackageType; |
14 |
| - |
15 | 11 | public class PackageIndexingService : IPackageIndexingService
|
16 | 12 | {
|
17 | 13 | private readonly IPackageService _packages;
|
@@ -45,7 +41,7 @@ public async Task<PackageIndexingResult> IndexAsync(Stream packageStream, Cancel
|
45 | 41 | {
|
46 | 42 | using (var packageReader = new PackageArchiveReader(packageStream, leaveStreamOpen: true))
|
47 | 43 | {
|
48 |
| - package = GetPackageMetadata(packageReader); |
| 44 | + package = packageReader.GetPackageMetadata(); |
49 | 45 | nuspecStream = await packageReader.GetNuspecAsync(cancellationToken);
|
50 | 46 | nuspecStream = await nuspecStream.AsTemporaryFileStreamAsync();
|
51 | 47 |
|
@@ -148,181 +144,5 @@ await _storage.SavePackageContentAsync(
|
148 | 144 |
|
149 | 145 | return PackageIndexingResult.Success;
|
150 | 146 | }
|
151 |
| - |
152 |
| - private Package GetPackageMetadata(PackageArchiveReader packageReader) |
153 |
| - { |
154 |
| - var nuspec = packageReader.NuspecReader; |
155 |
| - |
156 |
| - (var repositoryUri, var repositoryType) = GetRepositoryMetadata(nuspec); |
157 |
| - |
158 |
| - return new Package |
159 |
| - { |
160 |
| - Id = nuspec.GetId(), |
161 |
| - Version = nuspec.GetVersion(), |
162 |
| - Authors = ParseAuthors(nuspec.GetAuthors()), |
163 |
| - Description = nuspec.GetDescription(), |
164 |
| - HasReadme = packageReader.HasReadme(), |
165 |
| - IsPrerelease = nuspec.GetVersion().IsPrerelease, |
166 |
| - Language = nuspec.GetLanguage() ?? string.Empty, |
167 |
| - Listed = true, |
168 |
| - MinClientVersion = nuspec.GetMinClientVersion()?.ToNormalizedString() ?? string.Empty, |
169 |
| - Published = DateTime.UtcNow, |
170 |
| - RequireLicenseAcceptance = nuspec.GetRequireLicenseAcceptance(), |
171 |
| - SemVerLevel = GetSemVerLevel(nuspec), |
172 |
| - Summary = nuspec.GetSummary(), |
173 |
| - Title = nuspec.GetTitle(), |
174 |
| - IconUrl = ParseUri(nuspec.GetIconUrl()), |
175 |
| - LicenseUrl = ParseUri(nuspec.GetLicenseUrl()), |
176 |
| - ProjectUrl = ParseUri(nuspec.GetProjectUrl()), |
177 |
| - RepositoryUrl = repositoryUri, |
178 |
| - RepositoryType = repositoryType, |
179 |
| - Dependencies = GetDependencies(nuspec), |
180 |
| - Tags = ParseTags(nuspec.GetTags()), |
181 |
| - PackageTypes = GetPackageTypes(nuspec), |
182 |
| - TargetFrameworks = GetTargetFrameworks(packageReader), |
183 |
| - }; |
184 |
| - } |
185 |
| - |
186 |
| - // Based off https://github.com/NuGet/NuGetGallery/blob/master/src/NuGetGallery.Core/SemVerLevelKey.cs |
187 |
| - private SemVerLevel GetSemVerLevel(NuspecReader nuspec) |
188 |
| - { |
189 |
| - if (nuspec.GetVersion().IsSemVer2) |
190 |
| - { |
191 |
| - return SemVerLevel.SemVer2; |
192 |
| - } |
193 |
| - |
194 |
| - foreach (var dependencyGroup in nuspec.GetDependencyGroups()) |
195 |
| - { |
196 |
| - foreach (var dependency in dependencyGroup.Packages) |
197 |
| - { |
198 |
| - if ((dependency.VersionRange.MinVersion != null && dependency.VersionRange.MinVersion.IsSemVer2) |
199 |
| - || (dependency.VersionRange.MaxVersion != null && dependency.VersionRange.MaxVersion.IsSemVer2)) |
200 |
| - { |
201 |
| - return SemVerLevel.SemVer2; |
202 |
| - } |
203 |
| - } |
204 |
| - } |
205 |
| - |
206 |
| - return SemVerLevel.Unknown; |
207 |
| - } |
208 |
| - |
209 |
| - private Uri ParseUri(string uriString) |
210 |
| - { |
211 |
| - if (string.IsNullOrEmpty(uriString)) return null; |
212 |
| - |
213 |
| - return new Uri(uriString); |
214 |
| - } |
215 |
| - |
216 |
| - private string[] ParseAuthors(string authors) |
217 |
| - { |
218 |
| - if (string.IsNullOrEmpty(authors)) return new string[0]; |
219 |
| - |
220 |
| - return authors.Split(new[] { ',', ';', '\t', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries); |
221 |
| - } |
222 |
| - |
223 |
| - private string[] ParseTags(string tags) |
224 |
| - { |
225 |
| - if (string.IsNullOrEmpty(tags)) return new string[0]; |
226 |
| - |
227 |
| - return tags.Split(new[] { ',', ';', ' ', '\t', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries); |
228 |
| - } |
229 |
| - |
230 |
| - private (Uri repositoryUrl, string repositoryType) GetRepositoryMetadata(NuspecReader nuspec) |
231 |
| - { |
232 |
| - var repository = nuspec.GetRepositoryMetadata(); |
233 |
| - |
234 |
| - if (string.IsNullOrEmpty(repository?.Url) || |
235 |
| - !Uri.TryCreate(repository.Url, UriKind.Absolute, out var repositoryUri)) |
236 |
| - { |
237 |
| - return (null, null); |
238 |
| - } |
239 |
| - |
240 |
| - if (repositoryUri.Scheme != Uri.UriSchemeHttps) |
241 |
| - { |
242 |
| - return (null, null); |
243 |
| - } |
244 |
| - |
245 |
| - if (repository.Type.Length > 100) |
246 |
| - { |
247 |
| - throw new InvalidOperationException("Repository type must be less than or equal 100 characters"); |
248 |
| - } |
249 |
| - |
250 |
| - return (repositoryUri, repository.Type); |
251 |
| - } |
252 |
| - |
253 |
| - private List<PackageDependency> GetDependencies(NuspecReader nuspec) |
254 |
| - { |
255 |
| - var dependencies = new List<PackageDependency>(); |
256 |
| - |
257 |
| - foreach (var group in nuspec.GetDependencyGroups()) |
258 |
| - { |
259 |
| - var targetFramework = group.TargetFramework.GetShortFolderName(); |
260 |
| - |
261 |
| - if (!group.Packages.Any()) |
262 |
| - { |
263 |
| - dependencies.Add(new PackageDependency |
264 |
| - { |
265 |
| - Id = null, |
266 |
| - VersionRange = null, |
267 |
| - TargetFramework = targetFramework, |
268 |
| - }); |
269 |
| - } |
270 |
| - |
271 |
| - foreach (var dependency in group.Packages) |
272 |
| - { |
273 |
| - dependencies.Add(new PackageDependency |
274 |
| - { |
275 |
| - Id = dependency.Id, |
276 |
| - VersionRange = dependency.VersionRange?.ToString(), |
277 |
| - TargetFramework = targetFramework, |
278 |
| - }); |
279 |
| - } |
280 |
| - } |
281 |
| - |
282 |
| - return dependencies; |
283 |
| - } |
284 |
| - |
285 |
| - private List<PackageType> GetPackageTypes(NuspecReader nuspec) |
286 |
| - { |
287 |
| - var packageTypes = nuspec |
288 |
| - .GetPackageTypes() |
289 |
| - .Select(t => new PackageType |
290 |
| - { |
291 |
| - Name = t.Name, |
292 |
| - Version = t.Version.ToString() |
293 |
| - }) |
294 |
| - .ToList(); |
295 |
| - |
296 |
| - // Default to the standard "dependency" package type if no types were found. |
297 |
| - if (packageTypes.Count == 0) |
298 |
| - { |
299 |
| - packageTypes.Add(new PackageType |
300 |
| - { |
301 |
| - Name = NuGetPackageType.Dependency.Name, |
302 |
| - Version = NuGetPackageType.Dependency.Version.ToString(), |
303 |
| - }); |
304 |
| - } |
305 |
| - |
306 |
| - return packageTypes; |
307 |
| - } |
308 |
| - |
309 |
| - private List<TargetFramework> GetTargetFrameworks(PackageArchiveReader packageReader) |
310 |
| - { |
311 |
| - var targetFrameworks = packageReader |
312 |
| - .GetSupportedFrameworks() |
313 |
| - .Select(f => new TargetFramework |
314 |
| - { |
315 |
| - Moniker = f.GetShortFolderName() |
316 |
| - }) |
317 |
| - .ToList(); |
318 |
| - |
319 |
| - // Default to the "any" framework if no frameworks were found. |
320 |
| - if (targetFrameworks.Count == 0) |
321 |
| - { |
322 |
| - targetFrameworks.Add(new TargetFramework { Moniker = "any" }); |
323 |
| - } |
324 |
| - |
325 |
| - return targetFrameworks; |
326 |
| - } |
327 | 147 | }
|
328 | 148 | }
|
0 commit comments