Compare commits

..

No commits in common. "1fd3fa8907645923ff2b8587e0d578278130c7d2" and "931bb3244f69a67a08e51abcea6a8d4693be1691" have entirely different histories.

6 changed files with 37 additions and 85 deletions

View File

@ -11,6 +11,3 @@ tab_width = 4
[{*.yaml,*.yml}] [{*.yaml,*.yml}]
indent_size = 2 indent_size = 2
[{*.kt,*.kts}]
ij_kotlin_packages_to_use_import_on_demand = org.junit.jupiter.api

View File

@ -1,11 +1,8 @@
name: Publish Workflow name: Publish Workflow
on: on:
pull_request:
branches:
- main
push: push:
branches: tags:
- main - v*
jobs: jobs:
publish: publish:
name: Publish library name: Publish library

View File

@ -6,7 +6,7 @@ plugins {
} }
group = "net.koval.teamcity-build-step-extension-test-task" group = "net.koval.teamcity-build-step-extension-test-task"
version = "0.0.0" version = System.getenv("FILESYSTEM_VERSION")
repositories { repositories {
mavenCentral() mavenCentral()

View File

@ -8,10 +8,7 @@ import java.nio.file.Path
class FSCreator { class FSCreator {
// Create entry, leaving existing folders' contents, but overwriting existing files. // Create entry, leaving existing folders' contents, but overwriting existing files.
@Throws(FileSystemException::class) @Throws(FileSystemException::class)
fun create( fun create(entryToCreate: FSEntry, destination: String) {
entryToCreate: FSEntry,
destination: String,
) {
val queue = ArrayDeque<Pair<FSEntry, Path>>() val queue = ArrayDeque<Pair<FSEntry, Path>>()
queue.add(entryToCreate to Path.of(destination)) queue.add(entryToCreate to Path.of(destination))
@ -23,8 +20,7 @@ class FSCreator {
is FSFile -> Files.createFile(path) is FSFile -> Files.createFile(path)
is FSFolder -> Files.createDirectory(path) is FSFolder -> Files.createDirectory(path)
} }
} catch (_: FileAlreadyExistsException) { } catch (_: FileAlreadyExistsException) {} // Allow files/folders to already exist.
} // Allow files/folders to already exist.
when (entry) { when (entry) {
is FSFile -> Files.write(path, entry.content.toByteArray()) is FSFile -> Files.write(path, entry.content.toByteArray())
is FSFolder -> queue.addAll(entry.entries.map { it to path }) is FSFolder -> queue.addAll(entry.entries.map { it to path })

View File

@ -4,6 +4,6 @@ package filesystem
// (as we expect), and it also makes the class abstract as required. // (as we expect), and it also makes the class abstract as required.
sealed class FSEntry(val name: String) sealed class FSEntry(val name: String)
class FSFile(name: String, val content: String) : FSEntry(name) class FSFile(name: String, val content: String): FSEntry(name)
class FSFolder(name: String, val entries: List<FSEntry>) : FSEntry(name) class FSFolder(name: String, val entries: List<FSEntry>): FSEntry(name)

View File

@ -29,36 +29,19 @@ class FSCreatorTest {
fun `create entries`() { fun `create entries`() {
val readme = FSFile("README", "Hello World!") val readme = FSFile("README", "Hello World!")
val gomod = FSFile("go.mod", "module example.com/hello-world\n\ngo1.21.5") val gomod = FSFile("go.mod", "module example.com/hello-world\n\ngo1.21.5")
val maingo = val maingo = FSFile("main.go", "package main\n\nimport \"example.com/hello-world/utils\"\n\n" +
FSFile( "func main() {\n\tprintln(\"Hello World!\")\n}")
"main.go", val helloworldgo = FSFile("hello-world.go", "package utils\n\nfunc PrintHelloWorld() {\n" +
"package main\n\nimport \"example.com/hello-world/utils\"\n\n" + "\tprintln(\"Hello World!\")\n}")
"func main() {\n\tprintln(\"Hello World!\")\n}",
)
val helloworldgo =
FSFile(
"hello-world.go",
"package utils\n\nfunc PrintHelloWorld() {\n" +
"\tprintln(\"Hello World!\")\n}",
)
assertDoesNotThrow("should create entries") { assertDoesNotThrow("should create entries") {
creator.create( creator.create(FSFolder("folder", listOf(
FSFolder( readme,
"folder", gomod,
listOf( maingo,
readme, FSFolder("utils", listOf(
gomod, helloworldgo
maingo, ))
FSFolder( )), "_tmp")
"utils",
listOf(
helloworldgo,
),
),
),
),
"_tmp",
)
} }
// If objects don't exist, these functions will throw anyway, so don't explicitly check for existence. // If objects don't exist, these functions will throw anyway, so don't explicitly check for existence.
// Similarly, don't explicitly check if an object is a directory. // Similarly, don't explicitly check if an object is a directory.
@ -71,46 +54,25 @@ class FSCreatorTest {
@Test @Test
fun `create existing entries`() { fun `create existing entries`() {
assertDoesNotThrow("creation one") { assertDoesNotThrow("creation one") {
creator.create( creator.create(FSFolder("folder", listOf(
FSFolder( FSFolder("sub-folder", listOf(
"folder", FSFile("hi", "hi")
listOf( )),
FSFolder( FSFolder("another-folder", listOf()),
"sub-folder", FSFile("1.txt", "One!"),
listOf( FSFile("2.txt", "Two!")
FSFile("hi", "hi"), )), "_tmp")
),
),
FSFolder("another-folder", listOf()),
FSFile("1.txt", "One!"),
FSFile("2.txt", "Two!"),
),
),
"_tmp",
)
} }
assertDoesNotThrow("creation two") { assertDoesNotThrow("creation two") {
creator.create( creator.create(FSFolder("folder", listOf(
FSFolder( FSFolder("another-folder", listOf(
"folder", FSFolder("secrets", listOf(
listOf( FSFile("secret", "P4ssW0rd")
FSFolder( ))
"another-folder", )),
listOf( FSFile("1.txt", "One is a good number"),
FSFolder( FSFile("3.txt", "Three!")
"secrets", )), "_tmp")
listOf(
FSFile("secret", "P4ssW0rd"),
),
),
),
),
FSFile("1.txt", "One is a good number"),
FSFile("3.txt", "Three!"),
),
),
"_tmp",
)
} }
assertEquals("hi", Files.readString(Path.of("_tmp/folder/sub-folder/hi"))) assertEquals("hi", Files.readString(Path.of("_tmp/folder/sub-folder/hi")))
assertEquals("P4ssW0rd", Files.readString(Path.of("_tmp/folder/another-folder/secrets/secret"))) assertEquals("P4ssW0rd", Files.readString(Path.of("_tmp/folder/another-folder/secrets/secret")))