![JAR search and dependency download from the Maven repository](/logo.png)
com.avito.android.info.ExportExternalDepsCodeOwners.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of code-ownership Show documentation
Show all versions of code-ownership Show documentation
Collection of infrastructure libraries and gradle plugins of Avito Android project
The newest version!
package com.avito.android.info
import com.avito.android.OwnerSerializerProvider
import com.avito.android.check.deps.ExternalDepsCodeOwnersChecker.Companion.DEPENDENCIES_SECTION_NAMES
import com.avito.android.owner.adapter.OwnerAdapterFactory
import com.avito.android.owner.dependency.JsonOwnedDependenciesSerializer
import com.avito.android.owner.dependency.OwnedDependency
import com.avito.android.serializers.OwnerNameSerializer
import com.fasterxml.jackson.databind.JsonNode
import com.fasterxml.jackson.dataformat.toml.TomlMapper
import org.gradle.api.DefaultTask
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.provider.Property
import org.gradle.api.tasks.CacheableTask
import org.gradle.api.tasks.InputFile
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.PathSensitive
import org.gradle.api.tasks.PathSensitivity
import org.gradle.api.tasks.TaskAction
@CacheableTask
public abstract class ExportExternalDepsCodeOwners : DefaultTask() {
@get:InputFile
@get:PathSensitive(PathSensitivity.RELATIVE)
public abstract val libsOwnersFile: RegularFileProperty
@get:InputFile
@get:PathSensitive(PathSensitivity.RELATIVE)
public abstract val libsVersionsFile: RegularFileProperty
@get:Internal
public abstract val ownerSerializer: Property
@get:OutputFile
public abstract val outputFile: RegularFileProperty
@TaskAction
public fun printOwnership() {
val ownerSerializer = ownerSerializer.get().provideNameSerializer()
val dependencies = extractOwnedDependencies(ownerSerializer)
saveOwnedDependencies(dependencies, ownerSerializer)
}
private fun extractOwnedDependencies(ownerSerializer: OwnerNameSerializer): List {
val versionsFile = libsVersionsFile.get().asFile
val ownersFile = libsOwnersFile.get().asFile
val mapper = TomlMapper()
val versionsFileData = mapper.readTree(versionsFile)
val ownersFileData = mapper.readTree(ownersFile)
return DEPENDENCIES_SECTION_NAMES.flatMap { sectionName ->
extractOwnedDependencies(versionsFileData[sectionName], ownersFileData[sectionName], ownerSerializer)
}
}
private fun extractOwnedDependencies(
versionsFileSection: JsonNode,
ownersFileSection: JsonNode,
ownerSerializer: OwnerNameSerializer
): List {
val dependencies = mutableListOf()
versionsFileSection.fieldNames().forEach { dependencyName ->
val versionsFileEntry = versionsFileSection[dependencyName]
val fullDependencyName: String? = when {
versionsFileEntry.isTextual -> versionsFileEntry.textValue().substringBeforeLast(':')
versionsFileEntry.has("id") -> versionsFileEntry["id"].textValue()
else -> versionsFileEntry["module"].textValue()
}
val owner = ownersFileSection[dependencyName].textValue()
dependencies.add(
OwnedDependency(
name = fullDependencyName ?: dependencyName,
owners = listOf(ownerSerializer.deserialize(owner)),
type = OwnedDependency.Type.EXTERNAL,
betweennessCentrality = null // not supported for external dependencies
)
)
}
return dependencies
}
private fun saveOwnedDependencies(dependencies: List, ownerSerializer: OwnerNameSerializer) {
val dependencySerializer = JsonOwnedDependenciesSerializer(OwnerAdapterFactory(ownerSerializer))
val output = outputFile.get().asFile
output.writeText(dependencySerializer.serialize(dependencies))
}
public companion object {
public const val NAME: String = "exportExternalDepsCodeOwners"
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy