From fa23243ff57f375afe254ede0a097c0b4b446ea9 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 24 May 2019 09:52:34 -0700 Subject: [PATCH] Closes #6 Impletemented Gradle project directory-aware getPropertiesFile() function for all loading/saving. --- .../semver/SemverIncrementBuildMetaTask.kt | 2 +- .../erik/gradle/semver/SemverIncrementTask.kt | 2 +- .../erik/gradle/semver/SemverPlugin.kt | 9 +-- .../net/thauvin/erik/gradle/semver/Utils.kt | 76 +++++++++++-------- .../thauvin/erik/gradle/semver/UtilsSpec.kt | 33 +++++++- 5 files changed, 78 insertions(+), 44 deletions(-) diff --git a/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverIncrementBuildMetaTask.kt b/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverIncrementBuildMetaTask.kt index a48e5d7..8a0628c 100644 --- a/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverIncrementBuildMetaTask.kt +++ b/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverIncrementBuildMetaTask.kt @@ -59,7 +59,7 @@ open class SemverIncrementBuildMetaTask @Inject constructor( version.buildMeta = buildMeta project.version = version.semver logger.lifecycle("Version: ${project.version}") - Utils.saveProperties(config, version) + Utils.saveProperties(project.projectDir, config, version) } } } diff --git a/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverIncrementTask.kt b/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverIncrementTask.kt index 090580f..24cb10c 100644 --- a/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverIncrementTask.kt +++ b/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverIncrementTask.kt @@ -57,6 +57,6 @@ open class SemverIncrementTask @Inject constructor( isPatch = type == SemverConfig.DEFAULT_PATCH_KEY) project.version = version.semver logger.lifecycle("Version: ${project.version}") - Utils.saveProperties(config, version) + Utils.saveProperties(project.projectDir, config, version) } } diff --git a/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverPlugin.kt b/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverPlugin.kt index a6dca00..d346cb7 100644 --- a/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverPlugin.kt +++ b/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverPlugin.kt @@ -36,7 +36,6 @@ import org.gradle.api.GradleException import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.util.GradleVersion -import java.io.File class SemverPlugin : Plugin { private val simpleName = SemverPlugin::class.simpleName @@ -59,11 +58,7 @@ class SemverPlugin : Plugin { } private fun afterEvaluate(project: Project) { - val propsFile = if (File(config.properties).isAbsolute) { - File(config.properties) - } else { - File("${project.projectDir}${File.separator}${config.properties}") - } + val propsFile = Utils.getPropertiesFile(project.projectDir, config.properties) if (project.version != "unspecified") { project.logger.warn( @@ -93,7 +88,7 @@ class SemverPlugin : Plugin { if (!hasReqProps || !isFile) { project.logger.info("[$simpleName] Saving version properties to `$absoluteFile`.") - Utils.saveProperties(config, version) + Utils.saveProperties(project.projectDir, config, version) } } } diff --git a/src/main/kotlin/net/thauvin/erik/gradle/semver/Utils.kt b/src/main/kotlin/net/thauvin/erik/gradle/semver/Utils.kt index c4da2b1..7c99b01 100644 --- a/src/main/kotlin/net/thauvin/erik/gradle/semver/Utils.kt +++ b/src/main/kotlin/net/thauvin/erik/gradle/semver/Utils.kt @@ -66,6 +66,14 @@ object Utils { return true } + fun getPropertiesFile(projectDir: File, propsFile: String): File { + return if (File(propsFile).isAbsolute) { + File(propsFile) + } else { + File(projectDir, propsFile) + } + } + fun loadProperties(file: File): Properties { var isNew = false val props = Properties() @@ -197,41 +205,45 @@ object Utils { return true } - fun saveProperties(config: SemverConfig, version: Version) { - val propsFile = File(config.properties) + fun saveProperties(projectDir: File, config: SemverConfig, version: Version) { + val propsFile = getPropertiesFile(projectDir, config.properties) SortedProperties().apply { - propsFile.apply { - if (canReadFile()) { - FileInputStream(this).reader().use { load(it) } - } else { - createNewFile() - } - - put(config.semverKey, version.semver) - put(config.majorKey, version.major.toString()) - put(config.minorKey, version.minor.toString()) - put(config.patchKey, version.patch.toString()) - put(config.preReleaseKey, version.preRelease) - put(config.buildMetaKey, version.buildMeta) - put(config.semverKey, version.semver) - - put(config.buildMetaPrefixKey, version.buildMetaPrefix, - version.buildMetaPrefix != Version.DEFAULT_BUILDMETA_PREFIX || - containsKey(config.buildMetaPrefixKey)) - put(config.preReleasePrefixKey, version.preReleasePrefix, - version.preReleasePrefix != Version.DEFAULT_PRERELEASE_PREFIX || - containsKey(config.preReleasePrefixKey)) - put(config.separatorKey, version.separator, - version.separator != Version.DEFAULT_SEPARATOR || - containsKey(config.separatorKey)) - - if (canWrite()) { - FileOutputStream(this).writer().use { - store(it, "Generated by the Semver Plugin for Gradle") + try { + propsFile.apply { + if (canReadFile()) { + FileInputStream(this).reader().use { load(it) } + } else { + createNewFile() + } + + put(config.semverKey, version.semver) + put(config.majorKey, version.major.toString()) + put(config.minorKey, version.minor.toString()) + put(config.patchKey, version.patch.toString()) + put(config.preReleaseKey, version.preRelease) + put(config.buildMetaKey, version.buildMeta) + put(config.semverKey, version.semver) + + put(config.buildMetaPrefixKey, version.buildMetaPrefix, + version.buildMetaPrefix != Version.DEFAULT_BUILDMETA_PREFIX || + containsKey(config.buildMetaPrefixKey)) + put(config.preReleasePrefixKey, version.preReleasePrefix, + version.preReleasePrefix != Version.DEFAULT_PRERELEASE_PREFIX || + containsKey(config.preReleasePrefixKey)) + put(config.separatorKey, version.separator, + version.separator != Version.DEFAULT_SEPARATOR || + containsKey(config.separatorKey)) + + if (canWrite()) { + FileOutputStream(this).writer().use { + store(it, "Generated by the Semver Plugin for Gradle") + } + } else { + throw GradleException() } - } else { - throw GradleException("Unable to write version to: `$absoluteFile`") } + } catch (e: Exception) { + throw GradleException("Unable to write version to: `${propsFile.absoluteFile}`") } } } diff --git a/src/test/kotlin/net/thauvin/erik/gradle/semver/UtilsSpec.kt b/src/test/kotlin/net/thauvin/erik/gradle/semver/UtilsSpec.kt index 2c787e7..7b6a91f 100644 --- a/src/test/kotlin/net/thauvin/erik/gradle/semver/UtilsSpec.kt +++ b/src/test/kotlin/net/thauvin/erik/gradle/semver/UtilsSpec.kt @@ -48,12 +48,13 @@ object UtilsSpec : Spek({ val version = Version() val config = SemverConfig() val propsFile = File("test.properties") + val projectDir = File("./") lateinit var props: Properties Scenario("Save/Load Properties") { When("saving the property") { config.properties = propsFile.name - Utils.saveProperties(config, version) + Utils.saveProperties(projectDir, config, version) } Then("properties file should exists and be readable") { @@ -115,7 +116,7 @@ object UtilsSpec : Spek({ } When("saving properties") { - Utils.saveProperties(config, version) + Utils.saveProperties(projectDir, config, version) } lateinit var newProps: Properties @@ -196,10 +197,36 @@ object UtilsSpec : Spek({ Then("saving the locked properties file") { assertFailsWith { - Utils.saveProperties(config, version) + Utils.saveProperties(projectDir, config, version) } propsLocked.delete() } } + + Scenario("Save/Load Properties in foo") { + lateinit var fooDir: File + lateinit var fooProps: File + When("saving the foo property") { + fooDir = File("foo") + fooDir.mkdir() + fooProps = File(fooDir, propsFile.name) + config.properties = fooProps.absolutePath + Utils.saveProperties(projectDir, config, version) + } + + Then("foo properties file should exists and be readable") { + assertEquals(fooProps.canReadFile(), fooProps.canRead() && fooProps.isFile) + } + + When("loading the foo properties file") { + props = Utils.loadProperties(fooProps) + fooProps.delete() + fooDir.delete() + } + + Then("version in foo properties should be the same") { + assertEquals(props.getProperty(config.semverKey), version.semver) + } + } } })