Skip to content

Commit 9dcbbde

Browse files
committed
chore: relace project.exec with ExecOperations
1 parent 70c75a5 commit 9dcbbde

File tree

11 files changed

+66
-33
lines changed

11 files changed

+66
-33
lines changed

plugins/gettext-plugin/src/main/kotlin/com/github/vlsi/gradle/gettext/BaseGettextEditTask.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import java.io.File
2424
import java.nio.charset.StandardCharsets
2525
import javax.inject.Inject
2626

27-
open class BaseGettextEditTask @Inject constructor(
27+
abstract class BaseGettextEditTask @Inject constructor(
2828
objects: ObjectFactory
2929
) : BaseGettextTask(objects) {
3030
@Input

plugins/gettext-plugin/src/main/kotlin/com/github/vlsi/gradle/gettext/BaseGettextTask.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,15 @@ import org.gradle.api.DefaultTask
2020
import org.gradle.api.model.ObjectFactory
2121
import org.gradle.api.tasks.Input
2222
import org.gradle.kotlin.dsl.property
23+
import org.gradle.process.ExecOperations
2324
import javax.inject.Inject
2425

25-
open class BaseGettextTask @Inject constructor(
26+
abstract class BaseGettextTask @Inject constructor(
2627
objects: ObjectFactory
2728
) : DefaultTask() {
2829
@Input
2930
val executable = objects.property<String>()
31+
32+
@get:Inject
33+
protected abstract val execOperations: ExecOperations
3034
}

plugins/gettext-plugin/src/main/kotlin/com/github/vlsi/gradle/gettext/GettextTask.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ abstract class GettextTask @Inject constructor(
7676
}
7777

7878
val cmd = executable.get()
79-
project.exec {
79+
execOperations.exec {
8080
executable = cmd
8181
for (keyword in keywords.get()) {
8282
args("-k$keyword")

plugins/gettext-plugin/src/main/kotlin/com/github/vlsi/gradle/gettext/MsgAttribTask.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import org.gradle.work.InputChanges
3131
import java.io.File
3232
import javax.inject.Inject
3333

34-
open class MsgAttribTask @Inject constructor(
34+
abstract class MsgAttribTask @Inject constructor(
3535
objects: ObjectFactory
3636
) : BaseGettextEditTask(objects) {
3737
@InputFiles
@@ -67,7 +67,7 @@ open class MsgAttribTask @Inject constructor(
6767
continue
6868
}
6969
logger.debug("Processing {} with {} {}", po.file, cmd, arg)
70-
project.exec {
70+
execOperations.exec {
7171
executable = cmd
7272
args("--output-file=${outFile.absolutePath}")
7373
args(arg)

plugins/gettext-plugin/src/main/kotlin/com/github/vlsi/gradle/gettext/MsgFmtTask.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ import java.io.File
3636
import java.nio.charset.Charset
3737
import javax.inject.Inject
3838

39-
open class MsgFmtTask @Inject constructor(
39+
abstract class MsgFmtTask @Inject constructor(
4040
objects: ObjectFactory
4141
) : BaseGettextTask(objects) {
4242
@InputFiles
@@ -102,7 +102,7 @@ open class MsgFmtTask @Inject constructor(
102102
logger.debug("Processing {} with {} {}", po.file, cmd, arg)
103103
project.delete(tmpDir)
104104
tmpDir.mkdirs()
105-
project.exec {
105+
execOperations.exec {
106106
executable = cmd
107107
if (format.get() == OutputFormat.JAVA) {
108108
args("--java2")

plugins/gettext-plugin/src/main/kotlin/com/github/vlsi/gradle/gettext/MsgMergeTask.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import org.gradle.work.InputChanges
3232
import java.io.File
3333
import javax.inject.Inject
3434

35-
open class MsgMergeTask @Inject constructor(
35+
abstract class MsgMergeTask @Inject constructor(
3636
objects: ObjectFactory
3737
) : BaseGettextEditTask(objects) {
3838
@InputFiles
@@ -72,7 +72,7 @@ open class MsgMergeTask @Inject constructor(
7272
continue
7373
}
7474
logger.debug("Processing {} with {} {}", po.file, cmd, arg)
75-
project.exec {
75+
execOperations.exec {
7676
executable = cmd
7777
args("--output-file=${outFile.absolutePath}")
7878
args("--quiet")

plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/PromoteSvnRelease.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
package com.github.vlsi.gradle.release
1818

1919
import com.github.vlsi.gradle.release.svn.LsDepth
20-
import com.github.vlsi.gradle.release.svn.Svn
2120
import org.gradle.api.tasks.Input
21+
import org.gradle.api.tasks.Internal
2222
import org.gradle.kotlin.dsl.property
2323
import org.gradle.kotlin.dsl.the
2424
import org.gradle.work.InputChanges
@@ -31,21 +31,23 @@ abstract class PromoteSvnRelease : SvnmuccTask() {
3131
@Input
3232
val useCpWorkaround = project.objects.property<Boolean>().convention(true)
3333

34+
@Internal
35+
private val ext = project.the<ReleaseExtension>()
36+
3437
override fun message() =
3538
project.the<ReleaseExtension>().run {
3639
"Promoting ${componentName.get()} ${rcTag.get()} -> ${releaseTag.get()} to release area"
3740
}
3841

3942
override fun operations(inputChanges: InputChanges): List<SvnOperation> {
4043
return mutableListOf<SvnOperation>().apply {
41-
val ext = project.the<ReleaseExtension>()
4244
val svnDist = ext.svnDist
4345
val stageFolder = svnDist.stageFolder.get()
4446
val releaseFolder = svnDist.releaseFolder.get()
4547

4648
val subfolders = svnDist.releaseSubfolder.get()
4749

48-
val entries = Svn(project, repository.get()).ls {
50+
val entries = svnClient(repository.get()).ls {
4951
withCredentials()
5052
folders.add(stageFolder)
5153
depth = LsDepth.INFINITY

plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/RemoveStaleArtifactsTask.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ abstract class RemoveStaleArtifactsTask @Inject constructor(
6868

6969
override fun operations(inputChanges: InputChanges): List<SvnOperation> {
7070
val svnUri = repository.get()
71-
val entries = Svn(project, svnUri).ls {
71+
val entries = svnClient(svnUri).ls {
7272
withCredentials()
7373
folders.addAll(foldersToList.get())
7474
}

plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/StageVoteReleasePlugin.kt

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import org.gradle.api.GradleException
3232
import org.gradle.api.Plugin
3333
import org.gradle.api.Project
3434
import org.gradle.api.Task
35+
import org.gradle.api.logging.Logger
3536
import org.gradle.api.publish.PublishingExtension
3637
import org.gradle.api.publish.maven.plugins.MavenPublishPlugin
3738
import org.gradle.api.publish.maven.tasks.GenerateMavenPom
@@ -55,12 +56,16 @@ import org.gradle.kotlin.dsl.withType
5556
import org.gradle.language.base.plugins.LifecycleBasePlugin
5657
import org.gradle.plugins.signing.SigningExtension
5758
import org.gradle.plugins.signing.SigningPlugin
59+
import org.gradle.process.ExecOperations
5860
import java.io.File
5961
import java.net.URI
6062
import java.nio.charset.StandardCharsets
6163
import javax.inject.Inject
6264

63-
class StageVoteReleasePlugin @Inject constructor(private val instantiator: Instantiator) :
65+
class StageVoteReleasePlugin @Inject constructor(
66+
private val instantiator: Instantiator,
67+
private val execOperations: ExecOperations,
68+
) :
6469
Plugin<Project> {
6570
companion object {
6671
@Deprecated(replaceWith = ReplaceWith("StageVoteReleasePlugin.RELEASE_PARAMS_EXTENSION_NAME"), message = "There are multiple extensions, so prefer clarified name")
@@ -653,6 +658,7 @@ class StageVoteReleasePlugin @Inject constructor(private val instantiator: Insta
653658
val releaseExt = project.the<ReleaseExtension>()
654659

655660
val voteMailFile = layout.buildDirectory.file("$PREPARE_VOTE_TASK_NAME/mail.txt")
661+
val projectDir = layout.projectDirectory
656662
outputs.file(file(voteMailFile))
657663
doLast {
658664
val nexusPublish = project.the<NexusPublishExtension>()
@@ -670,7 +676,7 @@ class StageVoteReleasePlugin @Inject constructor(private val instantiator: Insta
670676
.let { it.replacePath(it.path + "/" + svnDist.stageFolder.get()) }
671677

672678
val (stagedFiles, checksums) = if (releaseExt.svnDistEnabled.get()) {
673-
fetchSvnArtifacts(project, svnStagingUri, svnDist)
679+
fetchSvnArtifacts(project, execOperations, logger, projectDir.asFile, svnStagingUri, svnDist)
674680
} else {
675681
Pair(listOf(), mapOf())
676682
}
@@ -708,10 +714,13 @@ class StageVoteReleasePlugin @Inject constructor(private val instantiator: Insta
708714

709715
private fun fetchSvnArtifacts(
710716
project: Project,
717+
execOperations: ExecOperations,
718+
logger: Logger,
719+
projectDir: File,
711720
svnStagingUri: URI,
712721
svnDist: SvnDistConfig
713722
): Pair<List<SvnEntry>, Map<String, String>> {
714-
val svn = Svn(project, svnStagingUri).apply {
723+
val svn = Svn(execOperations, logger, projectDir, svnStagingUri).apply {
715724
username = svnDist.credentials.username(project)
716725
password = svnDist.credentials.password(project)
717726
}

plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/SvnmuccTask.kt

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,40 +16,48 @@
1616
*/
1717
package com.github.vlsi.gradle.release
1818

19-
import com.github.vlsi.gradle.properties.dsl.stringProperty
2019
import com.github.vlsi.gradle.properties.dsl.toBool
20+
import com.github.vlsi.gradle.release.svn.Svn
2121
import com.github.vlsi.gradle.release.svn.SvnCredentials
2222
import java.io.ByteArrayOutputStream
2323
import java.io.File
2424
import java.net.URI
2525
import javax.inject.Inject
2626
import org.gradle.api.DefaultTask
27-
import org.gradle.api.file.RegularFileProperty
2827
import org.gradle.api.tasks.Input
2928
import org.gradle.api.tasks.Internal
3029
import org.gradle.api.tasks.TaskAction
3130
import org.gradle.kotlin.dsl.property
3231
import org.gradle.kotlin.dsl.the
32+
import org.gradle.process.ExecOperations
3333
import org.gradle.process.ExecSpec
3434
import org.gradle.work.InputChanges
3535

3636
abstract class SvnmuccTask @Inject constructor() : DefaultTask() {
37+
@get:Inject
38+
abstract val execOperations: ExecOperations
39+
3740
@Input
3841
val repository = project.objects.property<URI>()
3942
.convention(project.provider {
4043
project.the<ReleaseExtension>().svnDist.url.get()
4144
})
4245

46+
@Input
47+
protected val projectDir = project.layout.projectDirectory
48+
4349
abstract fun operations(inputChanges: InputChanges): List<SvnOperation>
4450
abstract fun message(): String
4551

52+
// TODO: remove project access at execution time
4653
protected fun SvnCredentials.withCredentials() {
4754
project.the<ReleaseExtension>().svnDist.credentials {
4855
this@withCredentials.username = username(project)
4956
this@withCredentials.password = password(project)
5057
}
5158
}
5259

60+
// TODO: remove project access at execution time
5361
protected fun ExecSpec.svnCredentials() {
5462
project.the<ReleaseExtension>().svnDist.credentials {
5563
username(project)?.let { args("--username", it) }
@@ -60,31 +68,38 @@ abstract class SvnmuccTask @Inject constructor() : DefaultTask() {
6068
fun exists(path: String): Boolean {
6169
val os = ByteArrayOutputStream()
6270
val absolutePath = "${repository.get()}/$path"
63-
val result = project.exec {
64-
workingDir = project.projectDir
71+
val result = execOperations.exec {
72+
workingDir = projectDir.asFile
6573
commandLine("svn", "ls", "--depth", "empty", absolutePath)
6674
svnCredentials()
6775
isIgnoreExitValue = true
6876
errorOutput = os
6977
}
7078
if (result.exitValue == 0) {
71-
project.logger.debug("Directory {} exists in SVN", absolutePath)
79+
logger.debug("Directory {} exists in SVN", absolutePath)
7280
return true
7381
}
7482

7583
val message = os.toString() // Default encoding is expected
7684
if (message.contains("E200009")) {
7785
// E200009: Could not list all targets because some targets don't exist
78-
project.logger.debug("Directory {} does not exist in SVN", absolutePath)
86+
logger.debug("Directory {} does not exist in SVN", absolutePath)
7987
} else {
80-
project.logger.warn("Unable to check existence of {}. Error: {}", absolutePath, message)
88+
logger.warn("Unable to check existence of {}. Error: {}", absolutePath, message)
8189
}
8290
return false
8391
}
8492

8593
@Internal
8694
protected val commandsFile = project.layout.buildDirectory.file("svnmucc/$name.txt")
8795

96+
@Input
97+
protected val asfDryRun = project.objects.property<Boolean>()
98+
.convention(project.providers.gradleProperty("asfDryRun").map { it.toBool() })
99+
100+
protected fun svnClient(uri: URI) =
101+
Svn(execOperations, logger, projectDir.asFile, uri)
102+
88103
@TaskAction
89104
fun mucc(inputChanges: InputChanges) {
90105
logger.debug(
@@ -120,7 +135,7 @@ abstract class SvnmuccTask @Inject constructor() : DefaultTask() {
120135
commandsFile.writeText(commands)
121136

122137
val commitMessage = message()
123-
if (project.stringProperty("asfDryRun").toBool()) {
138+
if (asfDryRun.get()) {
124139
logger.lifecycle(
125140
"Dry run svnmucc. root={}, message={}, commands:\n{}",
126141
repository.get(),
@@ -139,8 +154,8 @@ abstract class SvnmuccTask @Inject constructor() : DefaultTask() {
139154
commitMessage,
140155
commands
141156
)
142-
project.exec {
143-
workingDir = project.projectDir
157+
execOperations.exec {
158+
workingDir = projectDir.asFile
144159
commandLine("svnmucc", "--non-interactive", "--root-url", repository.get())
145160
svnCredentials()
146161
args("--extra-args", commandsFile)

0 commit comments

Comments
 (0)