Skip to content

Commit 39750ca

Browse files
committed
Fixes
1 parent 79b26f4 commit 39750ca

File tree

4 files changed

+48
-29
lines changed

4 files changed

+48
-29
lines changed

src/BuiltInTools/dotnet-watch/HotReloadDotNetWatcher.cs

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -611,8 +611,7 @@ private bool AcceptChange(ChangedPath change)
611611
return false;
612612
}
613613

614-
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) &&
615-
PathUtilities.GetContainingDirectories(path).FirstOrDefault(IsHiddenWindowsPath) is { } containingHiddenDir)
614+
if (PathUtilities.GetContainingDirectories(path).FirstOrDefault(IsHiddenDirectory) is { } containingHiddenDir)
616615
{
617616
Context.Reporter.Report(MessageDescriptor.IgnoringChangeInHiddenDirectory, containingHiddenDir, kind, path);
618617
return false;
@@ -621,17 +620,30 @@ private bool AcceptChange(ChangedPath change)
621620
return true;
622621
}
623622

624-
private static bool IsHiddenWindowsPath(string path)
623+
private static bool IsHiddenDirectory(string dir)
625624
{
626-
// Note: the device root directory on Windows has hidden attribute:
627-
if (Path.GetDirectoryName(path) == null)
625+
// Directory name starts with '.' on Unix is considered hidden.
626+
// Apply the same convention on Windows as well.
627+
if (Path.GetFileName(dir).StartsWith('.'))
628+
{
629+
return true;
630+
}
631+
632+
// The following checks hidden attribute on Windows.
633+
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
634+
{
635+
return false;
636+
}
637+
638+
// The device root directory on Windows has hidden attribute but is not actually hidden.
639+
if (Path.GetDirectoryName(dir) == null)
628640
{
629641
return false;
630642
}
631643

632644
try
633645
{
634-
return File.GetAttributes(path).HasFlag(FileAttributes.Hidden);
646+
return File.GetAttributes(dir).HasFlag(FileAttributes.Hidden);
635647
}
636648
catch
637649
{
@@ -640,9 +652,6 @@ private static bool IsHiddenWindowsPath(string path)
640652
}
641653
}
642654

643-
internal static string FormatTimestamp(DateTime time)
644-
=> time.ToString("HH:mm:ss.fffffff");
645-
646655
private static IReadOnlySet<string> GetProjectOutputDirectories(ProjectGraph projectGraph)
647656
{
648657
var projectOutputDirectories = new HashSet<string>(PathUtilities.OSSpecificPathComparer);

src/BuiltInTools/dotnet-watch/Properties/launchSettings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"dotnet-watch": {
44
"commandName": "Project",
55
"commandLineArgs": "--verbose /bl:DotnetRun.binlog",
6-
"workingDirectory": "C:\\sdk1\\artifacts\\tmp\\Debug\\RenameDirecto---333D0BB9\\AppWithDeps",
6+
"workingDirectory": "$(RepoRoot)src\\Assets\\TestProjects\\BlazorWasmWithLibrary\\blazorwasm",
77
"environmentVariables": {
88
"DOTNET_WATCH_DEBUG_SDK_DIRECTORY": "$(RepoRoot)artifacts\\bin\\redist\\$(Configuration)\\dotnet\\sdk\\$(Version)",
99
"DCP_IDE_REQUEST_TIMEOUT_SECONDS": "100000",

test/dotnet-watch.Tests/HotReload/RuntimeProcessLauncherTests.cs

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,7 @@ public enum DirectoryKind
529529
{
530530
Ordinary,
531531
Hidden,
532+
Dot,
532533
Bin,
533534
Obj,
534535
}
@@ -543,30 +544,42 @@ public Task IgnoredChange_Windows(bool isExisting, bool isIncluded, DirectoryKin
543544
public Task IgnoredChange_Unix(
544545
bool isExisting,
545546
bool isIncluded,
546-
[CombinatorialValues(DirectoryKind.Obj, DirectoryKind.Bin, DirectoryKind.Ordinary)] DirectoryKind directoryKind)
547+
[CombinatorialValues(DirectoryKind.Obj, DirectoryKind.Bin, DirectoryKind.Ordinary, DirectoryKind.Dot)] DirectoryKind directoryKind)
547548
=> IgnoredChange(isExisting, isIncluded, directoryKind);
548549

549550
private async Task IgnoredChange(bool isExisting, bool isIncluded, DirectoryKind directoryKind)
550551
{
551552
var testAsset = CopyTestAsset("WatchNoDepsApp", [isExisting, isIncluded, directoryKind]);
552553

553554
var workingDirectory = testAsset.Path;
555+
string dir;
554556

555-
var objDir = Path.Combine(workingDirectory, "obj", "Debug", ToolsetInfo.CurrentTargetFramework);
556-
var binDir = Path.Combine(workingDirectory, "bin", "Debug", ToolsetInfo.CurrentTargetFramework);
557+
switch (directoryKind)
558+
{
559+
case DirectoryKind.Bin:
560+
dir = Path.Combine(workingDirectory, "bin", "Debug", ToolsetInfo.CurrentTargetFramework);
561+
break;
562+
563+
case DirectoryKind.Obj:
564+
dir = Path.Combine(workingDirectory, "obj", "Debug", ToolsetInfo.CurrentTargetFramework);
565+
break;
557566

558-
var hiddenDir = Path.Combine(workingDirectory, "hidden");
559-
Directory.CreateDirectory(hiddenDir);
560-
File.SetAttributes(hiddenDir, FileAttributes.Hidden | FileAttributes.Directory);
567+
case DirectoryKind.Hidden:
568+
dir = Path.Combine(workingDirectory, "hidden");
569+
Directory.CreateDirectory(dir);
570+
File.SetAttributes(dir, FileAttributes.Hidden | FileAttributes.Directory);
571+
break;
572+
573+
case DirectoryKind.Dot:
574+
dir = Path.Combine(workingDirectory, ".dir");
575+
break;
576+
577+
default:
578+
dir = workingDirectory;
579+
break;
580+
}
561581

562582
var extension = isIncluded ? ".cs" : ".txt";
563-
var dir = directoryKind switch
564-
{
565-
DirectoryKind.Bin => binDir,
566-
DirectoryKind.Obj => objDir,
567-
DirectoryKind.Hidden => hiddenDir,
568-
_ => workingDirectory,
569-
};
570583

571584
Directory.CreateDirectory(dir);
572585

@@ -618,7 +631,7 @@ private async Task IgnoredChange(bool isExisting, bool isIncluded, DirectoryKind
618631
await fileAdditionTriggeredReEvaluation.WaitAsync(w.ShutdownSource.Token);
619632
break;
620633

621-
case (isExisting: _, isIncluded: _, directoryKind: DirectoryKind.Hidden):
634+
case (isExisting: _, isIncluded: _, directoryKind: DirectoryKind.Hidden or DirectoryKind.Dot):
622635
Log("Waiting for ignored change in hidden dir ...");
623636
await ignoringChangeInHiddenDirectory.WaitAsync(w.ShutdownSource.Token);
624637
break;

test/dotnet-watch.Tests/Watch/Utilities/DotNetWatchTestBase.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,11 @@ public void Log(string message)
2929
public void UpdateSourceFile(string path, string text)
3030
{
3131
WriteAllText(path, text);
32-
Log($"File '{path}' updated ({HotReloadDotNetWatcher.FormatTimestamp(File.GetLastWriteTimeUtc(path))}).");
32+
Log($"File '{path}' updated.");
3333
}
3434

3535
public void UpdateSourceFile(string path, Func<string, string> contentTransform)
36-
{
37-
WriteAllText(path, contentTransform(File.ReadAllText(path, Encoding.UTF8)));
38-
Log($"File '{path}' updated.");
39-
}
36+
=> UpdateSourceFile(path, contentTransform(File.ReadAllText(path, Encoding.UTF8)));
4037

4138
/// <summary>
4239
/// Replacement for <see cref="File.WriteAllText"/>, which fails to write to hidden file

0 commit comments

Comments
 (0)