Skip to content

Commit b2fc6a0

Browse files
committed
Clean also build markers
1 parent be05dc8 commit b2fc6a0

File tree

3 files changed

+46
-2
lines changed

3 files changed

+46
-2
lines changed

src/Cli/dotnet/Commands/Clean/CleanCommand.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ public static CommandBase FromParseResult(ParseResult result, string? msbuildPat
4545
NoRestore = true,
4646
NoCache = true,
4747
BuildTarget = "Clean",
48+
NoBuildMarkers = true,
4849
};
4950
}
5051

src/Cli/dotnet/Commands/Run/VirtualProjectBuildingCommand.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,12 @@ public VirtualProjectBuildingCommand(
131131
public bool NoBuild { get; init; }
132132
public string BuildTarget { get; init; } = "Build";
133133

134+
/// <summary>
135+
/// If <see langword="true"/>, no build markers are written
136+
/// (like <see cref="BuildStartCacheFileName"/> and <see cref="BuildSuccessCacheFileName"/>).
137+
/// </summary>
138+
public bool NoBuildMarkers { get; init; }
139+
134140
public override int Execute()
135141
{
136142
Debug.Assert(!(NoRestore && NoBuild));
@@ -402,6 +408,11 @@ Building because previous global properties count ({previousCacheEntry.GlobalPro
402408

403409
private void MarkBuildStart()
404410
{
411+
if (NoBuildMarkers)
412+
{
413+
return;
414+
}
415+
405416
string directory = GetArtifactsPath();
406417

407418
if (OperatingSystem.IsWindows())
@@ -421,6 +432,11 @@ private void MarkBuildStart()
421432

422433
private void MarkBuildSuccess(RunFileBuildCacheEntry cacheEntry)
423434
{
435+
if (NoBuildMarkers)
436+
{
437+
return;
438+
}
439+
424440
string successCacheFile = Path.Join(GetArtifactsPath(), BuildSuccessCacheFileName);
425441
using var stream = File.Open(successCacheFile, FileMode.Create, FileAccess.Write, FileShare.None);
426442
JsonSerializer.Serialize(stream, cacheEntry, RunFileJsonSerializerContext.Default.RunFileBuildCacheEntry);
@@ -530,6 +546,9 @@ public static void WriteProjectFile(
530546
{
531547
Debug.Assert(!string.IsNullOrWhiteSpace(artifactsPath));
532548

549+
// Note that ArtifactsPath needs to be specified before Sdk.props
550+
// (usually it's recommended to specify it in Directory.Build.props
551+
// but importing Sdk.props manually afterwards also works).
533552
writer.WriteLine($"""
534553
<Project>
535554
@@ -538,6 +557,11 @@ public static void WriteProjectFile(
538557
<ArtifactsPath>{EscapeValue(artifactsPath)}</ArtifactsPath>
539558
</PropertyGroup>
540559
560+
<ItemGroup>
561+
<Clean Include="{EscapeValue(Path.Join(artifactsPath, BuildStartCacheFileName))}" />
562+
<Clean Include="{EscapeValue(Path.Join(artifactsPath, BuildSuccessCacheFileName))}" />
563+
</ItemGroup>
564+
541565
<!-- We need to explicitly import Sdk props/targets so we can override the targets below. -->
542566
<Import Project="Sdk.props" Sdk="{EscapeValue(sdkValue)}" />
543567
""");

test/dotnet.Tests/CommandTests/Run/RunFileTests.cs

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1030,15 +1030,19 @@ public void Clean()
10301030
.Should().Pass()
10311031
.And.HaveStdOut("Hello from Program");
10321032

1033-
var artifactsDir = VirtualProjectBuildingCommand.GetArtifactsPath(programFile);
1034-
var dllFile = new FileInfo(Path.Join(artifactsDir, "bin", "debug", "Program.dll"));
1033+
var artifactsDir = new DirectoryInfo(VirtualProjectBuildingCommand.GetArtifactsPath(programFile));
1034+
artifactsDir.Should().HaveFiles(["build-start.cache", "build-success.cache"]);
1035+
1036+
var dllFile = artifactsDir.File("bin/debug/Program.dll");
10351037
dllFile.Should().Exist();
10361038

10371039
new DotnetCommand(Log, "clean", "Program.cs")
10381040
.WithWorkingDirectory(testInstance.Path)
10391041
.Execute()
10401042
.Should().Pass();
10411043

1044+
artifactsDir.EnumerateFiles().Should().BeEmpty();
1045+
10421046
dllFile.Refresh();
10431047
dllFile.Should().NotExist();
10441048
}
@@ -1517,6 +1521,11 @@ public void Api()
15171521
<ArtifactsPath>/artifacts</ArtifactsPath>
15181522
</PropertyGroup>
15191523
1524+
<ItemGroup>
1525+
<Clean Include="/artifacts{Path.DirectorySeparatorChar}build-start.cache" />
1526+
<Clean Include="/artifacts{Path.DirectorySeparatorChar}build-success.cache" />
1527+
</ItemGroup>
1528+
15201529
<!-- We need to explicitly import Sdk props/targets so we can override the targets below. -->
15211530
<Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
15221531
<Import Project="Sdk.props" Sdk="Aspire.Hosting.Sdk" Version="9.1.0" />
@@ -1591,6 +1600,11 @@ public void Api_Diagnostic_01()
15911600
<ArtifactsPath>/artifacts</ArtifactsPath>
15921601
</PropertyGroup>
15931602
1603+
<ItemGroup>
1604+
<Clean Include="/artifacts{Path.DirectorySeparatorChar}build-start.cache" />
1605+
<Clean Include="/artifacts{Path.DirectorySeparatorChar}build-success.cache" />
1606+
</ItemGroup>
1607+
15941608
<!-- We need to explicitly import Sdk props/targets so we can override the targets below. -->
15951609
<Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
15961610
@@ -1658,6 +1672,11 @@ public void Api_Diagnostic_02()
16581672
<ArtifactsPath>/artifacts</ArtifactsPath>
16591673
</PropertyGroup>
16601674
1675+
<ItemGroup>
1676+
<Clean Include="/artifacts{Path.DirectorySeparatorChar}build-start.cache" />
1677+
<Clean Include="/artifacts{Path.DirectorySeparatorChar}build-success.cache" />
1678+
</ItemGroup>
1679+
16611680
<!-- We need to explicitly import Sdk props/targets so we can override the targets below. -->
16621681
<Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
16631682

0 commit comments

Comments
 (0)