Skip to content

Commit 074df5d

Browse files
committed
chore: relace project.exec with ExecOperations
1 parent f679f3a commit 074df5d

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: 4 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,22 @@ abstract class PromoteSvnRelease : SvnmuccTask() {
3131
@Input
3232
val useCpWorkaround = project.objects.property<Boolean>().convention(true)
3333

34+
private val ext = project.the<ReleaseExtension>()
35+
3436
override fun message() =
3537
project.the<ReleaseExtension>().run {
3638
"Promoting ${componentName.get()} ${rcTag.get()} -> ${releaseTag.get()} to release area"
3739
}
3840

3941
override fun operations(inputChanges: InputChanges): List<SvnOperation> {
4042
return mutableListOf<SvnOperation>().apply {
41-
val ext = project.the<ReleaseExtension>()
4243
val svnDist = ext.svnDist
4344
val stageFolder = svnDist.stageFolder.get()
4445
val releaseFolder = svnDist.releaseFolder.get()
4546

4647
val subfolders = svnDist.releaseSubfolder.get()
4748

48-
val entries = Svn(project, repository.get()).ls {
49+
val entries = svnClient(repository.get()).ls {
4950
withCredentials()
5051
folders.add(stageFolder)
5152
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: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,40 +16,49 @@
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
28+
import org.gradle.api.tasks.InputDirectory
2929
import org.gradle.api.tasks.Internal
3030
import org.gradle.api.tasks.TaskAction
3131
import org.gradle.kotlin.dsl.property
3232
import org.gradle.kotlin.dsl.the
33+
import org.gradle.process.ExecOperations
3334
import org.gradle.process.ExecSpec
3435
import org.gradle.work.InputChanges
3536

3637
abstract class SvnmuccTask @Inject constructor() : DefaultTask() {
38+
@get:Inject
39+
abstract val execOperations: ExecOperations
40+
3741
@Input
3842
val repository = project.objects.property<URI>()
3943
.convention(project.provider {
4044
project.the<ReleaseExtension>().svnDist.url.get()
4145
})
4246

47+
@InputDirectory
48+
protected val projectDir = project.layout.projectDirectory
49+
4350
abstract fun operations(inputChanges: InputChanges): List<SvnOperation>
4451
abstract fun message(): String
4552

53+
// TODO: remove project access at execution time
4654
protected fun SvnCredentials.withCredentials() {
4755
project.the<ReleaseExtension>().svnDist.credentials {
4856
this@withCredentials.username = username(project)
4957
this@withCredentials.password = password(project)
5058
}
5159
}
5260

61+
// TODO: remove project access at execution time
5362
protected fun ExecSpec.svnCredentials() {
5463
project.the<ReleaseExtension>().svnDist.credentials {
5564
username(project)?.let { args("--username", it) }
@@ -60,31 +69,38 @@ abstract class SvnmuccTask @Inject constructor() : DefaultTask() {
6069
fun exists(path: String): Boolean {
6170
val os = ByteArrayOutputStream()
6271
val absolutePath = "${repository.get()}/$path"
63-
val result = project.exec {
64-
workingDir = project.projectDir
72+
val result = execOperations.exec {
73+
workingDir = projectDir.asFile
6574
commandLine("svn", "ls", "--depth", "empty", absolutePath)
6675
svnCredentials()
6776
isIgnoreExitValue = true
6877
errorOutput = os
6978
}
7079
if (result.exitValue == 0) {
71-
project.logger.debug("Directory {} exists in SVN", absolutePath)
80+
logger.debug("Directory {} exists in SVN", absolutePath)
7281
return true
7382
}
7483

7584
val message = os.toString() // Default encoding is expected
7685
if (message.contains("E200009")) {
7786
// E200009: Could not list all targets because some targets don't exist
78-
project.logger.debug("Directory {} does not exist in SVN", absolutePath)
87+
logger.debug("Directory {} does not exist in SVN", absolutePath)
7988
} else {
80-
project.logger.warn("Unable to check existence of {}. Error: {}", absolutePath, message)
89+
logger.warn("Unable to check existence of {}. Error: {}", absolutePath, message)
8190
}
8291
return false
8392
}
8493

8594
@Internal
8695
protected val commandsFile = project.layout.buildDirectory.file("svnmucc/$name.txt")
8796

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

122138
val commitMessage = message()
123-
if (project.stringProperty("asfDryRun").toBool()) {
139+
if (asfDryRun.get()) {
124140
logger.lifecycle(
125141
"Dry run svnmucc. root={}, message={}, commands:\n{}",
126142
repository.get(),
@@ -139,8 +155,8 @@ abstract class SvnmuccTask @Inject constructor() : DefaultTask() {
139155
commitMessage,
140156
commands
141157
)
142-
project.exec {
143-
workingDir = project.projectDir
158+
execOperations.exec {
159+
workingDir = projectDir.asFile
144160
commandLine("svnmucc", "--non-interactive", "--root-url", repository.get())
145161
svnCredentials()
146162
args("--extra-args", commandsFile)

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

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,11 @@ import java.net.URI
2626
import java.time.OffsetDateTime
2727
import org.gradle.api.GradleException
2828
import org.gradle.api.Project
29+
import org.gradle.api.logging.Logger
30+
import org.gradle.process.ExecOperations
31+
import java.io.File
2932

30-
class Svn(val project: Project, val uri: URI) : SvnCredentials {
33+
class Svn(val execOperations: ExecOperations, val logger: Logger, val projectDir: File, val uri: URI) : SvnCredentials {
3134
override var username: String? = null
3235
override var password: String? = null
3336

@@ -64,12 +67,12 @@ class Svn(val project: Project, val uri: URI) : SvnCredentials {
6467
val file = opts.file
6568

6669
val revisionSuffix = opts.revision?.let { "@$it" } ?: ""
67-
project.logger.lifecycle("Fetching {}/{}{}", uri, file, revisionSuffix)
70+
logger.lifecycle("Fetching {}/{}{}", uri, file, revisionSuffix)
6871

6972
val stdout = ByteArrayOutputStream()
7073
val stderr = ByteArrayOutputStream()
71-
val result = project.exec {
72-
workingDir = project.projectDir
74+
val result = execOperations.exec {
75+
workingDir = projectDir
7376
commandLine("svn", "cat")
7477
opts.username?.let { args("--username", it) }
7578
opts.password?.let { args("--password", it) }
@@ -97,12 +100,12 @@ class Svn(val project: Project, val uri: URI) : SvnCredentials {
97100
} else {
98101
"contents"
99102
}
100-
project.logger.lifecycle("Listing SVN {} at {}{}", contents, uri, revisionSuffix)
103+
logger.lifecycle("Listing SVN {} at {}{}", contents, uri, revisionSuffix)
101104

102105
val stdout = ByteArrayOutputStream()
103106
val stderr = ByteArrayOutputStream()
104-
val result = project.exec {
105-
workingDir = project.projectDir
107+
val result = execOperations.exec {
108+
workingDir = projectDir
106109
commandLine("svn", "ls", "--xml", "--depth", opts.depth.name.toLowerCase())
107110
for (folder in opts.folders) {
108111
args("$uri/$folder/")

0 commit comments

Comments
 (0)