Code polish, better handling for version info
This commit is contained in:
parent
73e22c177c
commit
6b4916c8a8
@ -29,19 +29,38 @@ import kotlin.concurrent.write
|
|||||||
|
|
||||||
open class
|
open class
|
||||||
GetVersionInfoTask : DefaultTask() {
|
GetVersionInfoTask : DefaultTask() {
|
||||||
private data class VersionHolder(var release: Version?, val versions: MutableList<Version>) {
|
private data class VersionHolder(var release: String?, val versions: MutableSet<String>) {
|
||||||
fun updateReleaseVersion(version: String) {
|
fun updateReleaseVersion(version: String) {
|
||||||
val releaseVer = Version.from(version)
|
|
||||||
|
|
||||||
if (release == null) {
|
if (release == null) {
|
||||||
release = releaseVer
|
release = version
|
||||||
} else if (releaseVer.greaterThan(release)) {
|
} else {
|
||||||
release = releaseVer
|
// there can be errors when parsing version info, since not versions follow loose-semantic versioning
|
||||||
|
try {
|
||||||
|
val currentVersion = Version.from(release)
|
||||||
|
val releaseVer = Version.from(version)
|
||||||
|
|
||||||
|
if (releaseVer.greaterThan(currentVersion)) {
|
||||||
|
release = version
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
// ignored
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addVersion(ver: String) {
|
fun addVersion(ver: String) {
|
||||||
versions.add(Version.from(ver))
|
versions.add(ver)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getVersionOptions(currentVersion: String): List<String> {
|
||||||
|
// there can be errors when parsing version info, since not versions follow loose-semantic versioning
|
||||||
|
val myVersionIndex = versions.indexOfFirst { it == currentVersion }
|
||||||
|
|
||||||
|
return if (myVersionIndex >= 0) {
|
||||||
|
return versions.filterIndexed { index, _ -> index <= myVersionIndex }
|
||||||
|
} else {
|
||||||
|
versions.toList()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,7 +88,7 @@ GetVersionInfoTask : DefaultTask() {
|
|||||||
// version info is per dependency
|
// version info is per dependency
|
||||||
val depVersionInfo = downloadLock.write {
|
val depVersionInfo = downloadLock.write {
|
||||||
mergedVersionInfo.getOrPut(DependencyScanner.Maven(mergedDep.group, mergedDep.name)) {
|
mergedVersionInfo.getOrPut(DependencyScanner.Maven(mergedDep.group, mergedDep.name)) {
|
||||||
VersionHolder(null, mutableListOf())
|
VersionHolder(null, mutableSetOf())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -105,9 +124,11 @@ GetVersionInfoTask : DefaultTask() {
|
|||||||
futures.add(future)
|
futures.add(future)
|
||||||
}
|
}
|
||||||
|
|
||||||
println("\tGetting version data for ${mergedDeps.size} dependencies...")
|
if (mergedDeps.isNotEmpty()) {
|
||||||
futures.forEach {
|
println("\tGetting version data for ${mergedDeps.size} dependencies...")
|
||||||
it.get()
|
futures.forEach {
|
||||||
|
it.get()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
downloadLock.write {
|
downloadLock.write {
|
||||||
@ -144,71 +165,61 @@ GetVersionInfoTask : DefaultTask() {
|
|||||||
mergedDeps.forEach { (mergedDep, existingVersions) ->
|
mergedDeps.forEach { (mergedDep, existingVersions) ->
|
||||||
val latestInfo: VersionHolder = mergedVersionInfo[mergedDep]!!
|
val latestInfo: VersionHolder = mergedVersionInfo[mergedDep]!!
|
||||||
existingVersions.forEach { dep ->
|
existingVersions.forEach { dep ->
|
||||||
if (latestInfo.release != null) {
|
if (latestInfo.release == null) {
|
||||||
if (Version.from(dep.version) == latestInfo.release) {
|
unknownVersionInfo.add(dep)
|
||||||
|
} else {
|
||||||
|
if (dep.version == latestInfo.release) {
|
||||||
latestVersionInfo.add(dep)
|
latestVersionInfo.add(dep)
|
||||||
} else {
|
} else {
|
||||||
oldVersionInfo.add(Pair(dep, latestInfo))
|
oldVersionInfo.add(Pair(dep, latestInfo))
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
unknownVersionInfo.add(dep)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
println("\t------------------------------------------------------------")
|
val hasLatest = latestVersionInfo.isNotEmpty()
|
||||||
println("\tThe following build script dependencies are using the latest release version:")
|
val hasOld = oldVersionInfo.isNotEmpty()
|
||||||
latestVersionInfo.forEach { dep ->
|
val hasUnknown = unknownVersionInfo.isNotEmpty()
|
||||||
println("\t - ${dep.group}:${dep.version}")
|
|
||||||
}
|
|
||||||
|
|
||||||
if (oldVersionInfo.isNotEmpty()) {
|
if (hasLatest || hasOld || hasUnknown) {
|
||||||
println()
|
println("\t------------------------------------------------------------")
|
||||||
println("\tThe following build script dependencies need updates:")
|
|
||||||
|
|
||||||
oldVersionInfo.forEach { (dep, versionHolder) ->
|
if (hasLatest) {
|
||||||
// list release version AND all other versions greater than my version
|
println("\tThe following build script dependencies are using the latest release version:")
|
||||||
val depVersion = Version.from(dep.version)
|
latestVersionInfo.forEach { dep ->
|
||||||
val possibleVersionChoices = versionHolder.versions.filter { it.greaterThan(depVersion) }.toSet()
|
println("\t - ${dep.group}:${dep.version}")
|
||||||
|
|
||||||
// BUILD SCRIPT DEPS HAVE FUNNY NOTATION!
|
|
||||||
println("\t - ${dep.group} [${dep.version} -> ${versionHolder.release}]")
|
|
||||||
if (possibleVersionChoices.size > 1) {
|
|
||||||
println("\t\t$possibleVersionChoices")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (unknownVersionInfo.isNotEmpty()) {
|
if (hasOld) {
|
||||||
println()
|
println()
|
||||||
println("\tThe following build script dependencies have unknown updates:")
|
println("\tThe following build script dependencies need updates:")
|
||||||
unknownVersionInfo.forEach { dep ->
|
|
||||||
// BUILD SCRIPT DEPS HAVE FUNNY NOTATION!
|
oldVersionInfo.forEach { (dep, versionHolder) ->
|
||||||
println("\t - ${dep.group}:${dep.version}")
|
// list release version AND all other versions greater than my version
|
||||||
|
val versionOptions = versionHolder.getVersionOptions(dep.version)
|
||||||
|
|
||||||
|
// BUILD SCRIPT DEPS HAVE FUNNY NOTATION!
|
||||||
|
println("\t - ${dep.group}:${dep.version} -> $versionOptions")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasUnknown) {
|
||||||
|
println()
|
||||||
|
println("\tThe following build script dependencies have unknown updates:")
|
||||||
|
unknownVersionInfo.forEach { dep ->
|
||||||
|
// BUILD SCRIPT DEPS HAVE FUNNY NOTATION!
|
||||||
|
println("\t - ${dep.group}:${dep.version}")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun projectDependencies(staticMethodsAndTools: StaticMethodsAndTools, project: Project) {
|
private fun projectDependencies(staticMethodsAndTools: StaticMethodsAndTools, project: Project) {
|
||||||
// collect ALL projected + children projects.
|
|
||||||
val projects = mutableListOf<Project>()
|
|
||||||
val recursive = LinkedList<Project>()
|
|
||||||
recursive.add(project)
|
|
||||||
|
|
||||||
|
|
||||||
var next: Project
|
|
||||||
while (recursive.isNotEmpty()) {
|
|
||||||
next = recursive.poll()
|
|
||||||
projects.add(next)
|
|
||||||
recursive.addAll(next.childProjects.values)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
val mergedDeps = mutableMapOf<DependencyScanner.Maven, MutableSet<DependencyScanner.Maven>>()
|
val mergedDeps = mutableMapOf<DependencyScanner.Maven, MutableSet<DependencyScanner.Maven>>()
|
||||||
val mergedRepos = mutableSetOf<String>()
|
val mergedRepos = mutableSetOf<String>()
|
||||||
|
|
||||||
|
project.allprojects.forEach { subProject ->
|
||||||
projects.forEach { subProject ->
|
|
||||||
staticMethodsAndTools.resolveAllDeclaredDependencies(subProject).forEach { dep ->
|
staticMethodsAndTools.resolveAllDeclaredDependencies(subProject).forEach { dep ->
|
||||||
val deps = mergedDeps.getOrPut(DependencyScanner.Maven(dep.group, dep.name)) { mutableSetOf() }
|
val deps = mergedDeps.getOrPut(DependencyScanner.Maven(dep.group, dep.name)) { mutableSetOf() }
|
||||||
deps.add(DependencyScanner.Maven(dep.group, dep.name, dep.version))
|
deps.add(DependencyScanner.Maven(dep.group, dep.name, dep.version))
|
||||||
@ -228,9 +239,8 @@ GetVersionInfoTask : DefaultTask() {
|
|||||||
val unknownVersionInfo = mutableListOf<DependencyScanner.Maven>()
|
val unknownVersionInfo = mutableListOf<DependencyScanner.Maven>()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// now for project dependencies!
|
// now for project dependencies!
|
||||||
projects.forEach { subProject ->
|
project.allprojects.forEach { subProject ->
|
||||||
mergedDeps.clear()
|
mergedDeps.clear()
|
||||||
latestVersionInfo.clear()
|
latestVersionInfo.clear()
|
||||||
oldVersionInfo.clear()
|
oldVersionInfo.clear()
|
||||||
@ -248,7 +258,7 @@ GetVersionInfoTask : DefaultTask() {
|
|||||||
val latestInfo: VersionHolder = mergedVersionInfo[mergedDep]!!
|
val latestInfo: VersionHolder = mergedVersionInfo[mergedDep]!!
|
||||||
existingVersions.forEach { dep ->
|
existingVersions.forEach { dep ->
|
||||||
if (latestInfo.release != null) {
|
if (latestInfo.release != null) {
|
||||||
if (Version.from(dep.version) == latestInfo.release) {
|
if (dep.version == latestInfo.release) {
|
||||||
latestVersionInfo.add(dep)
|
latestVersionInfo.add(dep)
|
||||||
} else {
|
} else {
|
||||||
oldVersionInfo.add(Pair(dep, latestInfo))
|
oldVersionInfo.add(Pair(dep, latestInfo))
|
||||||
@ -267,33 +277,41 @@ GetVersionInfoTask : DefaultTask() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
println("\t------------------------------------------------------------")
|
val hasLatest = latestVersionInfo.isNotEmpty()
|
||||||
println("\tThe following project$projectName dependencies are using the latest release version:")
|
val hasOld = oldVersionInfo.isNotEmpty()
|
||||||
latestVersionInfo.forEach { dep ->
|
val hasUnknown = unknownVersionInfo.isNotEmpty()
|
||||||
println("\t - ${dep.group}:${dep.name}:${dep.version}")
|
|
||||||
}
|
|
||||||
|
|
||||||
if (oldVersionInfo.isNotEmpty()) {
|
if (hasLatest || hasOld || hasUnknown) {
|
||||||
println()
|
println("\t------------------------------------------------------------")
|
||||||
println("\tThe following project$projectName dependencies need updates:")
|
|
||||||
|
|
||||||
oldVersionInfo.forEach { (dep, versionHolder) ->
|
if (hasLatest) {
|
||||||
// list release version AND all other versions greater than my version
|
println("\tThe following project$projectName dependencies are using the latest release version:")
|
||||||
val depVersion = Version.from(dep.version)
|
latestVersionInfo.forEach { dep ->
|
||||||
val possibleVersionChoices = versionHolder.versions.filter { it.greaterThan(depVersion) }.toSet()
|
println("\t - ${dep.group}:${dep.name}:${dep.version}")
|
||||||
|
|
||||||
println("\t - ${dep.group}:${dep.name} [${dep.version} -> ${versionHolder.release}]")
|
|
||||||
if (possibleVersionChoices.size > 1) {
|
|
||||||
println("\t\t$possibleVersionChoices")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (unknownVersionInfo.isNotEmpty()) {
|
|
||||||
println()
|
if (hasOld) {
|
||||||
println("\tThe following project$projectName dependencies have unknown updates:")
|
println()
|
||||||
unknownVersionInfo.forEach { dep ->
|
println("\tThe following project$projectName dependencies need updates:")
|
||||||
println("\t - ${dep.group}:${dep.name}:${dep.version}")
|
|
||||||
|
oldVersionInfo.forEach { (dep, versionHolder) ->
|
||||||
|
// list release version AND all other versions greater than my version
|
||||||
|
val possibleVersionChoices = versionHolder.getVersionOptions(dep.version)
|
||||||
|
|
||||||
|
println("\t - ${dep.group}:${dep.name}:${dep.version} -> ${versionHolder.release}")
|
||||||
|
println("\t - ${dep.group}:${dep.name}:${dep.version} -> ${versionHolder.versions}")
|
||||||
|
println("\t - ${dep.group}:${dep.name}:${dep.version} -> $possibleVersionChoices")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasUnknown) {
|
||||||
|
println()
|
||||||
|
println("\tThe following project$projectName dependencies have unknown updates:")
|
||||||
|
unknownVersionInfo.forEach { dep ->
|
||||||
|
println("\t - ${dep.group}:${dep.name}:${dep.version}")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user