fun main()

in tools/src/main/kotlin/jetbrains/exodus/env/Reflect.kt [38:123]


fun main(args: Array<String>) {
    if (args.isEmpty()) {
        printUsage()
    }
    var envPath: String? = null
    var envPath2: String? = null
    var dumpUtilizationToFile: String? = null
    var hasOptions = false
    var collectLogStats = false
    var validateRoots = false
    var traverse = false
    var copy = false
    var forcePrefixing = false
    var utilizationInfo = false
    var persistentEntityStoreInfo = false
    val files2Clean = LinkedHashSet<String>()
    for (arg in args) {
        if (arg.startsWith('-')) {
            hasOptions = true
            when (arg.lowercase().substring(1)) {
                "ls" -> collectLogStats = true
                "r" -> validateRoots = true
                "t" -> traverse = true
                "c" -> copy = true
                "cp" -> {
                    copy = true; forcePrefixing = true
                }

                "u" -> utilizationInfo = true
                "p" -> persistentEntityStoreInfo = true
                else -> when {
                    arg.startsWith("-cl") -> files2Clean.add(arg.substring(3))
                    arg.startsWith("-d") -> dumpUtilizationToFile = arg.substring(2)
                    else -> printUsage()
                }
            }
        } else {
            if (envPath == null) {
                envPath = arg
            } else {
                envPath2 = arg
                break
            }
        }
    }
    if (envPath == null || copy && envPath2 == null) {
        printUsage()
    }

    println("Investigating $envPath")

    try {
        val reflect = Reflect(File(envPath))
        if (files2Clean.size > 0) {
            for (file in files2Clean) {
                reflect.cleanFile(file)
            }
        }
        if (!hasOptions) {
            reflect.collectLogStats()
            exitProcess(reflect.traverse(dumpUtilizationToFile, persistentEntityStoreInfo))
        } else {
            if (validateRoots) {
                reflect.roots()
            }
            if (collectLogStats) {
                reflect.collectLogStats()
            }
            if (traverse) {
                exitProcess(reflect.traverse(dumpUtilizationToFile, persistentEntityStoreInfo))
            }
            if (copy) {
                reflect.env.copyTo(File(envPath2), forcePrefixing) {
                    println(it)
                }
            }
            if (utilizationInfo) {
                reflect.spaceInfoFromUtilization()
            }
        }
    } catch (t: Throwable) {
        println(t)
        exitProcess(-1)
    }
    exitProcess(0)
}