-
-
Notifications
You must be signed in to change notification settings - Fork 177
Fix nbgv set-version to write to the best version.json file in scope
#1264
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
@KalleOlaviNiemitalo I'd love to get your review on this too. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR fixes the nbgv set-version command to write to the correct version.json file that specifies a version, rather than just any version.json file in scope. The fix required a significant rework of the version.json file discovery algorithm to provide more granular information about where different types of version files are located.
- Introduced new enums and data structures to specify requirements and track locations of version files
- Updated all version file reading methods to support non-merged results and location tracking
- Modified the
nbgv set-versioncommand to use the new API to find the correct file to modify
Reviewed Changes
Copilot reviewed 12 out of 12 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| test/Nerdbank.GitVersioning.Tests/VersionFileTests.cs | Updated test to use new API with location tracking |
| src/nbgv/Program.cs | Modified set-version command to use version-specifying directory |
| src/NerdBank.GitVersioning/VersionOracle.cs | Updated to use new GetWorkingCopyVersion signature |
| src/NerdBank.GitVersioning/VersionFileRequirements.cs | New enum defining search requirements flags |
| src/NerdBank.GitVersioning/VersionFileLocations.cs | New struct to track different version file locations |
| src/NerdBank.GitVersioning/VersionFile.cs | Major refactor of version search algorithm with new requirements and location tracking |
| src/NerdBank.GitVersioning/NoGit/NoGitVersionFile.cs | Updated abstract method signature |
| src/NerdBank.GitVersioning/Managed/ManagedVersionFile.cs | Implemented new version search with root-to-branch preference |
| src/NerdBank.GitVersioning/Managed/GitExtensions.cs | Updated to use new API signature |
| src/NerdBank.GitVersioning/LibGit2/LibGit2VersionFile.cs | Implemented new version search algorithm |
| src/NerdBank.GitVersioning/LibGit2/LibGit2GitExtensions.cs | Updated to use new API signature |
| src/NerdBank.GitVersioning/DisabledGit/DisabledGitVersionFile.cs | Updated abstract method signature |
This required reworking how version.json files are discovered to report back on where certain version.json files were. In particular, we had these requirements that were not previously being met: * We have to know where the nearest version.json file is _that specifies a `version` property_, since that's the file that `nbgv set-version` will be writing to. * We have to get a deserialized `VersionOptions` object that has _not_ been merged with its parent when `inherit: true` is set. This is so that when we rewrite the file, we only serialize the same properties that came from that file rather than 'flattening' the inheritance hierarchy by including properties brought in from the parent. Rather than special case these particular requirements, I updated the version.json search algorithm to allow the caller to specify different combinations of requirements and get locations of potentially multiple files. Fixes #1257
Updated [Nerdbank.GitVersioning](https://github.com/dotnet/Nerdbank.GitVersioning) from 3.7.115 to 3.8.118. <details> <summary>Release notes</summary> _Sourced from [Nerdbank.GitVersioning's releases](https://github.com/dotnet/Nerdbank.GitVersioning/releases)._ ## 3.8.118 ## Fixes * Don't try to disable CA2243 warnings in the generated version info files for F# by @Numpsy in dotnet/Nerdbank.GitVersioning#1174 * Catch a more general JsonException. by @ANGEL-OF-DEV in dotnet/Nerdbank.GitVersioning#1191 * Retarget links to migrated docs by @bencemali in dotnet/Nerdbank.GitVersioning#1193 * Check MSBuild items with case insensitivity by @AArnott in dotnet/Nerdbank.GitVersioning#1213 * Fix inconsistent CLI output format for GitCommitDate by @Copilot in dotnet/Nerdbank.GitVersioning#1246 * Fix version height computed as 0 when project path has non-canonical casing by @Copilot in dotnet/Nerdbank.GitVersioning#1244 * When generating the GitCommitDate field in the AssemblyInfo for F#, d… by @Numpsy in dotnet/Nerdbank.GitVersioning#1253 * Only do Android version check on applications by @dotMorten in dotnet/Nerdbank.GitVersioning#1256 * Fix `nbgv set-version` to write to the best version.json file in scope by @AArnott in dotnet/Nerdbank.GitVersioning#1264 ## Enhancements * Add msbuild-provided prerelease identifiers by @AArnott in dotnet/Nerdbank.GitVersioning#1153 * Add support for stamping version on server.json for MCP servers with 0.0.0-placeholder replacement by @Copilot in dotnet/Nerdbank.GitVersioning#1270 and by @AArnott in dotnet/Nerdbank.GitVersioning#1271 * Add option to set / skip CloudBuildNumber by @MattKotsenas in dotnet/Nerdbank.GitVersioning#1190 * Add Central Package Management (CPM) support to nbgv install command by @Copilot in dotnet/Nerdbank.GitVersioning#1208 * Add --public-release argument to nbgv get-version command by @Copilot in dotnet/Nerdbank.GitVersioning#1245 * Invoke PrivateP2PCaching.proj fewer times by @AArnott in dotnet/Nerdbank.GitVersioning#1263 ## Other changes * Update dependency Cake.Core to v5 by @renovate[bot] in dotnet/Nerdbank.GitVersioning#1183 ## New Contributors * @ANGEL-OF-DEV made their first contribution in dotnet/Nerdbank.GitVersioning#1191 * @bencemali made their first contribution in dotnet/Nerdbank.GitVersioning#1193 * @Copilot made their first contribution in dotnet/Nerdbank.GitVersioning#1208 * @dotMorten made their first contribution in dotnet/Nerdbank.GitVersioning#1256 * @emmanuel-ferdman made their first contribution in dotnet/Nerdbank.GitVersioning#1145 **Full Changelog**: dotnet/Nerdbank.GitVersioning@v3.7.115...v3.8.118 ## 3.8.106-alpha ## What's Changed ### Enhancements * Add option to set / skip CloudBuildNumber by @MattKotsenas in dotnet/Nerdbank.GitVersioning#1190 * Add Central Package Management (CPM) support to nbgv install command by @Copilot in dotnet/Nerdbank.GitVersioning#1208 * Add --public-release argument to nbgv get-version command by @Copilot in dotnet/Nerdbank.GitVersioning#1245 * Invoke PrivateP2PCaching.proj fewer times by @AArnott in dotnet/Nerdbank.GitVersioning#1263 ### Fixes * Catch a more general JsonException. by @ANGEL-OF-DEV in dotnet/Nerdbank.GitVersioning#1191 * Retarget links to migrated docs by @bencemali in dotnet/Nerdbank.GitVersioning#1193 * Check MSBuild items with case insensitivity by @AArnott in dotnet/Nerdbank.GitVersioning#1213 * Fix inconsistent CLI output format for GitCommitDate by @Copilot in dotnet/Nerdbank.GitVersioning#1246 * Fix version height computed as 0 when project path has non-canonical casing by @Copilot in dotnet/Nerdbank.GitVersioning#1244 * When generating the GitCommitDate field in the AssemblyInfo for F#, d… by @Numpsy in dotnet/Nerdbank.GitVersioning#1253 * Only do Android version check on applications by @dotMorten in dotnet/Nerdbank.GitVersioning#1256 * Fix `nbgv set-version` to write to the best version.json file in scope by @AArnott in dotnet/Nerdbank.GitVersioning#1264 ### Other changes * Update dependency Cake.Core to v5 by @renovate[bot] in dotnet/Nerdbank.GitVersioning#1183 ## New Contributors * @ANGEL-OF-DEV made their first contribution in dotnet/Nerdbank.GitVersioning#1191 * @bencemali made their first contribution in dotnet/Nerdbank.GitVersioning#1193 * @Copilot made their first contribution in dotnet/Nerdbank.GitVersioning#1208 * @dotMorten made their first contribution in dotnet/Nerdbank.GitVersioning#1256 **Full Changelog**: dotnet/Nerdbank.GitVersioning@v3.8.38-alpha...v3.8.106-alpha ## 3.8.38-alpha ## Fixes * Don't try to disable CA2243 warnings in the generated version info files for F# by @Numpsy in dotnet/Nerdbank.GitVersioning#1174 ## Enhancements * Add msbuild-provided prerelease identifiers by @AArnott in dotnet/Nerdbank.GitVersioning#1153 ## New Contributors * @emmanuel-ferdman made their first contribution in dotnet/Nerdbank.GitVersioning#1145 **Full Changelog**: dotnet/Nerdbank.GitVersioning@v3.7.115...v3.8.38-alpha Commits viewable in [compare view](dotnet/Nerdbank.GitVersioning@v3.7.115...v3.8.118). </details> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This required reworking how version.json files are discovered to report back on where certain version.json files were. In particular, we had these requirements that were not previously being met:
versionproperty, since that's the file thatnbgv set-versionwill be writing to.VersionOptionsobject that has not been merged with its parent wheninherit: trueis set. This is so that when we rewrite the file, we only serialize the same properties that came from that file rather than 'flattening' the inheritance hierarchy by including properties brought in from the parent.Rather than special case these particular requirements, I updated the version.json search algorithm to allow the caller to specify different combinations of requirements and get locations of potentially multiple files.
Fixes #1257