/// <summary> /// Searches the package manager metadata to figure out the source code repository. /// </summary> /// <param name="purl">The <see cref="PackageURL"/> that we need to find the source code repository.</param> /// <param name="metadata">The json representation of this package's metadata.</param> /// <remarks>If no version specified, defaults to latest version.</remarks> /// <returns> /// A dictionary, mapping each possible repo source entry to its probability/empty dictionary /// </returns> protected override async Task <Dictionary <PackageURL, double> > SearchRepoUrlsInPackageMetadata(PackageURL purl, string metadata) { Dictionary <PackageURL, double> mapping = new(); try { string?version = purl.Version; if (string.IsNullOrEmpty(version)) { version = (await EnumerateVersionsAsync(purl)).First(); } NuspecReader? nuspecReader = GetNuspec(purl.Name, version); RepositoryMetadata?repositoryMetadata = nuspecReader?.GetRepositoryMetadata(); if (repositoryMetadata != null && GitHubProjectManager.IsGitHubRepoUrl(repositoryMetadata.Url, out PackageURL? githubPurl)) { if (githubPurl != null) { mapping.Add(githubPurl, 1.0F); } } return(mapping); } catch (Exception ex) { Logger.Debug(ex, $"Error fetching/parsing NuGet repository metadata: {ex.Message}"); } // If nothing worked, return the default empty dictionary return(mapping); }
/// <summary> /// Updates the <see cref="Repository"/> for this package version in the <see cref="PackageMetadata"/>. /// </summary> /// <param name="metadata">The <see cref="PackageMetadata"/> object to update with the values for this version.</param> private async Task UpdateMetadataRepository(PackageMetadata metadata) { NuspecReader? nuspecReader = GetNuspec(metadata.Name !, metadata.PackageVersion !); RepositoryMetadata?repositoryMetadata = nuspecReader?.GetRepositoryMetadata(); if (repositoryMetadata != null && GitHubProjectManager.IsGitHubRepoUrl(repositoryMetadata.Url, out PackageURL? githubPurl)) { Repository ghRepository = new() { Type = "github" }; await ghRepository.ExtractRepositoryMetadata(githubPurl !); metadata.Repository ??= new List <Repository>(); metadata.Repository.Add(ghRepository); } }