Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import dev.icerock.gradle.metadata.container.ResourceType
import dev.icerock.gradle.metadata.resource.ResourceMetadata
import dev.icerock.gradle.utils.filterClass
import org.gradle.api.tasks.util.PatternFilterable
import java.io.File
import kotlin.reflect.KClass

@Suppress("LongParameterList", "TooManyFunctions", "UnusedPrivateMember")
Expand All @@ -28,7 +29,11 @@ internal class ResourceTypeGenerator<T : ResourceMetadata>(
private val filter: PatternFilterable.() -> Unit,
) {
fun generateMetadata(files: ResourcesFiles): List<T> {
return generator.generateMetadata(files.matching(filter).ownSourceSet.fileTree.files)
// Sort for deterministic output; FileTree.files iteration is filesystem-dependent.
val sortedFiles: Set<File> = files.matching(filter).ownSourceSet.fileTree.files
.sortedBy { it.absolutePath }
.toCollection(LinkedHashSet())
return generator.generateMetadata(sortedFiles)
}

fun getImports(): List<ClassName> = platformResourceGenerator.imports()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ internal data class StringMetadata(
)

@Suppress("MagicNumber")
override fun contentHash(): String = values.hashCode().toString(16)
override fun contentHash(): String = values.toString().hashCode().toString(16)
}

@Serializable
Expand Down Expand Up @@ -94,7 +94,7 @@ internal data class PluralMetadata(
}

@Suppress("MagicNumber")
override fun contentHash(): String = values.hashCode().toString(16)
override fun contentHash(): String = values.toString().hashCode().toString(16)
}

@Serializable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,9 +155,12 @@ abstract class GenerateMultiplatformResourcesTask : DefaultTask() {
)
val serializer: KSerializer<List<ContainerMetadata>> =
ListSerializer(ContainerMetadata.serializer())
val inputMetadata: List<ContainerMetadata> = inputMetadataFiles.files.flatMap { file ->
json.decodeFromString(serializer, file.readText())
}
// Sort for deterministic output.
val inputMetadata: List<ContainerMetadata> = inputMetadataFiles.files
.sortedBy { it.absolutePath }
.flatMap { file ->
json.decodeFromString(serializer, file.readText())
}

val outputMetadata: List<ContainerMetadata> = if (kotlinPlatformType.isCommon) {
generator.generateCommonKotlin(files, inputMetadata)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,11 @@ import java.io.InputStream
import java.io.SequenceInputStream

internal fun File.calculateResourcesHash(): String {
val root: File = this
// Sort for deterministic output; walkTopDown() order is filesystem-dependent.
val inputStreams: List<InputStream> = walkTopDown()
.filterNot { it.isDirectory }
.sortedBy { it.relativeTo(root).path }
.map { it.inputStream() }.toList()
val singleInputStream: InputStream = SequenceInputStream(inputStreams.toEnumeration())

Expand Down
Loading