diff --git a/source/dub/internal/vibecompat/core/file.d b/source/dub/internal/vibecompat/core/file.d index 92b79ae..2d8e946 100644 --- a/source/dub/internal/vibecompat/core/file.d +++ b/source/dub/internal/vibecompat/core/file.d @@ -145,8 +145,14 @@ // guess whether 2 files are identical, ignores filename and content private bool sameFile(Path a, Path b) { - static assert(__traits(allMembers, FileInfo)[0] == "name"); - return getFileInfo(a).tupleof[1 .. $] == getFileInfo(b).tupleof[1 .. $]; + version (Posix) { + auto st_a = std.file.DirEntry(a.toNativeString).statBuf; + auto st_b = std.file.DirEntry(b.toNativeString).statBuf; + return st_a == st_b; + } else { + static assert(__traits(allMembers, FileInfo)[0] == "name"); + return getFileInfo(a).tupleof[1 .. $] == getFileInfo(b).tupleof[1 .. $]; + } } /** @@ -157,7 +163,7 @@ if (existsFile(to)) { enforce(overwrite, "Destination file already exists."); if (auto fe = collectException!FileException(removeFile(to))) { - version (Windows) if (sameFile(from, to)) return; + if (sameFile(from, to)) return; throw fe; } }