All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.triplet.gradle.common.utils.Io.kt Maven / Gradle / Ivy

Go to download

Gradle Play Publisher is a plugin that allows you to upload your App Bundle or APK and other app details to the Google Play Store.

There is a newer version: 3.11.0
Show newest version
package com.github.triplet.gradle.common.utils

import org.gradle.kotlin.dsl.support.normaliseLineSeparators
import java.io.File

/** @return this file if it exists, null otherwise */
fun File.orNull(): File? = takeIf { exists() }

/** @return a new file on the same level as this file named [name]. */
fun File.sibling(name: String): File = File(parentFile, name)

/** @return a new file marked with the [marker] for bookkeeping of the original file. */
fun File.marked(marker: String): File = sibling("$nameWithoutExtension.$marker")

/**
 * Returns a new parent file named [parentName] if found, null otherwise.
 *
 * Note: file lookups are inclusive. That is, if the current file is named [parentName], it is
 * returned without looking for true parents.
 *
 * @see [isChildOf], [isDirectChildOf]
 */
fun File.climbUpTo(parentName: String): File? =
        if (name == parentName) this else parentFile?.climbUpTo(parentName)

/**
 * @return true if this file is a child of [parentName], false otherwise
 * @see [climbUpTo], [isDirectChildOf]
 */
fun File.isChildOf(parentName: String): Boolean = parentFile?.climbUpTo(parentName) != null

/**
 * @return true if this file's direct parent (1 level up) is [parentName], false otherwise
 * @see [climbUpTo], [isChildOf]
 */
fun File.isDirectChildOf(parentName: String): Boolean = parentFile?.name == parentName

/** @return this directory after ensuring that it either already exists or was created */
fun File.safeMkdirs(): File = apply {
    val create = { exists() || mkdirs() }
    check(create() || create()) { "Unable to create $this" }
}

/** @return this file after ensuring that it either already exists or was created */
fun File.safeCreateNewFile(): File = apply {
    parentFile.safeMkdirs()

    val create = { exists() || createNewFile() }
    check(create() || create()) { "Unable to create $this" }
}

/** @return this file after ensuring that it has been renamed */
fun File.safeRenameTo(dest: File): File = apply {
    val rename = { renameTo(dest) }
    check(rename() || rename()) { "Unable to rename $this to $dest" }
}

/**
 * Returns the contents of this file trimmed and with line separators normalized, or null if the
 * file is empty.
 */
fun File.readProcessed(): String? = readText().normaliseLineSeparators().trim().nullOrFull()

/** @return this string if it contains content, null otherwise */
fun String?.nullOrFull(): String? = takeUnless { isNullOrBlank() }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy