[PyCharm] PY-65177 added test for retaining unmatched files + bugfixes in WslSync

GitOrigin-RevId: 57acc5e13df372f4501ba989046f915883953d83
This commit is contained in:
bogdan.kirilenko
2024-09-11 16:36:16 +02:00
committed by intellij-monorepo-bot
parent 0aacc9080d
commit af1dd46ed5
2 changed files with 40 additions and 10 deletions

View File

@@ -302,6 +302,36 @@ class WslSyncTest(private val linToWin: Boolean) {
) )
} }
@Test
fun testRetainUnmatchedFiles() = runWithJob {
val windowsDir = winDirRule.newDirectoryPath()
val srcDir = if (linToWin) linuxDirAsPath else windowsDir
val dstDir = if (linToWin) windowsDir else linuxDirAsPath
val sourceFiles = listOf("file1.txt", "file2.txt", "file3.txt")
for (fileName in sourceFiles) {
srcDir.resolve(fileName).writeText("Content of $fileName")
}
val extraFile = "extra_file.txt"
dstDir.resolve(extraFile).writeText("Content of $extraFile")
WslSync.syncWslFolders(linuxDirRule.dir, windowsDir, wslRule.wsl, linToWin, retainUnmatchedFiles = false)
Assert.assertFalse("Extra file should be deleted", dstDir.resolve(extraFile).exists())
dstDir.resolve(extraFile).writeText("Content of $extraFile")
WslSync.syncWslFolders(linuxDirRule.dir, windowsDir, wslRule.wsl, linToWin, retainUnmatchedFiles = true)
for (fileName in sourceFiles) {
Assert.assertTrue("Source file $fileName should be present", dstDir.resolve(fileName).exists())
}
Assert.assertTrue("Extra file should be retained", dstDir.resolve(extraFile).exists())
Assert.assertEquals("Content of extra file should be unchanged",
"Content of $extraFile",
dstDir.resolve(extraFile).readText())
}
@Test @Test
fun syncWithIncludesAndStubs() = runWithJob { fun syncWithIncludesAndStubs() = runWithJob {
doSyncAndAssertFilePresence( doSyncAndAssertFilePresence(

View File

@@ -129,22 +129,22 @@ class WslSync<SourceFile, DestFile> private constructor(private val source: File
val sourceHashAndName = sourceHashes[destRecord.fileLowerCase] val sourceHashAndName = sourceHashes[destRecord.fileLowerCase]
if (sourceHashAndName != null) { if (sourceHashAndName != null) {
if (sourceHashAndName.hash == destRecord.hash) { if (sourceHashAndName.hash != destRecord.hash) {
sourceHashes.remove(destRecord.fileLowerCase) filesToCopy.add(sourceHashAndName.file)
} else {
destFilesToRemove.add(destRecord.file)
}
} else {
if (!retainUnmatchedFiles) {
destFilesToRemove.add(destRecord.file)
} }
sourceHashes.remove(destRecord.fileLowerCase)
} else if (!retainUnmatchedFiles) {
destFilesToRemove.add(destRecord.file)
} }
} }
// Add remaining files from source that don't exist in dest
filesToCopy.addAll(sourceHashes.values.map { it.file }) filesToCopy.addAll(sourceHashes.values.map { it.file })
copyFilesInParallel(filesToCopy)
if (!retainUnmatchedFiles) { dest.removeFiles(destFilesToRemove) } copyFilesInParallel(filesToCopy)
if (!retainUnmatchedFiles) {
dest.removeFiles(destFilesToRemove)
}
syncLinks(sourceSyncData.links, destSyncData.links) syncLinks(sourceSyncData.links, destSyncData.links)
syncStubs(sourceSyncData.stubs, destSyncData.stubs) syncStubs(sourceSyncData.stubs, destSyncData.stubs)