mirror of
https://github.com/ethauvin/kobalt.git
synced 2025-04-27 08:38:13 -07:00
Comment and logging.
This commit is contained in:
parent
3e6760f8f5
commit
e9a647a9f6
2 changed files with 24 additions and 9 deletions
|
@ -16,7 +16,10 @@ class AndroidFiles {
|
||||||
return KFiles.joinDir(dir, "AndroidManifest.xml")
|
return KFiles.joinDir(dir, "AndroidManifest.xml")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun mergedResourcesNoVariant(project: Project, variant: Variant) =
|
||||||
|
KFiles.joinAndMakeDir(AndroidFiles.intermediates(project), "res", "merged")
|
||||||
|
|
||||||
fun mergedResources(project: Project, variant: Variant) =
|
fun mergedResources(project: Project, variant: Variant) =
|
||||||
KFiles.joinAndMakeDir(AndroidFiles.intermediates(project), "res", "merged", variant.toIntermediateDir())
|
KFiles.joinAndMakeDir(mergedResourcesNoVariant(project, variant), variant.toIntermediateDir())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,8 +22,10 @@ import javax.xml.bind.annotation.XmlValue
|
||||||
*/
|
*/
|
||||||
class Merger @Inject constructor() {
|
class Merger @Inject constructor() {
|
||||||
fun merge(project: Project, context: KobaltContext) {
|
fun merge(project: Project, context: KobaltContext) {
|
||||||
|
File(AndroidFiles.mergedResourcesNoVariant(project, context.variant)).deleteRecursively()
|
||||||
mergeResources(project, context.variant)
|
mergeResources(project, context.variant)
|
||||||
mergeAndroidManifest(project, context.variant)
|
mergeAndroidManifest(project, context.variant)
|
||||||
|
log(2, "All done merging")
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -31,7 +33,7 @@ class Merger @Inject constructor() {
|
||||||
*/
|
*/
|
||||||
private fun mergeAndroidManifest(project: Project, variant: Variant) {
|
private fun mergeAndroidManifest(project: Project, variant: Variant) {
|
||||||
val dest = AndroidFiles.mergedManifest(project, variant)
|
val dest = AndroidFiles.mergedManifest(project, variant)
|
||||||
log(2, "Manifest merging not implemented, copying it to $dest")
|
log(2, "----- Merging manifest (not implemented, copying it to $dest)")
|
||||||
KFiles.copy(Paths.get("src/main/AndroidManifest.xml"), Paths.get(dest))
|
KFiles.copy(Paths.get("src/main/AndroidManifest.xml"), Paths.get(dest))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,6 +42,11 @@ class Merger @Inject constructor() {
|
||||||
fun doMerge(fromFile: File, toFile: File)
|
fun doMerge(fromFile: File, toFile: File)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Merge files found in values/, e.g. values/strings.xml.
|
||||||
|
* All the files are enumerated for each one, look if a file by the same name is present in the merged
|
||||||
|
* directory. If not, copy it. If there is, look for a merger for this file and run it.
|
||||||
|
*/
|
||||||
class ValuesFileMerger : IFileMerger {
|
class ValuesFileMerger : IFileMerger {
|
||||||
override fun canMerge(fromFile: File, toFile: File) : Boolean {
|
override fun canMerge(fromFile: File, toFile: File) : Boolean {
|
||||||
return fromFile.parentFile.name == "values"
|
return fromFile.parentFile.name == "values"
|
||||||
|
@ -56,7 +63,7 @@ class Merger @Inject constructor() {
|
||||||
log(2, " Unconflicted string: ${it.name}")
|
log(2, " Unconflicted string: ${it.name}")
|
||||||
toXml.strings.add(it)
|
toXml.strings.add(it)
|
||||||
} else {
|
} else {
|
||||||
log(2, " String ${it.name} overwritten")
|
log(2, " String ${it.name} already present, ignoring")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -71,7 +78,6 @@ class Merger @Inject constructor() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
KFiles.saveFile(toFile, mergedText.toString())
|
KFiles.saveFile(toFile, mergedText.toString())
|
||||||
log(2, "Wrote merged File: $toFile:\n" + mergedText.toString())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,6 +91,9 @@ class Merger @Inject constructor() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The default file merger does nothing (leaves the file in the merged directory alone).
|
||||||
|
*/
|
||||||
class DefaultFileMerger : IFileMerger {
|
class DefaultFileMerger : IFileMerger {
|
||||||
override fun canMerge(fromFile: File, toFile: File) : Boolean = true
|
override fun canMerge(fromFile: File, toFile: File) : Boolean = true
|
||||||
override fun doMerge(fromFile: File, toFile: File) {
|
override fun doMerge(fromFile: File, toFile: File) {
|
||||||
|
@ -92,28 +101,31 @@ class Merger @Inject constructor() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default file merger last.
|
||||||
|
*/
|
||||||
val fileMergers : List<IFileMerger> = arrayListOf(ValuesFileMerger(), DefaultFileMerger())
|
val fileMergers : List<IFileMerger> = arrayListOf(ValuesFileMerger(), DefaultFileMerger())
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: not implemented yet, just copying the resources into the variant dir
|
|
||||||
* Spec: http://developer.android.com/sdk/installing/studio-build.html
|
* Spec: http://developer.android.com/sdk/installing/studio-build.html
|
||||||
*/
|
*/
|
||||||
private fun mergeResources(project: Project, variant: Variant) {
|
private fun mergeResources(project: Project, variant: Variant) {
|
||||||
val dest = AndroidFiles.Companion.mergedResources(project, variant)
|
val dest = AndroidFiles.Companion.mergedResources(project, variant)
|
||||||
log(2, "Resource merging not implemented, copying src/main/res to $dest")
|
log(2, "----- Merging res/ directory to $dest")
|
||||||
listOf(variant.buildType.name, variant.productFlavor.name, "main").forEach {
|
listOf(variant.buildType.name, variant.productFlavor.name, "main").forEach {
|
||||||
log(2, " CURRENT VARIANT: $it, Copying app/src/$it/res into $dest")
|
log(2, " Current variant: $it")
|
||||||
|
|
||||||
val fromDir = File("src/$it/res")
|
val fromDir = File("src/$it/res")
|
||||||
KFiles.findRecursively(fromDir).forEach {
|
KFiles.findRecursively(fromDir).forEach {
|
||||||
val fromFile = File(fromDir, it)
|
val fromFile = File(fromDir, it)
|
||||||
val toFile = File(dest, it)
|
val toFile = File(dest, it)
|
||||||
if (! toFile.exists()) {
|
if (! toFile.exists()) {
|
||||||
log(2, " Copy $it to $toFile")
|
log(2, " Merge status for $it: COPY")
|
||||||
toFile.parentFile.mkdirs()
|
toFile.parentFile.mkdirs()
|
||||||
Files.copy(Paths.get(fromFile.absolutePath), Paths.get(toFile.absolutePath))
|
Files.copy(Paths.get(fromFile.absolutePath), Paths.get(toFile.absolutePath))
|
||||||
} else {
|
} else {
|
||||||
val fileMerger = fileMergers.first { it.canMerge(fromFile, toFile) }
|
val fileMerger = fileMergers.first { it.canMerge(fromFile, toFile) }
|
||||||
|
log(2, " Merge status for $it: MERGE using $fileMerger")
|
||||||
fileMerger.doMerge(fromFile, toFile)
|
fileMerger.doMerge(fromFile, toFile)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue