Skip to content

Commit c28951d

Browse files
authored
Improve efficiency of incremental builds when building bwc distributions (#118713) (#119018)
(cherry picked from commit 1f4fef1) # Conflicts: # build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionBwcSetupPlugin.java
1 parent aeda3ed commit c28951d

File tree

1 file changed

+24
-9
lines changed

1 file changed

+24
-9
lines changed

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionBwcSetupPlugin.java

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@
1717
import org.gradle.api.Plugin;
1818
import org.gradle.api.Project;
1919
import org.gradle.api.Task;
20+
import org.gradle.api.file.FileSystemOperations;
2021
import org.gradle.api.file.ProjectLayout;
2122
import org.gradle.api.model.ObjectFactory;
2223
import org.gradle.api.plugins.JvmToolchainsPlugin;
2324
import org.gradle.api.provider.Provider;
2425
import org.gradle.api.provider.ProviderFactory;
25-
import org.gradle.api.tasks.Copy;
2626
import org.gradle.api.tasks.TaskProvider;
2727
import org.gradle.jvm.toolchain.JavaToolchainService;
2828
import org.gradle.language.base.plugins.LifecycleBasePlugin;
@@ -53,11 +53,17 @@ public class InternalDistributionBwcSetupPlugin implements Plugin<Project> {
5353
private final ObjectFactory objectFactory;
5454
private ProviderFactory providerFactory;
5555
private JavaToolchainService toolChainService;
56+
private FileSystemOperations fileSystemOperations;
5657

5758
@Inject
58-
public InternalDistributionBwcSetupPlugin(ObjectFactory objectFactory, ProviderFactory providerFactory) {
59+
public InternalDistributionBwcSetupPlugin(
60+
ObjectFactory objectFactory,
61+
ProviderFactory providerFactory,
62+
FileSystemOperations fileSystemOperations
63+
) {
5964
this.objectFactory = objectFactory;
6065
this.providerFactory = providerFactory;
66+
this.fileSystemOperations = fileSystemOperations;
6167
}
6268

6369
@Override
@@ -75,7 +81,8 @@ public void apply(Project project) {
7581
providerFactory,
7682
objectFactory,
7783
toolChainService,
78-
isCi
84+
isCi,
85+
fileSystemOperations
7986
);
8087
});
8188
}
@@ -87,7 +94,8 @@ private static void configureBwcProject(
8794
ProviderFactory providerFactory,
8895
ObjectFactory objectFactory,
8996
JavaToolchainService toolChainService,
90-
Boolean isCi
97+
Boolean isCi,
98+
FileSystemOperations fileSystemOperations
9199
) {
92100
ProjectLayout layout = project.getLayout();
93101
Provider<BwcVersions.UnreleasedVersionInfo> versionInfoProvider = providerFactory.provider(() -> versionInfo);
@@ -119,11 +127,18 @@ private static void configureBwcProject(
119127
List<DistributionProject> distributionProjects = resolveArchiveProjects(checkoutDir.get(), bwcVersion.get());
120128

121129
// Setup gradle user home directory
122-
project.getTasks().register("setupGradleUserHome", Copy.class, copy -> {
123-
copy.into(project.getGradle().getGradleUserHomeDir().getAbsolutePath() + "-" + project.getName());
124-
copy.from(project.getGradle().getGradleUserHomeDir().getAbsolutePath(), copySpec -> {
125-
copySpec.include("gradle.properties");
126-
copySpec.include("init.d/*");
130+
// We don't use a normal `Copy` task here as snapshotting the entire gradle user home is very expensive. This task is cheap, so
131+
// up-to-date checking doesn't buy us much
132+
project.getTasks().register("setupGradleUserHome", task -> {
133+
task.doLast(t -> {
134+
fileSystemOperations.copy(copy -> {
135+
String gradleUserHome = project.getGradle().getGradleUserHomeDir().getAbsolutePath();
136+
copy.into(gradleUserHome + "-" + project.getName());
137+
copy.from(gradleUserHome, copySpec -> {
138+
copySpec.include("gradle.properties");
139+
copySpec.include("init.d/*");
140+
});
141+
});
127142
});
128143
});
129144

0 commit comments

Comments
 (0)