git summary - #22
git summary#22
Conversation
|
Important Review skippedToo many files! This PR contains 270 files, which is 120 over the limit of 150. ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (270)
You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Tip 💬 Introducing Slack Agent: The best way for teams to turn conversations into code.Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.
Built for teams:
One agent for your entire SDLC. Right inside Slack. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Pull request overview
This PR adds a “Git Summary” capability (new analyzer + HTML rendering) and introduces a process-execution abstraction (IProcessRunner) alongside broader adoption of System.IO.Abstractions to improve testability and enable recording/replay of external command output.
Changes:
- Introduce
NPA.ProcessRunner(IProcessRunner,SystemProcessRunner,FakeProcessRunner) and refactor git/process callers to use it. - Add
NPA.GitSummary(report model + analyzer) and render results in the HTML summary templates. - Add new test projects and a large set of serialized command outputs for replay-based tests.
Reviewed changes
Copilot reviewed 183 out of 270 changed files in this pull request and generated 9 comments.
Show a summary per file
| File | Description |
|---|---|
| src/NetPackageAnalyzer/NuGetInfo/NugetInfoData.cs | Inject IFileSystem into NuGet license discovery. |
| src/NetPackageAnalyzer/NuGetInfo/NuGetInfo.csproj | Add IO abstraction wrapper package reference. |
| src/NetPackageAnalyzer/NPA.ProcessRunner/IProcessRunner.cs | Define process-runner abstraction. |
| src/NetPackageAnalyzer/NPA.ProcessRunner/SystemProcessRunner.cs | Provide real process runner implementation. |
| src/NetPackageAnalyzer/NPA.ProcessRunner/FakeProcessRunner.cs | Provide replay-based fake runner for tests. |
| src/NetPackageAnalyzer/NPA.ProcessRunner/ProcessExecutionResult.cs | Add process result DTOs + JSON (de)serialization helpers. |
| src/NetPackageAnalyzer/NPA.ProcessRunner/NPA.ProcessRunner.csproj | New project for process execution abstraction. |
| src/NetPackageAnalyzer/NPA.GitSummary/GitRepositorySummaryAnalyzer.cs | New git-summary analyzer that shells out to git. |
| src/NetPackageAnalyzer/NPA.GitSummary/GitRepositorySummaryReport.cs | Report model types for churn/bus factor/velocity/etc. |
| src/NetPackageAnalyzer/NPA.GitSummary/NPA.GitSummary.csproj | New project for git summary feature. |
| src/NetPackageAnalyzer/NPA.GitSummary.Tests/GitRepositorySummaryAnalyzerTests.cs | Unit tests for report builders/analyzer helpers. |
| src/NetPackageAnalyzer/NPA.GitSummary.Tests/NPA.GitSummary.Tests.csproj | New test project for git summary. |
| src/NetPackageAnalyzer/NPA.GitInfo/GitInfo.cs | Refactor git info gathering to use IProcessRunner. |
| src/NetPackageAnalyzer/NPA.GitInfo/NPA.GitInfo.csproj | Reference NPA.ProcessRunner. |
| src/NetPackageAnalyzer/NPA.HtmlData/ExtractImages.cs | Inject IFileSystem for image output. |
| src/NetPackageAnalyzer/NPA.HtmlData/NPA.HtmlData.csproj | Add IO abstraction wrapper package reference. |
| src/NetPackageAnalyzer/NPA.BigResources/ZipFiles.cs | Add optional IFileSystem parameter and directory ops via abstraction. |
| src/NetPackageAnalyzer/NPA.BigResources/NPA.BigResources.csproj | Add IO abstraction wrapper package reference. |
| src/NetPackageAnalyzer/AnalyzeMerge/ProcessOutput.cs | Refactor git command execution to use IProcessRunner. |
| src/NetPackageAnalyzer/AnalyzeMerge/AnalyzeMergeData.cs | Inject IFileSystem and use abstraction for output writes. |
| src/NetPackageAnalyzer/AnalyzeMerge/AnalyzeMerge.csproj | Reference NPA.ProcessRunner + IO abstraction wrapper package. |
| src/NetPackageAnalyzer/NetPackageAnalyzeHistory/FileHistorySimple.cs | Refactor git history execution to use IProcessRunner. |
| src/NetPackageAnalyzer/NetPackageAnalyzeHistory/Commits.cs | Refactor git history execution to use IProcessRunner. |
| src/NetPackageAnalyzer/NetPackageAnalyzeHistory/NetPackageAnalyzeHistory.csproj | Reference NPA.ProcessRunner. |
| src/NetPackageAnalyzer/NetPackageAnalyzerObjects/ProjectsDict.cs | Thread IProcessRunner through history/ref discovery. |
| src/NetPackageAnalyzer/NetPackageAnalyzerObjects/PackageWithVersion.cs | Require process runner when constructing problem package records. |
| src/NetPackageAnalyzer/NetPackageAnalyzerObjects/PackageData.cs | Thread IProcessRunner into package data gathering. |
| src/NetPackageAnalyzer/NetPackageAnalyzerObjects/mixin/Packages.mixin | Update generated APIs to accept IProcessRunner. |
| src/NetPackageAnalyzer/NetPackageAnalyzerObjects/many.cs | Add NamePerCountArray.FromData helper. |
| src/NetPackageAnalyzer/NetPackageAnalyzerObjects/GenerateFiles.cs | Thread IProcessRunner through generation pipeline. |
| src/NetPackageAnalyzer/NetPackageAnalyzerObjects/generatedPartial/PackageWithVersion.cs | Thread IProcessRunner into PackageWithVersion. |
| src/NetPackageAnalyzer/NetPackageAnalyzerObjects/generatedPartial/PackageGatherInfo.cs | Thread IProcessRunner into PackageGatherInfo.VerifyWhy. |
| src/NetPackageAnalyzer/NetPackageAnalyzerObjects/generatedPartial/IOperations.cs | Update interface signature to require IProcessRunner. |
| src/NetPackageAnalyzer/NetPackageAnalyzerObjects/NetPackageAnalyzerObjects.csproj | Reference NPA.ProcessRunner. |
| src/NetPackageAnalyzer/NetPackageAnalyzerExportHTML/NetPackageAnalyzerExportHTML.csproj | Reference NPA.GitSummary + NPA.ProcessRunner. |
| src/NetPackageAnalyzer/NetPackageAnalyzerExportHTML/HtmlSummary.cshtml | Add new “Git Summary” tab rendering. |
| src/NetPackageAnalyzer/NetPackageAnalyzerExportHTML/Templates/matzehuels_stacktower.cshtml | Update template model to include git summary report. |
| src/NetPackageAnalyzer/NetPackageAnalyzerExportHTML/globals.cs | Add global using for NPA.GitSummary. |
| src/NetPackageAnalyzer/NetPackageAnalyzerWork/NetPackageAnalyzerDocusaurus.csproj | Reference NPA.ProcessRunner. |
| src/NetPackageAnalyzer/NetPackageAnalyzerConsole/Program.cs | Change default args behavior (currently hard-coded). |
| src/NetPackageAnalyzer/NetPackageAnalyzerConsole/NetPackageAnalyzerConsole.csproj | Reference NPA.ProcessRunner + NPA.GitSummary. |
| src/NetPackageAnalyzer/NetPackageAnalyzerConsole/InternalsVisibleTo.cs | Add InternalsVisibleTo for console test project. |
| src/NetPackageAnalyzer/NetPackageAnalyzerConsole.Tests/TestProcessStarter.cs | Add replay-based integration-ish test harness. |
| src/NetPackageAnalyzer/NetPackageAnalyzerConsole.Tests/NetPackageAnalyzerConsole.Tests.csproj | New console tests project + copy JSON outputs to build output. |
| src/NetPackageAnalyzer/NetPackageAnalyzerConsole.Tests/eshopJSON/* | Add recorded command outputs for replay tests. |
| src/NetPackageAnalyzer/NetPackageAnalyzer.slnx | Add new projects to solution. |
Comments suppressed due to low confidence (1)
src/NetPackageAnalyzer/NPA.BigResources/ZipFiles.cs:25
SaveToFilenow accepts anIFileSystem, but extraction is still performed viaZipFile.ExtractToDirectoryAsync(stream, folderPath), which always writes to the real OS filesystem and ignores the injected filesystem. This makes the parameter misleading and limits testability. Either remove theIFileSystemparameter or implement extraction using the abstraction (or clearly document that extraction always targets the real filesystem).
using var stream = EmbeddedResources.GetStream(embeddedResource);
await ZipFile.ExtractToDirectoryAsync(stream, folderPath);
return ;
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| public record NugetInfoData(string PackageId, IFileSystem? fileSystem = null) | ||
| { | ||
| private readonly IFileSystem fileSystem = fileSystem ?? new FileSystem(); |
| public SystemProcessRunner() | ||
| { | ||
|
|
||
| Console.WriteLine(nr); | ||
| } |
| } | ||
| public sealed record GitMonthlyCommitFrequency(int Year, int Month, int CommitCount) | ||
| { | ||
| public string YearMonth => $"Year {Year:D4}-Month {Month:D2}:"; |
| FakeProcessRunner fakeProcessRunner = new (); | ||
| fakeProcessRunner.DeserializeFromFolder("eShopJSON"); | ||
| RealMainExecuting.ProcessRunner = fakeProcessRunner; |
| private readonly Queue<ProcessExecutionResult> runResults = new(); | ||
| Dictionary<ProcessToSerialize, ProcessExecutionResultToSerialize> results = new(); |
| string foldedOutput = @"D:\eu\GitHub\PackageAnalyzer\src\NetPackageAnalyzer\NetPackageAnalyzerConsole.Tests\eshopJSON"; | ||
| var serialize= p.Serialize(); | ||
| nr=Interlocked.Increment(ref nr); | ||
| await File.WriteAllTextAsync(Path.Combine(foldedOutput, $"output_{nr}.json"), serialize); | ||
| return ret; |
| if (args.Length == 0) | ||
| { | ||
| args = new[] { "-h" }; | ||
|
|
| args = new[] { "generateFiles", | ||
| "--folder", @"D:\eu\GitHub\eShop", | ||
| "-wg","HtmlSummary", | ||
| "--where", @"D:\eu\GitHub\PackageAnalyzer\src\documentation1\", | ||
| "--verbose","true" | ||
| }; |
| var args = new[] { "generateFiles", | ||
| "--folder", @"D:\eu\GitHub\eShop", | ||
| "-wg","HtmlSummary", | ||
| "--where", @"D:\eu\GitHub\PackageAnalyzer\src\documentation1\", | ||
| "--verbose","true" |
Comment out debug console output and hard-coded JSON file writes in SystemProcessRunner to avoid leaving test artifacts. Simplify GitMonthlyCommitFrequency.YearMonth formatting. Update test to use the corrected "eshopJSON" folder name and comment out hard-coded args in Program.cs. Refactor NugetInfoData to use the injected IFileSystem (fs) fallback instead of directly referencing a possibly null field when checking/reading package files.
No description provided.