Fixed tree view on windows

Fixes #235
This commit is contained in:
Abdelilah El Aissaoui 2024-09-06 13:32:39 +02:00
parent c6c3c0451a
commit 422b431fdf
3 changed files with 21 additions and 24 deletions

View File

@ -1,6 +1,5 @@
package com.jetpackduba.gitnuro.git.workspace package com.jetpackduba.gitnuro.git.workspace
import com.jetpackduba.gitnuro.system.systemSeparator
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.eclipse.jgit.api.Git import org.eclipse.jgit.api.Git

View File

@ -1,6 +1,5 @@
package com.jetpackduba.gitnuro.ui.tree_files package com.jetpackduba.gitnuro.ui.tree_files
import com.jetpackduba.gitnuro.system.systemSeparator
import kotlin.math.max import kotlin.math.max
fun <T> entriesToTreeEntry( fun <T> entriesToTreeEntry(
@ -18,12 +17,12 @@ fun <T> entriesToTreeEntry(
} }
.map { entry -> .map { entry ->
val filePath = onGetEntryPath(entry) val filePath = onGetEntryPath(entry)
val parts = filePath.split(systemSeparator) val parts = filePath.split("/")
parts.mapIndexed { index, partName -> parts.mapIndexed { index, partName ->
if (index == parts.lastIndex) { if (index == parts.lastIndex) {
val isParentDirectoryContracted = treeContractedDirs.any { contractedDir -> val isParentDirectoryContracted = treeContractedDirs.any { contractedDir ->
filePath.startsWith(contractedDir + systemSeparator) filePath.startsWith(contractedDir + "/")
} }
if (isParentDirectoryContracted) { if (isParentDirectoryContracted) {
@ -32,9 +31,9 @@ fun <T> entriesToTreeEntry(
TreeItem.File(entry, partName, filePath, index) TreeItem.File(entry, partName, filePath, index)
} }
} else { } else {
val dirPath = parts.slice(0..index).joinToString(systemSeparator) val dirPath = parts.slice(0..index).joinToString("/")
val isParentDirectoryContracted = treeContractedDirs.any { contractedDir -> val isParentDirectoryContracted = treeContractedDirs.any { contractedDir ->
dirPath.startsWith(contractedDir + systemSeparator) && dirPath.startsWith(contractedDir + "/") &&
dirPath != contractedDir dirPath != contractedDir
} }
val isExactDirectoryContracted = treeContractedDirs.any { contractedDir -> val isExactDirectoryContracted = treeContractedDirs.any { contractedDir ->
@ -57,8 +56,8 @@ fun <T> entriesToTreeEntry(
private class PathsComparator : Comparator<String> { private class PathsComparator : Comparator<String> {
override fun compare(path1: String, path2: String): Int { override fun compare(path1: String, path2: String): Int {
val path1Parts = path1.split(systemSeparator) val path1Parts = path1.split("/")
val path2Parts = path2.split(systemSeparator) val path2Parts = path2.split("/")
val maxIndex = max(path1Parts.count(), path2Parts.count()) val maxIndex = max(path1Parts.count(), path2Parts.count())

View File

@ -1,6 +1,5 @@
package com.jetpackduba.gitnuro.ui.tree_files package com.jetpackduba.gitnuro.ui.tree_files
import com.jetpackduba.gitnuro.system.systemSeparator
import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
@ -27,19 +26,19 @@ class TreeTest {
@Test @Test
fun `test entriesToTreeEntry with multiple file entries`() { fun `test entriesToTreeEntry with multiple file entries`() {
val entries = listOf( val entries = listOf(
"dir1${systemSeparator}file1.txt", "dir1/file1.txt",
"dir2${systemSeparator}file2.txt", "dir2/file2.txt",
"dir3${systemSeparator}file3.txt", "dir3/file3.txt",
) )
val treeContractedDirs = emptyList<String>() val treeContractedDirs = emptyList<String>()
val result = entriesToTreeEntry(entries, treeContractedDirs) { it } val result = entriesToTreeEntry(entries, treeContractedDirs) { it }
val expected = listOf( val expected = listOf(
TreeItem.Dir(true, "dir1", "dir1", 0), TreeItem.Dir(true, "dir1", "dir1", 0),
TreeItem.File("dir1${systemSeparator}file1.txt", "file1.txt", "dir1${systemSeparator}file1.txt", 1), TreeItem.File("dir1/file1.txt", "file1.txt", "dir1/file1.txt", 1),
TreeItem.Dir(true, "dir2", "dir2", 0), TreeItem.Dir(true, "dir2", "dir2", 0),
TreeItem.File("dir2${systemSeparator}file2.txt", "file2.txt", "dir2${systemSeparator}file2.txt", 1), TreeItem.File("dir2/file2.txt", "file2.txt", "dir2/file2.txt", 1),
TreeItem.Dir(true, "dir3", "dir3", 0), TreeItem.Dir(true, "dir3", "dir3", 0),
TreeItem.File("dir3${systemSeparator}file3.txt", "file3.txt", "dir3${systemSeparator}file3.txt", 1) TreeItem.File("dir3/file3.txt", "file3.txt", "dir3/file3.txt", 1)
) )
assertEquals(expected, result) assertEquals(expected, result)
} }
@ -47,19 +46,19 @@ class TreeTest {
@Test @Test
fun `test entriesToTreeEntry with similar names`() { fun `test entriesToTreeEntry with similar names`() {
val entries = listOf( val entries = listOf(
"webpack${systemSeparator}webpack.config2.ts", "webpack/webpack.config2.ts",
"webpack${systemSeparator}webpack.config.ts", "webpack/webpack.config.ts",
"webpack-plugin.ts", "webpack-plugin.ts",
"dir1${systemSeparator}file3.txt" "dir1/file3.txt"
) )
val treeContractedDirs = emptyList<String>() val treeContractedDirs = emptyList<String>()
val result = entriesToTreeEntry(entries, treeContractedDirs) { it } val result = entriesToTreeEntry(entries, treeContractedDirs) { it }
val expected = listOf( val expected = listOf(
TreeItem.Dir(true, "dir1", "dir1", 0), TreeItem.Dir(true, "dir1", "dir1", 0),
TreeItem.File("dir1${systemSeparator}file3.txt", "file3.txt", "dir1${systemSeparator}file3.txt", 1), TreeItem.File("dir1/file3.txt", "file3.txt", "dir1/file3.txt", 1),
TreeItem.Dir(true, "webpack", "webpack", 0), TreeItem.Dir(true, "webpack", "webpack", 0),
TreeItem.File("webpack${systemSeparator}webpack.config.ts", "webpack.config.ts", "webpack${systemSeparator}webpack.config.ts", 1), TreeItem.File("webpack/webpack.config.ts", "webpack.config.ts", "webpack/webpack.config.ts", 1),
TreeItem.File("webpack${systemSeparator}webpack.config2.ts", "webpack.config2.ts", "webpack${systemSeparator}webpack.config2.ts", 1), TreeItem.File("webpack/webpack.config2.ts", "webpack.config2.ts", "webpack/webpack.config2.ts", 1),
TreeItem.File("webpack-plugin.ts", "webpack-plugin.ts", "webpack-plugin.ts", 0) TreeItem.File("webpack-plugin.ts", "webpack-plugin.ts", "webpack-plugin.ts", 0)
) )
assertEquals(expected, result) assertEquals(expected, result)
@ -68,10 +67,10 @@ class TreeTest {
@Test @Test
fun `test test entriesToTreeEntry with similar names with contracted directories`() { fun `test test entriesToTreeEntry with similar names with contracted directories`() {
val entries = listOf( val entries = listOf(
"webpack${systemSeparator}webpack.config2.ts", "webpack/webpack.config2.ts",
"webpack${systemSeparator}webpack.config.ts", "webpack/webpack.config.ts",
"webpack-plugin.ts", "webpack-plugin.ts",
"dir1${systemSeparator}file3.txt" "dir1/file3.txt"
) )
val treeContractedDirs = listOf<String>("webpack", "dir1") val treeContractedDirs = listOf<String>("webpack", "dir1")
val result = entriesToTreeEntry(entries, treeContractedDirs) { it } val result = entriesToTreeEntry(entries, treeContractedDirs) { it }