Skip to content

Commit

Permalink
Merge pull request #437 from AvantiPoint/dev/ds/optimize-package-vers…
Browse files Browse the repository at this point in the history
…ions

Optimize package versions
  • Loading branch information
dansiegel authored Feb 17, 2024
2 parents dffc518 + 41891bc commit 8e9ee1d
Show file tree
Hide file tree
Showing 5 changed files with 86 additions and 71 deletions.
110 changes: 55 additions & 55 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
@@ -1,56 +1,56 @@
<Project>
<ItemGroup>
<PackageVersion Include="AWSSDK.S3" Version="3.7.204" />
<PackageVersion Include="AWSSDK.SecurityToken" Version="3.7.201.39" />
<PackageVersion Include="Azure.Storage.Blobs" Version="12.18.0" />
<PackageVersion Include="NuGet.Packaging" Version="6.7.0" />
<PackageVersion Include="NuGet.Frameworks" Version="6.7.0" />
<PackageVersion Include="NuGet.Versioning" Version="6.7.0" />
<PackageVersion Include="NGraphics" Version="0.6.0-beta2" />
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.5.0" />
<PackageVersion Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.5.0" />
</ItemGroup>
<ItemGroup Condition="$(TargetFramework) == 'net6.0'">
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="6.0.0" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="6.0.0" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="6.0.1" />
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="6.0.0" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.16" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.16" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="6.0.16" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.16" />
<PackageVersion Include="Pomelo.EntityFrameworkCore.MySql" Version="6.0.2" />
<PackageVersion Include="System.Text.Json" Version="6.0.7" />
<PackageVersion Include="System.Reflection.Metadata" Version="6.0.1" />
</ItemGroup>
<ItemGroup Condition="$(TargetFramework) == 'net7.0'">
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="7.0.0" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="7.0.0" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="7.0.0" />
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="7.0.0" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="7.0.5" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.5" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="7.0.5" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.5" />
<PackageVersion Include="Pomelo.EntityFrameworkCore.MySql" Version="7.0.0" />
<PackageVersion Include="System.Text.Json" Version="7.0.2" />
<PackageVersion Include="System.Reflection.Metadata" Version="7.0.1" />
</ItemGroup>
<ItemGroup Condition="$(TargetFramework) == 'net8.0'">
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="8.0.0-rc.2.23479.6" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.0-rc.2.23479.6" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.0-rc.2.23479.6" />
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="8.0.0-rc.2.23479.6" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="8.0.0-rc.2.23480.1" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.0-rc.2.23480.1" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.0-rc.2.23480.1" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.0-rc.2.23480.1" />
<PackageVersion Include="Pomelo.EntityFrameworkCore.MySql" Version="8.0.0-beta.1" />
<PackageVersion Include="System.Text.Json" Version="8.0.0-rc.2.23479.6" />
<PackageVersion Include="System.Reflection.Metadata" Version="8.0.0-rc.2.23479.6" />
</ItemGroup>
<ItemGroup>
<PackageVersion Include="Nerdbank.GitVersioning" Version="3.6.133" />
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="1.1.1" />
</ItemGroup>
<Project>
<ItemGroup>
<PackageVersion Include="AWSSDK.S3" Version="3.7.305.28" />
<PackageVersion Include="AWSSDK.SecurityToken" Version="3.7.300.53" />
<PackageVersion Include="Azure.Storage.Blobs" Version="12.19.1" />
<PackageVersion Include="NuGet.Packaging" Version="6.9.1" />
<PackageVersion Include="NuGet.Frameworks" Version="6.9.1" />
<PackageVersion Include="NuGet.Versioning" Version="6.9.1" />
<PackageVersion Include="NGraphics" Version="0.6.0-beta2" />
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.5.0" />
<PackageVersion Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.5.0" />
</ItemGroup>
<ItemGroup Condition="$(TargetFramework) == 'net6.0'">
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="6.0.0" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="6.0.0" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="6.0.4" />
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="6.0.0" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.27" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.27" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="6.0.27" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.27" />
<PackageVersion Include="Pomelo.EntityFrameworkCore.MySql" Version="6.0.2" />
<PackageVersion Include="System.Text.Json" Version="6.0.9" />
<PackageVersion Include="System.Reflection.Metadata" Version="6.0.1" />
</ItemGroup>
<ItemGroup Condition="$(TargetFramework) == 'net7.0'">
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="7.0.0" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="7.0.0" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="7.0.1" />
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="7.0.0" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="7.0.16" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.16" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="7.0.16" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.16" />
<PackageVersion Include="Pomelo.EntityFrameworkCore.MySql" Version="7.0.0" />
<PackageVersion Include="System.Text.Json" Version="7.0.4" />
<PackageVersion Include="System.Reflection.Metadata" Version="7.0.2" />
</ItemGroup>
<ItemGroup Condition="$(TargetFramework) == 'net8.0'">
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="8.0.0" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="8.0.2" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.2" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.2" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.2" />
<PackageVersion Include="Pomelo.EntityFrameworkCore.MySql" Version="8.0.0" />
<PackageVersion Include="System.Text.Json" Version="8.0.2" />
<PackageVersion Include="System.Reflection.Metadata" Version="8.0.0" />
</ItemGroup>
<ItemGroup>
<PackageVersion Include="Nerdbank.GitVersioning" Version="3.6.133" />
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="8.0.0" />
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -36,18 +36,7 @@ public async Task<PackageVersionsResponse> GetPackageVersionsOrNullAsync(
// First, attempt to find all package versions using the upstream source.
var versions = await _mirror.FindPackageVersionsOrNullAsync(id, cancellationToken);

if (versions == null)
{
// Fallback to the local packages if mirroring is disabled.
var packages = await _packages.FindAsync(id, includeUnlisted: true, cancellationToken);

if (!packages.Any())
{
return null;
}

versions = packages.Select(p => p.Version).ToList();
}
versions ??= await _packages.FindVersionsAsync(id, true, cancellationToken);

return new PackageVersionsResponse
{
Expand Down
9 changes: 9 additions & 0 deletions src/AvantiPoint.Packages.Core/IPackageService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,15 @@ Task<Package> FindOrNullAsync(
/// <returns>The packages found. Always non-null.</returns>
Task<IReadOnlyList<Package>> FindAsync(string id, bool includeUnlisted, CancellationToken cancellationToken);

/// <summary>
/// Attempt to find all package versions for a given Package id.
/// </summary>
/// <param name="id">The packages' id.</param>
/// <param name="includeUnlisted">Whether unlisted results should be included.</param>
/// <param name="cancellationToken">A token to cancel the task.</param>
/// <returns>The Package Versions found. Allways non-null.</returns>
Task<IReadOnlyList<NuGetVersion>> FindVersionsAsync(string id, bool includeUnlisted, CancellationToken cancellationToken);

/// <summary>
/// Determine whether a package exists in the database (even if the package is unlisted).
/// </summary>
Expand Down
3 changes: 1 addition & 2 deletions src/AvantiPoint.Packages.Core/Mirror/MirrorService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,7 @@ public async Task<IReadOnlyList<NuGetVersion>> FindPackageVersionsOrNullAsync(
}

// Merge the local package versions into the upstream package versions.
var localPackages = await _localPackages.FindAsync(id, includeUnlisted: true, cancellationToken);
var localVersions = localPackages.Select(p => p.Version);
var localVersions = await _localPackages.FindVersionsAsync(id, includeUnlisted: true, cancellationToken);

return upstreamVersions.Concat(localVersions).Distinct().ToList();
}
Expand Down
22 changes: 20 additions & 2 deletions src/AvantiPoint.Packages.Core/PackageService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,9 @@ public async Task<bool> ExistsAsync(string id, NuGetVersion version, Cancellatio

public async Task<IReadOnlyList<Package>> FindAsync(string id, bool includeUnlisted, CancellationToken cancellationToken)
{
// TODO: Refactor this... this is a very expensive query...
var query = _context.Packages
.AsNoTracking()
.Include(p => p.Dependencies)
.Include(p => p.PackageTypes)
.Include(p => p.TargetFrameworks)
Expand All @@ -68,7 +70,23 @@ public async Task<IReadOnlyList<Package>> FindAsync(string id, bool includeUnlis
query = query.Where(p => p.Listed);
}

return (await query.ToListAsync(cancellationToken)).AsReadOnly();
var packages = await query.ToListAsync(cancellationToken);
return packages.AsReadOnly();
}

public async Task<IReadOnlyList<NuGetVersion>> FindVersionsAsync(string id, bool includeUnlisted, CancellationToken cancellationToken)
{
var query = _context.Packages
.AsNoTracking()
.Where(p => p.Id == id);

if (!includeUnlisted)
{
query = query.Where(p => p.Listed);
}

var versions = await query.Select(x => x.Version).ToListAsync(cancellationToken);
return versions.AsReadOnly();
}

public Task<Package> FindOrNullAsync(
Expand All @@ -88,7 +106,7 @@ public Task<Package> FindOrNullAsync(
query = query.Where(p => p.Listed);
}

return query.FirstOrDefaultAsync(cancellationToken);
return query.AsNoTracking().FirstOrDefaultAsync(cancellationToken);
}

public Task<bool> UnlistPackageAsync(string id, NuGetVersion version, CancellationToken cancellationToken)
Expand Down

0 comments on commit 8e9ee1d

Please sign in to comment.