Piotr KrzemiĆski
04/14/2023, 11:52 AMPiotr KrzemiĆski
04/14/2023, 11:53 AM#!/usr/bin/env kotlin
@file:DependsOn("org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r")
@file:DependsOn("org.jetbrains.lets-plot:lets-plot-kotlin-jvm:4.3.0")
@file:DependsOn("org.jetbrains.lets-plot:lets-plot-image-export:3.1.0")
import org.eclipse.jgit.api.Git
import org.jetbrains.letsPlot.Stat
import org.jetbrains.letsPlot.export.ggsave
import org.jetbrains.letsPlot.geom.geomBar
import org.jetbrains.letsPlot.ggsize
import org.jetbrains.letsPlot.label.ggtitle
import org.jetbrains.letsPlot.letsPlot
import java.io.File
import java.text.SimpleDateFormat
import java.time.Instant
import java.util.Date
val repo = Git.open(File("...path.to.cloned.Kotlin.repo..."))
var formatter = SimpleDateFormat("yyyy-MM-dd")
val datesInGroups = repo.log().call().map { commit ->
val instant = Instant.ofEpochSecond(commit.commitTime.toLong())
val date = Date.from(instant)
formatter.format(date)
}.groupingBy { it.substring(0..6) }
.eachCount()
val plotData = mapOf(
"yearMonth" to datesInGroups.keys.sorted(),
"count" to datesInGroups.entries.sortedBy { it.key }.map { it.value },
)
var plot = letsPlot(plotData) +
geomBar(stat = Stat.identity) { x = "yearMonth"; y = "count" } +
ggsize(1920, 1080) +
ggtitle("Number of commits monthly in JetBrains/kotlin repository")
ggsave(plot, "Kotlin commit history.png")
Big Chungus
04/14/2023, 12:00 PMktx run <https://domain.com/path/to/file.main.kts|https://domain.com/path/to/file.main.kts>
Piotr KrzemiĆski
04/14/2023, 12:00 PMBig Chungus
04/14/2023, 12:01 PMPiotr KrzemiĆski
04/14/2023, 12:02 PM...<http://path.to|path.to>.cloned.Kotlin.repo...
Big Chungus
04/14/2023, 12:04 PMPiotr KrzemiĆski
04/14/2023, 8:37 PMktx run <https://raw.githubusercontent.com/krzema12/PersonalConfigs/master/scripts/PlotCommitsCount.main.kts> /path/to/your/repo
Piotr KrzemiĆski
04/14/2023, 8:37 PMStephan Schröder
04/16/2023, 11:23 AM