Skip to content

Commit

Permalink
refactor: Upgrade CSharpier.MSBuild
Browse files Browse the repository at this point in the history
  • Loading branch information
Oskar Klintrot committed Nov 1, 2024
1 parent 0a2f7a2 commit c6eae66
Show file tree
Hide file tree
Showing 10 changed files with 136 additions and 169 deletions.
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="CSharpier.MSBuild" Version="0.16.0" PrivateAssets="all" />
<PackageReference Include="CSharpier.MSBuild" Version="0.29.2" PrivateAssets="all" />
</ItemGroup>

</Project>
2 changes: 1 addition & 1 deletion src/UpdatR/Domain/Csproj.cs
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ public static Csproj Create(string path)
);
}

var doc = new XmlDocument { PreserveWhitespace = true, };
var doc = new XmlDocument { PreserveWhitespace = true };

doc.Load(file.FullName);

Expand Down
2 changes: 1 addition & 1 deletion src/UpdatR/Domain/DotnetTools.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ internal sealed partial class DotnetTools
private readonly FileInfo _path;
private readonly IEnumerable<Csproj> _affectedCsprojs;
private static readonly JsonSerializerOptions s_jsonSerializerOptions =
new(JsonSerializerDefaults.Web) { WriteIndented = true, };
new(JsonSerializerDefaults.Web) { WriteIndented = true };

private DotnetTools(FileInfo path, IEnumerable<Csproj> affectedCsprojs)
{
Expand Down
45 changes: 20 additions & 25 deletions src/UpdatR/Domain/RootDir.cs
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ var projectFile in Directory.EnumerateFiles(
new EnumerationOptions
{
MatchCasing = MatchCasing.CaseInsensitive,
RecurseSubdirectories = true
RecurseSubdirectories = true,
}
)
)
Expand All @@ -81,7 +81,7 @@ var configFile in Directory.EnumerateFiles(
{
MatchCasing = MatchCasing.CaseInsensitive,
RecurseSubdirectories = true,
AttributesToSkip = FileAttributes.System
AttributesToSkip = FileAttributes.System,
}
)
)
Expand Down Expand Up @@ -143,12 +143,7 @@ private static RootDir CreateFromFile(FileInfo path)

var dir = new RootDir(path.Directory!);

dir.AddDotnetTools(
Domain.DotnetTools.Create(
path.FullName,
projects
)
);
dir.AddDotnetTools(Domain.DotnetTools.Create(path.FullName, projects));

return dir;
}
Expand All @@ -170,12 +165,7 @@ static void AddDotnetToolsFromCsproj(RootDir dir)
continue;
}

dir.AddDotnetTools(
Domain.DotnetTools.Create(
configPath,
dir.Csprojs ?? []
)
);
dir.AddDotnetTools(Domain.DotnetTools.Create(configPath, dir.Csprojs ?? []));
}
}
}
Expand All @@ -189,16 +179,18 @@ private static HashSet<Csproj> GetProjectsRecursiveFromParent(DirectoryInfo path
if (isInConfigFolder)
{
projects.AddRange(
Directory.EnumerateFiles(
path.Parent!.FullName,
"*.csproj",
new EnumerationOptions
{
MatchCasing = MatchCasing.CaseInsensitive,
RecurseSubdirectories = true
}
)
.Select(Csproj.Create));
Directory
.EnumerateFiles(
path.Parent!.FullName,
"*.csproj",
new EnumerationOptions
{
MatchCasing = MatchCasing.CaseInsensitive,
RecurseSubdirectories = true,
}
)
.Select(Csproj.Create)
);
}

return projects;
Expand All @@ -217,7 +209,10 @@ private static IEnumerable<Csproj> GetProjectsFromSolution(FileInfo solution) =>
.Where(x => x.Exists)
.Select(x => Csproj.Create(x.FullName));

private static IEnumerable<DotnetTools> GetDotnetToolsConfigFromSolution(FileInfo solution, IEnumerable<Csproj> csprojs) =>
private static IEnumerable<DotnetTools> GetDotnetToolsConfigFromSolution(
FileInfo solution,
IEnumerable<Csproj> csprojs
) =>
Regex
.Matches(
File.ReadAllText(solution.FullName),
Expand Down
6 changes: 3 additions & 3 deletions src/UpdatR/Internals/Result.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ internal bool TryAddProject(ProjectWithPackages project)
project = project with
{
Path = Path.GetRelativePath(_rootPath, project.Path)
.Replace(Path.DirectorySeparatorChar, '\\')
.Replace(Path.DirectorySeparatorChar, '\\'),
};

foreach (var unknown in project.UnknownPackages)
Expand Down Expand Up @@ -143,7 +143,7 @@ internal sealed class DeprecatedPackage(
string packageId,
NuGetVersion version,
PackageDeprecationMetadata deprecationMetadata
)
)
{
public string PackageId { get; } = packageId;
public NuGetVersion Version { get; } = version;
Expand All @@ -154,7 +154,7 @@ internal sealed class VulnerablePackage(
string packageId,
NuGetVersion version,
IEnumerable<PackageVulnerabilityMetadata> vulnerabilities
)
)
{
public string PackageId { get; } = packageId;
public NuGetVersion Version { get; } = version;
Expand Down
108 changes: 50 additions & 58 deletions src/UpdatR/Summary.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ public sealed class Summary(
IEnumerable<UpdatedPackage> updatedPackages,
IEnumerable<DeprecatedPackage> deprecatedPackages,
IEnumerable<VulnerablePackage> vulnerablePackages
)
)
{
private int? _updatedPackagesCount;

Expand All @@ -26,77 +26,69 @@ IEnumerable<VulnerablePackage> vulnerablePackages
/// <summary>
/// Sources that failed to use due to 401.
/// </summary>
public IEnumerable<(string Name, string Source)> UnauthorizedSources { get; } = unauthorizedSources;
public IEnumerable<(string Name, string Source)> UnauthorizedSources { get; } =
unauthorizedSources;

internal static Summary Create(Result result)
{
var updatedPackages = result.Projects
.SelectMany(x => x.UpdatedPackages.Select(y => (Package: y, Project: x.Path)))
var updatedPackages = result
.Projects.SelectMany(x => x.UpdatedPackages.Select(y => (Package: y, Project: x.Path)))
.GroupBy(x => x.Package.PackageId)
.Select(
x =>
new UpdatedPackage(
PackageId: x.Key,
Updates: x.Select(y => (y.Package.From, y.Package.To, y.Project))
.OrderBy(x => x.Project)
)
);

var deprecatedPackages = result.Projects
.SelectMany(x => x.DeprecatedPackages.Select(y => (Package: y, Project: x.Path)))
.Select(x => new UpdatedPackage(
PackageId: x.Key,
Updates: x.Select(y => (y.Package.From, y.Package.To, y.Project))
.OrderBy(x => x.Project)
));

var deprecatedPackages = result
.Projects.SelectMany(x =>
x.DeprecatedPackages.Select(y => (Package: y, Project: x.Path))
)
.GroupBy(x => x.Package.PackageId)
.Select(x => (PackageId: x.Key, Versions: x.GroupBy(y => y.Package.Version)))
.Select(
x =>
(
x.PackageId,
Versions: x.Versions.Select(
y =>
(
y.Key,
y.First().Package.DeprecationMetadata,
Projects: y.Select(z => z.Project)
)
.Select(x =>
(
x.PackageId,
Versions: x.Versions.Select(y =>
(
y.Key,
y.First().Package.DeprecationMetadata,
Projects: y.Select(z => z.Project)
)
)
)
)
.Select(x => new DeprecatedPackage(
x.PackageId,
x.Versions.Select(y =>
(new DeprecatedVersion(y.Key, y.DeprecationMetadata), y.Projects)
)
));

var vulnerablePackages = result
.Projects.SelectMany(x =>
x.VulnerablePackages.Select(y => (Package: y, Project: x.Path))
)
.Select(
x =>
new DeprecatedPackage(
x.PackageId,
x.Versions.Select(
y => (new DeprecatedVersion(y.Key, y.DeprecationMetadata), y.Projects)
)
)
);

var vulnerablePackages = result.Projects
.SelectMany(x => x.VulnerablePackages.Select(y => (Package: y, Project: x.Path)))
.GroupBy(x => x.Package.PackageId)
.Select(x => (PackageId: x.Key, Versions: x.GroupBy(y => y.Package.Version)))
.Select(
x =>
(
x.PackageId,
Versions: x.Versions.Select(
y =>
(
y.Key,
y.First().Package.Vulnerabilities,
Projects: y.Select(z => z.Project)
)
.Select(x =>
(
x.PackageId,
Versions: x.Versions.Select(y =>
(
y.Key,
y.First().Package.Vulnerabilities,
Projects: y.Select(z => z.Project)
)
)
)
)
.Select(
x =>
new VulnerablePackage(
x.PackageId,
x.Versions.Select(
y => (new VulnerableVersion(y.Key, y.Vulnerabilities), y.Projects)
)
)
);
.Select(x => new VulnerablePackage(
x.PackageId,
x.Versions.Select(y =>
(new VulnerableVersion(y.Key, y.Vulnerabilities), y.Projects)
)
));

return new Summary(
result.UnknownPackages,
Expand Down
64 changes: 28 additions & 36 deletions src/UpdatR/Updater.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ namespace UpdatR;

public sealed partial class Updater(ILogger<Updater>? logger = null)
{
private readonly ILogger _logger = logger ?? new Microsoft.Extensions.Logging.Abstractions.NullLogger<Updater>();
private readonly ILogger _logger =
logger ?? new Microsoft.Extensions.Logging.Abstractions.NullLogger<Updater>();

/// <summary>
/// Update all packages in solution or project(s).
Expand Down Expand Up @@ -86,8 +87,8 @@ public async Task<Summary> UpdateAsync(
private static NuGetFramework? ParseTFM(string? targetFrameworkMoniker)
{
var tfm = string.IsNullOrWhiteSpace(targetFrameworkMoniker)
? null
: NuGetFramework.Parse(targetFrameworkMoniker);
? null
: NuGetFramework.Parse(targetFrameworkMoniker);

if (tfm == NuGetFramework.UnsupportedFramework)
{
Expand Down Expand Up @@ -122,10 +123,10 @@ static Regex ConvertSearchPatternToRegex(string matchAgainst)
}
}

private async Task<(IDictionary<string, NuGetPackage?> Packages, IDictionary<
string,
string
> UnauthorizedSources)> GetPackageVersions(
private async Task<(
IDictionary<string, NuGetPackage?> Packages,
IDictionary<string, string> UnauthorizedSources
)> GetPackageVersions(
IEnumerable<Csproj> projects,
IEnumerable<DotnetTools> dotnetTools,
Func<string, bool> shouldIncludePackage,
Expand Down Expand Up @@ -189,35 +190,26 @@ var repo in sourceRepositoryProvider
var metadata = searchMetadata
.OfType<IPackageSearchMetadata>()
.Where(x => x.Identity.HasVersion)
.Select(
x =>
new PackageMetadata(
x.Identity.Version,
x.DependencySets.Select(x => x.TargetFramework),
x is PackageSearchMetadata y
&& y.DeprecationMetadata is not null
? new(
y.DeprecationMetadata.Message,
y.DeprecationMetadata.Reasons,
y.DeprecationMetadata.AlternatePackage is null
? null
: new(
y.DeprecationMetadata
.AlternatePackage
.PackageId,
y.DeprecationMetadata.AlternatePackage.Range
)
.Select(x => new PackageMetadata(
x.Identity.Version,
x.DependencySets.Select(x => x.TargetFramework),
x is PackageSearchMetadata y && y.DeprecationMetadata is not null
? new(
y.DeprecationMetadata.Message,
y.DeprecationMetadata.Reasons,
y.DeprecationMetadata.AlternatePackage is null
? null
: new(
y.DeprecationMetadata.AlternatePackage.PackageId,
y.DeprecationMetadata.AlternatePackage.Range
)
: null,
x.Vulnerabilities?.Select(
y =>
new PackageVulnerabilityMetadata(
y.AdvisoryUrl,
y.Severity
)
)
)
);
: null,
x.Vulnerabilities?.Select(y => new PackageVulnerabilityMetadata(
y.AdvisoryUrl,
y.Severity
))
));

if (!metadata.Any())
{
Expand All @@ -231,8 +223,8 @@ y.DeprecationMetadata.AlternatePackage is null
{
packageSearchMetadata[packageId] = package with
{
PackageMetadatas = package.PackageMetadatas
.Union(metadata)
PackageMetadatas = package
.PackageMetadatas.Union(metadata)
.DistinctBy(x => x.Version)
.OrderByDescending(x => x.Version),
};
Expand Down
6 changes: 2 additions & 4 deletions tests/UpdatR.IntegrationTests/UpdaterTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -352,8 +352,7 @@ params string[]? packages
var summary = await update.UpdateAsync(temp, null, packages);

// Assert
await Verify(GetVerifyObjects())
.UseParameters(string.Join('/', packages ?? []));
await Verify(GetVerifyObjects()).UseParameters(string.Join('/', packages ?? []));

async IAsyncEnumerable<object> GetVerifyObjects()
{
Expand Down Expand Up @@ -399,8 +398,7 @@ params string[]? excludedPackages
var summary = await update.UpdateAsync(temp, excludedPackages);

// Assert
await Verify(GetVerifyObjects())
.UseParameters(string.Join('/', excludedPackages ?? []));
await Verify(GetVerifyObjects()).UseParameters(string.Join('/', excludedPackages ?? []));

async IAsyncEnumerable<object> GetVerifyObjects()
{
Expand Down
Loading

0 comments on commit c6eae66

Please sign in to comment.