Skip to content

Commit 61a25c9

Browse files
authored
Fix dotnet new to suggest @ instead of deprecated :: separator in update notifications (#51153)
2 parents 05c1dad + d68695b commit 61a25c9

9 files changed

+41
-35
lines changed

.github/copilot-instructions.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,8 @@ Localization:
3131

3232
Documentation:
3333
- Do not manually edit files under documentation/manpages/sdk as these are generated based on documentation and should not be manually modified.
34+
35+
External Dependencies:
36+
- Changes that require modifications to the dotnet/templating repository (Microsoft.TemplateEngine packages) should be made directly in that repository, not worked around in this repo.
37+
- The dotnet/templating repository owns the TemplateEngine.Edge, TemplateEngine.Abstractions, and related packages.
38+
- If a change requires updates to template engine behavior or formatting (e.g., DisplayName properties), file an issue in dotnet/templating and make the changes there rather than adding workarounds in this SDK repository.

src/Cli/Microsoft.TemplateEngine.Cli/TemplatePackageCoordinator.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -145,15 +145,15 @@ internal void DisplayUpdateCheckResult(CheckUpdateResult versionCheckResult, ICo
145145
{
146146
if (!versionCheckResult.IsLatestVersion)
147147
{
148-
string displayString = $"{versionCheckResult.TemplatePackage?.Identifier}::{versionCheckResult.TemplatePackage?.Version}"; // the package::version currently installed
148+
string displayString = $"{versionCheckResult.TemplatePackage?.Identifier}@{versionCheckResult.TemplatePackage?.Version}"; // the package@version currently installed
149149
Reporter.Output.WriteLine(LocalizableStrings.TemplatePackageCoordinator_Update_Info_UpdateAvailable, displayString);
150150

151151
Reporter.Output.WriteLine(LocalizableStrings.TemplatePackageCoordinator_Update_Info_UpdateSingleCommandHeader);
152152
Reporter.Output.WriteCommand(
153153
Example
154154
.For<NewCommand>(args.ParseResult)
155155
.WithSubcommand<InstallCommand>()
156-
.WithArgument(BaseInstallCommand.NameArgument, $"{versionCheckResult.TemplatePackage?.Identifier}::{versionCheckResult.LatestVersion}"));
156+
.WithArgument(BaseInstallCommand.NameArgument, $"{versionCheckResult.TemplatePackage?.Identifier}@{versionCheckResult.LatestVersion}"));
157157
Reporter.Output.WriteLine();
158158
}
159159
}
@@ -166,7 +166,7 @@ internal void DisplayUpdateCheckResult(CheckUpdateResult versionCheckResult, ICo
166166

167167
internal void DisplayBuiltInPackagesCheckResult(string packageId, string version, string provider, ICommandArgs args)
168168
{
169-
Reporter.Output.WriteLine(LocalizableStrings.TemplatePackageCoordinator_BuiltInCheck_Info_BuiltInPackageAvailable, $"{packageId}::{version}", provider);
169+
Reporter.Output.WriteLine(LocalizableStrings.TemplatePackageCoordinator_BuiltInCheck_Info_BuiltInPackageAvailable, $"{packageId}@{version}", provider);
170170
Reporter.Output.WriteLine(LocalizableStrings.TemplatePackageCoordinator_BuiltInCheck_Info_UninstallPackage);
171171
Reporter.Output.WriteCommand(
172172
Example
@@ -315,7 +315,7 @@ internal async Task<NewCommandStatus> EnterUpdateFlowAsync(UpdateCommandArgs com
315315
Reporter.Output.WriteLine(LocalizableStrings.TemplatePackageCoordinator_Update_Info_PackagesToBeUpdated);
316316
foreach (CheckUpdateResult update in updatesToApply)
317317
{
318-
Reporter.Output.WriteLine($"{update.TemplatePackage!.Identifier}::{update.LatestVersion}".Indent());
318+
Reporter.Output.WriteLine($"{update.TemplatePackage!.Identifier}@{update.LatestVersion}".Indent());
319319
}
320320
Reporter.Output.WriteLine();
321321

@@ -471,7 +471,7 @@ internal async Task<NewCommandStatus> DisplayTemplatePackageMetadata(
471471

472472
Reporter.Output.WriteLine(
473473
LocalizableStrings.Generic_Info_NoMatchingTemplatePackage.Bold().Red(),
474-
$"{packageIdentity}{(string.IsNullOrWhiteSpace(packageVersion) ? string.Empty : $"::{packageVersion}")}");
474+
$"{packageIdentity}{(string.IsNullOrWhiteSpace(packageVersion) ? string.Empty : $"@{packageVersion}")}");
475475

476476
return NewCommandStatus.NotFound;
477477
}
@@ -633,7 +633,7 @@ private async Task<bool> ValidateInstallationRequestsAsync(InstallCommandArgs ar
633633
reporter.WriteLine(LocalizableStrings.TemplatePackageCoordinator_Install_Info_PackageIsAvailable);
634634
foreach (var request in invalidTemplatePackages)
635635
{
636-
reporter.WriteLine($"{request.PackageInfo.Id}::{request.PackageInfo.Version}".Indent());
636+
reporter.WriteLine($"{request.PackageInfo.Id}@{request.PackageInfo.Version}".Indent());
637637
}
638638
reporter.WriteLine();
639639

@@ -844,12 +844,12 @@ private void DisplayUpdateCheckResults(IEnumerable<CheckUpdateResult> versionChe
844844
Example
845845
.For<NewCommand>(args.ParseResult)
846846
.WithSubcommand<InstallCommand>()
847-
.WithArgument(BaseInstallCommand.NameArgument, $"<package>::<version>"));
847+
.WithArgument(BaseInstallCommand.NameArgument, $"<package>@<version>"));
848848
Reporter.Output.WriteCommand(
849849
Example
850850
.For<NewCommand>(args.ParseResult)
851851
.WithSubcommand<InstallCommand>()
852-
.WithArgument(BaseInstallCommand.NameArgument, $"{displayableResults.First().Identifier}::{displayableResults.First().LatestVersion}"));
852+
.WithArgument(BaseInstallCommand.NameArgument, $"{displayableResults.First().Identifier}@{displayableResults.First().LatestVersion}"));
853853
Reporter.Output.WriteLine();
854854
Reporter.Output.WriteLine(LocalizableStrings.TemplatePackageCoordinator_Update_Info_UpdateAllCommandHeader);
855855
Reporter.Output.WriteCommand(

src/Cli/Microsoft.TemplateEngine.Cli/TemplatePackageDisplay.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,15 @@ internal void DisplayUpdateCheckResult(CheckUpdateResult versionCheckResult, ICo
4747
{
4848
if (!versionCheckResult.IsLatestVersion)
4949
{
50-
string displayString = $"{versionCheckResult.TemplatePackage?.Identifier}::{versionCheckResult.TemplatePackage?.Version}"; // the package::version currently installed
50+
string displayString = $"{versionCheckResult.TemplatePackage?.Identifier}@{versionCheckResult.TemplatePackage?.Version}"; // the package@version currently installed
5151
_reporterOutput.WriteLine(LocalizableStrings.TemplatePackageCoordinator_Update_Info_UpdateAvailable, displayString);
5252

5353
_reporterOutput.WriteLine(LocalizableStrings.TemplatePackageCoordinator_Update_Info_UpdateSingleCommandHeader);
5454
_reporterOutput.WriteCommand(
5555
Example
5656
.For<NewCommand>(args.ParseResult)
5757
.WithSubcommand<InstallCommand>()
58-
.WithArgument(BaseInstallCommand.NameArgument, $"{versionCheckResult.TemplatePackage?.Identifier}::{versionCheckResult.LatestVersion}"));
58+
.WithArgument(BaseInstallCommand.NameArgument, $"{versionCheckResult.TemplatePackage?.Identifier}@{versionCheckResult.LatestVersion}"));
5959
_reporterOutput.WriteLine();
6060
}
6161
}
@@ -68,7 +68,7 @@ internal void DisplayUpdateCheckResult(CheckUpdateResult versionCheckResult, ICo
6868

6969
internal void DisplayBuiltInPackagesCheckResult(string packageId, string version, string provider, ICommandArgs args)
7070
{
71-
_reporterOutput.WriteLine(LocalizableStrings.TemplatePackageCoordinator_BuiltInCheck_Info_BuiltInPackageAvailable, $"{packageId}::{version}", provider);
71+
_reporterOutput.WriteLine(LocalizableStrings.TemplatePackageCoordinator_BuiltInCheck_Info_BuiltInPackageAvailable, $"{packageId}@{version}", provider);
7272
_reporterOutput.WriteLine(LocalizableStrings.TemplatePackageCoordinator_BuiltInCheck_Info_UninstallPackage);
7373
_reporterOutput.WriteCommand(
7474
Example
@@ -303,12 +303,12 @@ internal void DisplayUpdateCheckResults(IEngineEnvironmentSettings engineEnviron
303303
Example
304304
.For<NewCommand>(args.ParseResult)
305305
.WithSubcommand<InstallCommand>()
306-
.WithArgument(BaseInstallCommand.NameArgument, $"<package>::<version>"));
306+
.WithArgument(BaseInstallCommand.NameArgument, $"<package>@<version>"));
307307
Reporter.Output.WriteCommand(
308308
Example
309309
.For<NewCommand>(args.ParseResult)
310310
.WithSubcommand<InstallCommand>()
311-
.WithArgument(BaseInstallCommand.NameArgument, $"{displayableResults.First().Identifier}::{displayableResults.First().LatestVersion}"));
311+
.WithArgument(BaseInstallCommand.NameArgument, $"{displayableResults.First().Identifier}@{displayableResults.First().LatestVersion}"));
312312
Reporter.Output.WriteLine();
313313
Reporter.Output.WriteLine(LocalizableStrings.TemplatePackageCoordinator_Update_Info_UpdateAllCommandHeader);
314314
Reporter.Output.WriteCommand(

test/dotnet-new.IntegrationTests/Approvals/DotnetNewInstallTests.CanInstallPackageAvailableFromBuiltInsWithForce.verified.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
Installing the template package(s) will override the available template package(s).
55
The following template package(s) are already available:
6-
Microsoft.DotNet.Common.ItemTemplates::%VERSION%
6+
Microsoft.DotNet.Common.ItemTemplates@%VERSION%
77

88
Success: Microsoft.DotNet.Common.ItemTemplates::6.0.100 installed the following templates:
99
Template Name Short Name Language Tags

test/dotnet-new.IntegrationTests/Approvals/DotnetNewInstallTests.CannotInstallPackageAvailableFromBuiltIns.verified.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Installing the template package(s) will override the available template package(s).
22
The following template package(s) are already available:
3-
Microsoft.DotNet.Common.ItemTemplates::%VERSION%
3+
Microsoft.DotNet.Common.ItemTemplates@%VERSION%
44

55
To install the template package(s) anyway, apply '--force' option:
66
dotnet new install Microsoft.DotNet.Common.ItemTemplates::6.0.100 --force
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
The template "dotnet gitignore file" was created successfully.
22

3-
An update for template package 'Microsoft.DotNet.Common.ItemTemplates::6.0.100' is available.
3+
An update for template package 'Microsoft.DotNet.Common.ItemTemplates@6.0.100' is available.
44
To update the package use:
5-
dotnet new install Microsoft.DotNet.Common.ItemTemplates::%VERSION%
5+
dotnet new install Microsoft.DotNet.Common.ItemTemplates@%VERSION%
66

7-
An update for template package 'Microsoft.DotNet.Common.ItemTemplates::%VERSION%' is available in the '.NET SDK' provider.
7+
An update for template package 'Microsoft.DotNet.Common.ItemTemplates@%VERSION%' is available in the '.NET SDK' provider.
88
To use built-in template package, uninstall manually installed template package using:
99
dotnet new uninstall Microsoft.DotNet.Common.ItemTemplates

test/dotnet-new.IntegrationTests/DotnetNewInstallTests.Approval.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public Task CannotInstallPackageAvailableFromBuiltIns()
2222
return Verify(commandResult.StdErr)
2323
.AddScrubber(output =>
2424
{
25-
output.ScrubByRegex(" Microsoft\\.DotNet\\.Common\\.ItemTemplates::[A-Za-z0-9.-]+", " Microsoft.DotNet.Common.ItemTemplates::%VERSION%");
25+
output.ScrubByRegex(" Microsoft\\.DotNet\\.Common\\.ItemTemplates@[A-Za-z0-9.-]+", " Microsoft.DotNet.Common.ItemTemplates@%VERSION%");
2626
});
2727
}
2828

@@ -41,7 +41,8 @@ public Task CanInstallPackageAvailableFromBuiltInsWithForce()
4141
return Verify(commandResult.StdOut)
4242
.AddScrubber(output =>
4343
{
44-
output.ScrubByRegex(" Microsoft.DotNet.Common.ItemTemplates::[A-Za-z0-9.-]+", " Microsoft.DotNet.Common.ItemTemplates::%VERSION%");
44+
output.ScrubByRegex(" Microsoft\\.DotNet\\.Common\\.ItemTemplates::[A-Za-z0-9.-]+", " Microsoft.DotNet.Common.ItemTemplates::%VERSION%");
45+
output.ScrubByRegex(" Microsoft\\.DotNet\\.Common\\.ItemTemplates@[A-Za-z0-9.-]+", " Microsoft.DotNet.Common.ItemTemplates@%VERSION%");
4546
});
4647
}
4748

@@ -60,7 +61,7 @@ public Task CannotInstallMultiplePackageAvailableFromBuiltIns()
6061
return Verify(commandResult.StdErr)
6162
.AddScrubber(output =>
6263
{
63-
output.ScrubByRegex(" Microsoft\\.DotNet\\.Common\\.ItemTemplates::[A-Za-z0-9.-]+", " Microsoft.DotNet.Common.ItemTemplates@%VERSION%");
64+
output.ScrubByRegex(" Microsoft\\.DotNet\\.Common\\.ItemTemplates@[A-Za-z0-9.-]+", " Microsoft.DotNet.Common.ItemTemplates@%VERSION%");
6465
});
6566
}
6667

test/dotnet-new.IntegrationTests/DotnetNewInstantiateTests.Approval.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -512,8 +512,8 @@ public Task CanShowWarningIfPackageIsAvailableFromBuiltInSources()
512512
return Verify(commandResult.StdOut)
513513
.AddScrubber(output =>
514514
{
515-
output.ScrubByRegex("'Microsoft\\.DotNet\\.Common\\.ItemTemplates::[A-Za-z0-9.-]+' is available in", "'Microsoft.DotNet.Common.ItemTemplates::%VERSION%' is available in");
516-
output.ScrubByRegex("install Microsoft\\.DotNet\\.Common\\.ItemTemplates::[A-Za-z0-9.-]+", "install Microsoft.DotNet.Common.ItemTemplates::%VERSION%");
515+
output.ScrubByRegex("'Microsoft\\.DotNet\\.Common\\.ItemTemplates@[A-Za-z0-9.-]+' is available in", "'Microsoft.DotNet.Common.ItemTemplates@%VERSION%' is available in");
516+
output.ScrubByRegex("install Microsoft\\.DotNet\\.Common\\.ItemTemplates@[A-Za-z0-9.-]+", "install Microsoft.DotNet.Common.ItemTemplates@%VERSION%");
517517
});
518518
}
519519

test/dotnet-new.IntegrationTests/DotnetNewUpdateTests.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ public void CanCheckForUpdate(string testCase)
4343
.And.HaveStdOutMatching("Package\\s+Current\\s+Latest")
4444
.And.HaveStdOutMatching("Microsoft.DotNet.Common.ProjectTemplates.5.0\\s+5.0.0\\s+([\\d\\.a-z-])+")
4545
.And.HaveStdOutContaining("To update the package use:")
46-
.And.HaveStdOutContaining(" dotnet new install <package>::<version>")
47-
.And.HaveStdOutMatching(" dotnet new install Microsoft\\.DotNet\\.Common\\.ProjectTemplates\\.5\\.0::([\\d\\.a-z-])+");
46+
.And.HaveStdOutContaining(" dotnet new install <package>@<version>")
47+
.And.HaveStdOutMatching(" dotnet new install Microsoft\\.DotNet\\.Common\\.ProjectTemplates\\.5\\.0@([\\d\\.a-z-])+");
4848
}
4949

5050
[Fact]
@@ -132,9 +132,9 @@ public void PrintInfoOnUpdateOnCreation()
132132
.And
133133
.NotHaveStdErr()
134134
.And.HaveStdOutContaining("The template \"Console Application\" was created successfully.")
135-
.And.HaveStdOutContaining("An update for template package 'Microsoft.DotNet.Common.ProjectTemplates.5.0::5.0.0' is available")
135+
.And.HaveStdOutContaining("An update for template package 'Microsoft.DotNet.Common.ProjectTemplates.5.0@5.0.0' is available")
136136
.And.HaveStdOutContaining("To update the package use:")
137-
.And.HaveStdOutMatching(" dotnet new install Microsoft.DotNet.Common.ProjectTemplates.5.0::([\\d\\.a-z-])+");
137+
.And.HaveStdOutMatching(" dotnet new install Microsoft.DotNet.Common.ProjectTemplates.5.0@([\\d\\.a-z-])+");
138138
}
139139

140140
[Fact]
@@ -162,9 +162,9 @@ public void DoesNotPrintUpdateInfoOnCreation_WhenNoUpdateCheckOption()
162162
.And
163163
.NotHaveStdErr()
164164
.And.HaveStdOutContaining("The template \"Console Application\" was created successfully.")
165-
.And.NotHaveStdOutContaining("An update for template package 'Microsoft.DotNet.Common.ProjectTemplates.5.0::5.0.0' is available")
165+
.And.NotHaveStdOutContaining("An update for template package 'Microsoft.DotNet.Common.ProjectTemplates.5.0@5.0.0' is available")
166166
.And.NotHaveStdOutContaining("To update the package use:")
167-
.And.NotHaveStdOutContaining(" dotnet new --install Microsoft.DotNet.Common.ProjectTemplates.5.0::([\\d\\.a-z-])+");
167+
.And.NotHaveStdOutContaining(" dotnet new --install Microsoft.DotNet.Common.ProjectTemplates.5.0@([\\d\\.a-z-])+");
168168

169169
new DotnetNewCommand(_log, "console", "-o", "update-check")
170170
.WithCustomHive(home).WithoutBuiltInTemplates()
@@ -175,9 +175,9 @@ public void DoesNotPrintUpdateInfoOnCreation_WhenNoUpdateCheckOption()
175175
.And
176176
.NotHaveStdErr()
177177
.And.HaveStdOutContaining("The template \"Console Application\" was created successfully.")
178-
.And.HaveStdOutContaining("An update for template package 'Microsoft.DotNet.Common.ProjectTemplates.5.0::5.0.0' is available")
178+
.And.HaveStdOutContaining("An update for template package 'Microsoft.DotNet.Common.ProjectTemplates.5.0@5.0.0' is available")
179179
.And.HaveStdOutContaining("To update the package use:")
180-
.And.HaveStdOutMatching(" dotnet new install Microsoft.DotNet.Common.ProjectTemplates.5.0::([\\d\\.a-z-])+");
180+
.And.HaveStdOutMatching(" dotnet new install Microsoft.DotNet.Common.ProjectTemplates.5.0@([\\d\\.a-z-])+");
181181
}
182182

183183
[Fact]
@@ -205,9 +205,9 @@ public void DoesNotPrintUpdateInfoOnCreation_WhenLatestVersionIsInstalled()
205205
.And
206206
.NotHaveStdErr()
207207
.And.HaveStdOutContaining("The template \"Console App\" was created successfully.")
208-
.And.NotHaveStdOutMatching("An update for template package 'Microsoft.DotNet.Common.ProjectTemplates.5.0::([\\d\\.a-z-])+' is available")
208+
.And.NotHaveStdOutMatching("An update for template package 'Microsoft.DotNet.Common.ProjectTemplates.5.0@([\\d\\.a-z-])+' is available")
209209
.And.NotHaveStdOutContaining("To update the package use:")
210-
.And.NotHaveStdOutMatching(" dotnet new install Microsoft.DotNet.Common.ProjectTemplates.5.0::([\\d\\.a-z-])+");
210+
.And.NotHaveStdOutMatching(" dotnet new install Microsoft.DotNet.Common.ProjectTemplates.5.0@([\\d\\.a-z-])+");
211211
}
212212

213213
[Fact]
@@ -275,8 +275,8 @@ public void CanApplyUpdates(string testCase)
275275
.And.HaveStdOutMatching("Package\\s+Current\\s+Latest")
276276
.And.HaveStdOutMatching("Microsoft.DotNet.Common.ProjectTemplates.5.0\\s+5.0.0\\s+([\\d\\.a-z-])+")
277277
.And.HaveStdOutContaining("To update the package use:")
278-
.And.HaveStdOutContaining(" dotnet new install <package>::<version>")
279-
.And.HaveStdOutMatching(" dotnet new install Microsoft\\.DotNet\\.Common\\.ProjectTemplates\\.5\\.0::([\\d\\.a-z-])+");
278+
.And.HaveStdOutContaining(" dotnet new install <package>@<version>")
279+
.And.HaveStdOutMatching(" dotnet new install Microsoft\\.DotNet\\.Common\\.ProjectTemplates\\.5\\.0@([\\d\\.a-z-])+");
280280

281281
new DotnetNewCommand(_log, testCase)
282282
.WithCustomHive(home).WithoutBuiltInTemplates()

0 commit comments

Comments
 (0)