From 422b431fdf2c3c532a8cfd1c2dac2e7b490ef4b5 Mon Sep 17 00:00:00 2001 From: Abdelilah El Aissaoui Date: Fri, 6 Sep 2024 13:32:39 +0200 Subject: [PATCH] Fixed tree view on windows Fixes #235 --- .../git/workspace/StageByDirectoryUseCase.kt | 1 - .../jetpackduba/gitnuro/ui/tree_files/Tree.kt | 13 ++++---- .../gitnuro/ui/tree_files/TreeTest.kt | 31 +++++++++---------- 3 files changed, 21 insertions(+), 24 deletions(-) diff --git a/src/main/kotlin/com/jetpackduba/gitnuro/git/workspace/StageByDirectoryUseCase.kt b/src/main/kotlin/com/jetpackduba/gitnuro/git/workspace/StageByDirectoryUseCase.kt index fb9b767..6c1ca68 100644 --- a/src/main/kotlin/com/jetpackduba/gitnuro/git/workspace/StageByDirectoryUseCase.kt +++ b/src/main/kotlin/com/jetpackduba/gitnuro/git/workspace/StageByDirectoryUseCase.kt @@ -1,6 +1,5 @@ package com.jetpackduba.gitnuro.git.workspace -import com.jetpackduba.gitnuro.system.systemSeparator import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import org.eclipse.jgit.api.Git diff --git a/src/main/kotlin/com/jetpackduba/gitnuro/ui/tree_files/Tree.kt b/src/main/kotlin/com/jetpackduba/gitnuro/ui/tree_files/Tree.kt index 54ecce0..d8cae94 100644 --- a/src/main/kotlin/com/jetpackduba/gitnuro/ui/tree_files/Tree.kt +++ b/src/main/kotlin/com/jetpackduba/gitnuro/ui/tree_files/Tree.kt @@ -1,6 +1,5 @@ package com.jetpackduba.gitnuro.ui.tree_files -import com.jetpackduba.gitnuro.system.systemSeparator import kotlin.math.max fun entriesToTreeEntry( @@ -18,12 +17,12 @@ fun entriesToTreeEntry( } .map { entry -> val filePath = onGetEntryPath(entry) - val parts = filePath.split(systemSeparator) + val parts = filePath.split("/") parts.mapIndexed { index, partName -> if (index == parts.lastIndex) { val isParentDirectoryContracted = treeContractedDirs.any { contractedDir -> - filePath.startsWith(contractedDir + systemSeparator) + filePath.startsWith(contractedDir + "/") } if (isParentDirectoryContracted) { @@ -32,9 +31,9 @@ fun entriesToTreeEntry( TreeItem.File(entry, partName, filePath, index) } } else { - val dirPath = parts.slice(0..index).joinToString(systemSeparator) + val dirPath = parts.slice(0..index).joinToString("/") val isParentDirectoryContracted = treeContractedDirs.any { contractedDir -> - dirPath.startsWith(contractedDir + systemSeparator) && + dirPath.startsWith(contractedDir + "/") && dirPath != contractedDir } val isExactDirectoryContracted = treeContractedDirs.any { contractedDir -> @@ -57,8 +56,8 @@ fun entriesToTreeEntry( private class PathsComparator : Comparator { override fun compare(path1: String, path2: String): Int { - val path1Parts = path1.split(systemSeparator) - val path2Parts = path2.split(systemSeparator) + val path1Parts = path1.split("/") + val path2Parts = path2.split("/") val maxIndex = max(path1Parts.count(), path2Parts.count()) diff --git a/src/test/kotlin/com/jetpackduba/gitnuro/ui/tree_files/TreeTest.kt b/src/test/kotlin/com/jetpackduba/gitnuro/ui/tree_files/TreeTest.kt index 9f5fc28..71d8161 100644 --- a/src/test/kotlin/com/jetpackduba/gitnuro/ui/tree_files/TreeTest.kt +++ b/src/test/kotlin/com/jetpackduba/gitnuro/ui/tree_files/TreeTest.kt @@ -1,6 +1,5 @@ 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.assertTrue import org.junit.jupiter.api.Test @@ -27,19 +26,19 @@ class TreeTest { @Test fun `test entriesToTreeEntry with multiple file entries`() { val entries = listOf( - "dir1${systemSeparator}file1.txt", - "dir2${systemSeparator}file2.txt", - "dir3${systemSeparator}file3.txt", + "dir1/file1.txt", + "dir2/file2.txt", + "dir3/file3.txt", ) val treeContractedDirs = emptyList() val result = entriesToTreeEntry(entries, treeContractedDirs) { it } val expected = listOf( 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.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.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) } @@ -47,19 +46,19 @@ class TreeTest { @Test fun `test entriesToTreeEntry with similar names`() { val entries = listOf( - "webpack${systemSeparator}webpack.config2.ts", - "webpack${systemSeparator}webpack.config.ts", + "webpack/webpack.config2.ts", + "webpack/webpack.config.ts", "webpack-plugin.ts", - "dir1${systemSeparator}file3.txt" + "dir1/file3.txt" ) val treeContractedDirs = emptyList() val result = entriesToTreeEntry(entries, treeContractedDirs) { it } val expected = listOf( 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.File("webpack${systemSeparator}webpack.config.ts", "webpack.config.ts", "webpack${systemSeparator}webpack.config.ts", 1), - TreeItem.File("webpack${systemSeparator}webpack.config2.ts", "webpack.config2.ts", "webpack${systemSeparator}webpack.config2.ts", 1), + TreeItem.File("webpack/webpack.config.ts", "webpack.config.ts", "webpack/webpack.config.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) ) assertEquals(expected, result) @@ -68,10 +67,10 @@ class TreeTest { @Test fun `test test entriesToTreeEntry with similar names with contracted directories`() { val entries = listOf( - "webpack${systemSeparator}webpack.config2.ts", - "webpack${systemSeparator}webpack.config.ts", + "webpack/webpack.config2.ts", + "webpack/webpack.config.ts", "webpack-plugin.ts", - "dir1${systemSeparator}file3.txt" + "dir1/file3.txt" ) val treeContractedDirs = listOf("webpack", "dir1") val result = entriesToTreeEntry(entries, treeContractedDirs) { it }