Skip to content

Support package@version syntax in dotnet new install, partial fix for #45422#45545

Merged
Forgind merged 3 commits intodotnet:release/9.0.2xxfrom
Forgind:at-in-new-install
Jan 10, 2025
Merged

Support package@version syntax in dotnet new install, partial fix for #45422#45545
Forgind merged 3 commits intodotnet:release/9.0.2xxfrom
Forgind:at-in-new-install

Conversation

@Forgind
Copy link
Contributor

@Forgind Forgind commented Dec 18, 2024

Progress towards #45422

This adds support for package@version syntax without removing support for package::version syntax. I'll add a follow-up PR in main to add a warning, and then we can remove support for package::version syntax in .NET 11.

string[] splitByColons = installArg.Split(["::"], StringSplitOptions.RemoveEmptyEntries);
string[] splitByAt = installArg.Split('@', StringSplitOptions.RemoveEmptyEntries);
string[] split = splitByColons.Length > splitByAt.Length ? splitByColons :
splitByAt.Length > splitByColons.Length ? splitByAt :
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this monstrosity necessary?

I wanted to avoid breaking changes. If one array is longer, that means it split more, and that means we should use it. If the arrays are the same length but the thing at the first index is shorter in one than the other, that means it parsed out (and dropped) (a) separator character(s), and we should use the shorter one.

We should really change CanInstallRemoteNuGetPackage_LatestVariations when we can finally get rid of support for ::

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are you ever supposed to have more than one instance of either :: or @ in the argument?

It seems like you could check if the string contains ::. If it does, split on that, otherwise try splitting it on @.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm...there could be multiple...which also makes me wonder whether anyone would try dotnet new install package1::version1 package2@version2. The semi-reasonable reason someone might do that is if they have some script that takes optional 'additional' package@version things and runs dotnet new install with some 'base' package::version things.

What would you think of something like:
string[] split = installArgs.Split(["::"], StringSplitOptions.RemoveEntryEntries).Select(arg => arg.Split('@', StringSplitOptions.RemoveEmptyEntries)).Flatten().ToArray();

? That should support both cases.

Copy link
Member

@dsplaisted dsplaisted left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should have tests for this, especially since we want to make sure we're not breaking anything.

Hopefully that's simple, since we just need to test how arguments are parsed.

string[] splitByColons = installArg.Split(["::"], StringSplitOptions.RemoveEmptyEntries);
string[] splitByAt = installArg.Split('@', StringSplitOptions.RemoveEmptyEntries);
string[] split = splitByColons.Length > splitByAt.Length ? splitByColons :
splitByAt.Length > splitByColons.Length ? splitByAt :
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are you ever supposed to have more than one instance of either :: or @ in the argument?

It seems like you could check if the string contains ::. If it does, split on that, otherwise try splitting it on @.

@Forgind Forgind merged commit a84f7d8 into dotnet:release/9.0.2xx Jan 10, 2025
@Forgind Forgind deleted the at-in-new-install branch January 10, 2025 23:21
Forgind added a commit that referenced this pull request Feb 11, 2025
Progress on #45422

Then we can error or remove it in .net 11.

See #45545 for part 1.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Area-dotnet new the item is related to dotnet new command untriaged Request triage from a team member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants