parent
c6c3c0451a
commit
422b431fdf
@ -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
|
||||||
|
@ -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())
|
||||||
|
|
||||||
|
@ -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 }
|
||||||
|
Loading…
Reference in New Issue
Block a user