Documentation generation (Dokka HTML) #3
| @@ -1,6 +1,7 @@ | ||||
| plugins { | ||||
|     kotlin("jvm") version "1.9.21" | ||||
|     id("org.jmailen.kotlinter") version "4.1.0" | ||||
|     id("org.jetbrains.dokka") version "1.9.10" | ||||
|     `maven-publish` | ||||
| } | ||||
|  | ||||
| @@ -23,10 +24,18 @@ kotlin { | ||||
|     jvmToolchain(17) | ||||
| } | ||||
|  | ||||
| val dokkaHtml by tasks.getting(org.jetbrains.dokka.gradle.DokkaTask::class) | ||||
| val javadocJar: TaskProvider<Jar> by tasks.registering(Jar::class) { | ||||
|     dependsOn(dokkaHtml) | ||||
|     archiveClassifier.set("javadoc") | ||||
|     from(dokkaHtml.outputDirectory) | ||||
| } | ||||
|  | ||||
| publishing { | ||||
|     publications.register<MavenPublication>("gpr") { | ||||
|         artifactId = "tinyvm" | ||||
|         from(components["java"]) | ||||
|         artifact(javadocJar) | ||||
|         pom { | ||||
|             name.set("TeamCity support for Gitea - Test Task - tiny version manager") | ||||
|             description.set("This is a small project to implement a subset of git's functionality in Kotlin and was " + | ||||
|   | ||||
| @@ -2,28 +2,36 @@ package tinyvm | ||||
|  | ||||
| import java.security.MessageDigest | ||||
| import java.time.Instant | ||||
| import java.util.HexFormat | ||||
|  | ||||
| abstract class Object( | ||||
|     val type: String, | ||||
| ) { | ||||
| /** | ||||
|  * Represents an arbitrary version manager object. | ||||
|  */ | ||||
| abstract class Object(val type: String) { | ||||
|     abstract val data: String | ||||
|  | ||||
|     fun hash(): String = | ||||
|         MessageDigest | ||||
|             .getInstance("SHA-1") | ||||
|             .digest("$type ${data.length}\u0000$data".toByteArray()) | ||||
|             .toHex() | ||||
|         HexFormat.of().formatHex( | ||||
|             MessageDigest | ||||
|                 .getInstance("SHA-1") | ||||
|                 .digest("$type ${data.length}\u0000$data".toByteArray()), | ||||
|         ) | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Commits are a pointer to a 'head' tree with some metadata. | ||||
|  */ | ||||
| class Commit( | ||||
|     val tree: Tree, | ||||
|     val author: Author, | ||||
|     val message: String, | ||||
|     val timestamp: Instant, | ||||
| ) : Object("commit") { | ||||
|     // Use \n\n for end of header in-case additional metadata is implemented in the future. | ||||
|     override val data: String | ||||
|         // Use \n\n for end of header in-case additional metadata is implemented in the future. | ||||
|         get() = "tree ${tree.hash()}\nauthor $author\ntimestamp ${timestamp.epochSecond}\n\n$message" | ||||
|  | ||||
|     override fun toString(): String = "commit ${hash()}\n$data" | ||||
| } | ||||
|  | ||||
| data class Author( | ||||
|   | ||||
| @@ -1,5 +0,0 @@ | ||||
| package tinyvm | ||||
|  | ||||
| import java.util.HexFormat | ||||
|  | ||||
| fun ByteArray.toHex(): String = HexFormat.of().formatHex(this) | ||||
| @@ -1,7 +1,13 @@ | ||||
| package tinyvm | ||||
|  | ||||
| /** | ||||
|  * Tree nodes are either trees or blobs, represented by this sealed class. | ||||
|  */ | ||||
| sealed class Node(type: String) : Object(type) | ||||
|  | ||||
| /** | ||||
|  * A tree is a set of named nodes. | ||||
|  */ | ||||
| class Tree(val nodes: Map<String, Node>) : Node("tree") { | ||||
|     // For simplicity just use the hex-formatted hash, not the actual value like git does. | ||||
|     override val data: String | ||||
| @@ -11,4 +17,7 @@ class Tree(val nodes: Map<String, Node>) : Node("tree") { | ||||
|             }.sorted().joinToString() | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * A blob is a data container. | ||||
|  */ | ||||
| class Blob(override val data: String) : Node("blob") | ||||
		Reference in New Issue
	
	Block a user