staging commit
parent
763427af01
commit
4af828484c
@ -0,0 +1,67 @@
|
|||||||
|
package cfig.lazybox
|
||||||
|
|
||||||
|
import cfig.helper.Helper
|
||||||
|
import cfig.helper.Helper.Companion.check_call
|
||||||
|
import org.slf4j.LoggerFactory
|
||||||
|
import java.io.File
|
||||||
|
import java.nio.file.Files
|
||||||
|
import java.nio.file.Paths
|
||||||
|
|
||||||
|
class ImageRelease {
|
||||||
|
companion object {
|
||||||
|
private val log = LoggerFactory.getLogger(ImageRelease::class.java)
|
||||||
|
fun run() {
|
||||||
|
val buildId = Helper.adbCmd("getprop ro.build.id").lowercase()
|
||||||
|
val variant = Helper.adbCmd("getprop ro.build.type")
|
||||||
|
val product = Helper.adbCmd("getprop ro.build.product")
|
||||||
|
val rel = Helper.adbCmd("getprop ro.build.version.release")
|
||||||
|
val increment = Helper.adbCmd("getprop ro.build.version.incremental")
|
||||||
|
val fp = Helper.adbCmd("getprop ro.build.fingerprint")
|
||||||
|
|
||||||
|
val computFacDir = "$product-factory-$buildId"
|
||||||
|
val computFacZip = "$product-factory-$buildId-$increment.zip"
|
||||||
|
val computOtaZip = "$product-ota-$buildId-$increment.zip"
|
||||||
|
val computEmmcZip = "$product-eMMCimg-$buildId-$increment.zip"
|
||||||
|
|
||||||
|
log.info("fingerprint: $fp")
|
||||||
|
log.info("$product-factory-$buildId-$increment -> $product-factory-$buildId")
|
||||||
|
log.info("$product-ota-$buildId-$increment")
|
||||||
|
log.info("$product-eMMCimg-$buildId-$increment")
|
||||||
|
|
||||||
|
//factory
|
||||||
|
if (File("factory.zip").exists()) {
|
||||||
|
"rm -fr factory_image factory_img $computFacDir $computFacZip".check_call()
|
||||||
|
"unzip factory.zip".check_call()
|
||||||
|
val facDir = if (File("factory_img").exists()) {
|
||||||
|
//user
|
||||||
|
"factory_img"
|
||||||
|
} else if (File("factory_image").exists()) {
|
||||||
|
//userdebug
|
||||||
|
"factory_image"
|
||||||
|
} else {
|
||||||
|
throw IllegalStateException("can not find factory image folder")
|
||||||
|
}
|
||||||
|
File(facDir).listFiles()?.filter { it.name.endsWith(".sh") }?.forEach { it.delete() }
|
||||||
|
"cp -v /tftp/flash_platypus.sh $facDir/flash.sh".check_call()
|
||||||
|
"mv -v $facDir $computFacDir".check_call()
|
||||||
|
"zip $computFacZip -r $computFacDir".check_call()
|
||||||
|
"rm -fr $computFacDir".check_call()
|
||||||
|
}
|
||||||
|
|
||||||
|
File("factory.zip").delete()
|
||||||
|
if (File("ota.zip").exists()) {
|
||||||
|
Files.move(Paths.get("ota.zip"), Paths.get(computOtaZip))
|
||||||
|
}
|
||||||
|
if (File("emmc.zip").exists()) {
|
||||||
|
Files.move(Paths.get("emmc.zip"), Paths.get(computEmmcZip))
|
||||||
|
}
|
||||||
|
|
||||||
|
log.info("fingerprint: $fp")
|
||||||
|
log.info("$product-factory-$buildId-$increment -> $product-factory-$buildId")
|
||||||
|
log.info(computFacZip)
|
||||||
|
log.info(computOtaZip)
|
||||||
|
log.info(computEmmcZip)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,148 @@
|
|||||||
|
package cfig.lazybox
|
||||||
|
|
||||||
|
import org.slf4j.LoggerFactory
|
||||||
|
import java.io.BufferedWriter
|
||||||
|
import java.io.File
|
||||||
|
import java.io.FileOutputStream
|
||||||
|
import java.io.FileWriter
|
||||||
|
|
||||||
|
class MountAnalyzer {
|
||||||
|
data class MountInfo(
|
||||||
|
var dev: String = "",
|
||||||
|
var mountPoint: String = "",
|
||||||
|
var fsType: String = "",
|
||||||
|
var flags: String? = null,
|
||||||
|
)
|
||||||
|
|
||||||
|
class MiComparator : Comparator<MountInfo> {
|
||||||
|
override fun compare(p1: MountInfo, p2: MountInfo): Int {
|
||||||
|
var ret = p1.fsType.compareTo(p2.fsType) * 100
|
||||||
|
ret += p1.dev.compareTo(p2.dev) * 10
|
||||||
|
ret += p1.mountPoint.compareTo(p2.mountPoint) * 1
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun run() {
|
||||||
|
val loopApex = mutableListOf<MountInfo>()
|
||||||
|
val dmApex = mutableListOf<MountInfo>()
|
||||||
|
val tmpApex = mutableListOf<MountInfo>()
|
||||||
|
val bootApex = mutableListOf<MountInfo>()
|
||||||
|
val fuseInfo = mutableListOf<MountInfo>()
|
||||||
|
val sysInfo = mutableListOf<MountInfo>()
|
||||||
|
val androidRo = mutableListOf<MountInfo>()
|
||||||
|
val androidRw = mutableListOf<MountInfo>()
|
||||||
|
val otherRw = mutableListOf<MountInfo>()
|
||||||
|
val unknownMi = mutableListOf<MountInfo>()
|
||||||
|
val lines = File("mount.log").readLines()
|
||||||
|
lines.forEachIndexed { n, line ->
|
||||||
|
val regex = Regex("(\\S+)\\s+on\\s+(\\S+)\\s+type\\s+(\\w+)\\s+\\(([^)]*)\\)") // Capture flags
|
||||||
|
val matchResult = regex.find(line)
|
||||||
|
if (matchResult != null) {
|
||||||
|
val dev = matchResult.groupValues[1]
|
||||||
|
val mountPoint = matchResult.groupValues[2]
|
||||||
|
val fsType = matchResult.groupValues[3]
|
||||||
|
val flags =
|
||||||
|
if (matchResult.groupValues.size > 4) matchResult.groupValues[4] else null // Handle no flags
|
||||||
|
val mi = MountInfo(dev, mountPoint, fsType, flags)
|
||||||
|
if (mi.mountPoint.startsWith("/apex") || mi.mountPoint.startsWith("/bootstrap-apex")) {
|
||||||
|
if (mi.mountPoint.startsWith("/bootstrap-apex")) {
|
||||||
|
bootApex.add(mi)
|
||||||
|
} else if (mi.dev.startsWith("/dev/block/loop")) {
|
||||||
|
loopApex.add(mi)
|
||||||
|
} else if (mi.dev.startsWith("/dev/block/dm")) {
|
||||||
|
dmApex.add(mi)
|
||||||
|
} else if (mi.dev.startsWith("tmpfs")) {
|
||||||
|
tmpApex.add(mi)
|
||||||
|
} else {
|
||||||
|
log.info("$fsType: $dev -> $mountPoint")
|
||||||
|
throw IllegalStateException("X1")
|
||||||
|
}
|
||||||
|
} else if (mi.mountPoint.startsWith("/sys/") || mi.mountPoint == "/sys") {
|
||||||
|
sysInfo.add(mi)
|
||||||
|
} else if (mi.fsType == "fuse") {
|
||||||
|
fuseInfo.add(mi)
|
||||||
|
} else {
|
||||||
|
log.info("$fsType: $dev -> $mountPoint")
|
||||||
|
if (mi.flags!!.contains("ro,") or mi.flags!!.contains("ro)")) {
|
||||||
|
androidRo.add(mi)
|
||||||
|
} else if (mi.flags!!.contains("rw,") or mi.flags!!.contains("rw)")) {
|
||||||
|
if (mi.dev.startsWith("/dev/")) {
|
||||||
|
androidRw.add(mi)
|
||||||
|
} else {
|
||||||
|
otherRw.add(mi)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw IllegalStateException("X2")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else { //For lines without flags
|
||||||
|
val regexNoFlags = Regex("(\\S+)\\s+on\\s+(\\S+)\\s+type\\s+(\\w+)")
|
||||||
|
val matchResultNoFlags = regexNoFlags.find(line)
|
||||||
|
if (matchResultNoFlags != null) {
|
||||||
|
val dev = matchResultNoFlags.groupValues[1]
|
||||||
|
val mountPoint = matchResultNoFlags.groupValues[2]
|
||||||
|
val fsType = matchResultNoFlags.groupValues[3]
|
||||||
|
val mi = MountInfo(dev, mountPoint, fsType, null)
|
||||||
|
unknownMi.add(mi)
|
||||||
|
} else {
|
||||||
|
throw IllegalStateException("X3")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} // end-of-lines
|
||||||
|
//sanity check, make sure consistent
|
||||||
|
check(
|
||||||
|
listOf(
|
||||||
|
loopApex,
|
||||||
|
dmApex,
|
||||||
|
tmpApex,
|
||||||
|
bootApex,
|
||||||
|
fuseInfo,
|
||||||
|
sysInfo,
|
||||||
|
androidRo,
|
||||||
|
androidRw,
|
||||||
|
otherRw,
|
||||||
|
unknownMi
|
||||||
|
).sumOf { it.size } == lines.size)
|
||||||
|
//dump
|
||||||
|
val infoNames = listOf(
|
||||||
|
"fusefs",
|
||||||
|
"sysfs",
|
||||||
|
"Android RO",
|
||||||
|
"Android RW",
|
||||||
|
"other Rw",
|
||||||
|
"loop apex",
|
||||||
|
"dm apex",
|
||||||
|
"tmp apex",
|
||||||
|
"boot apex",
|
||||||
|
"unknown"
|
||||||
|
)
|
||||||
|
BufferedWriter(FileWriter(File("sorted_mount.log"))).use { fos ->
|
||||||
|
listOf(
|
||||||
|
fuseInfo,
|
||||||
|
sysInfo,
|
||||||
|
androidRo,
|
||||||
|
androidRw,
|
||||||
|
otherRw,
|
||||||
|
loopApex,
|
||||||
|
dmApex,
|
||||||
|
tmpApex,
|
||||||
|
bootApex,
|
||||||
|
unknownMi
|
||||||
|
).forEachIndexed { n, mis ->
|
||||||
|
mis.sortWith(MiComparator())
|
||||||
|
log.info(infoNames.get(n))
|
||||||
|
fos.write(infoNames.get(n) + "\n")
|
||||||
|
mis.forEachIndexed { index, it ->
|
||||||
|
log.info("[$index] ${it.fsType} : ${it.dev} -> ${it.mountPoint} (${it.flags})")
|
||||||
|
fos.write("#$index | ${it.fsType} | ${it.dev} | ${it.mountPoint} | (${it.flags})\n")
|
||||||
|
}
|
||||||
|
fos.write("\n")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private val log = LoggerFactory.getLogger(MountAnalyzer::class.java)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue