1717import org .gradle .api .Plugin ;
1818import org .gradle .api .Project ;
1919import org .gradle .api .Task ;
20+ import org .gradle .api .file .FileSystemOperations ;
2021import org .gradle .api .file .ProjectLayout ;
2122import org .gradle .api .model .ObjectFactory ;
2223import org .gradle .api .plugins .JvmToolchainsPlugin ;
2324import org .gradle .api .provider .Provider ;
2425import org .gradle .api .provider .ProviderFactory ;
25- import org .gradle .api .tasks .Copy ;
2626import org .gradle .api .tasks .PathSensitivity ;
2727import org .gradle .api .tasks .TaskProvider ;
2828import org .gradle .jvm .toolchain .JavaToolchainService ;
@@ -54,11 +54,17 @@ public class InternalDistributionBwcSetupPlugin implements Plugin<Project> {
5454 private final ObjectFactory objectFactory ;
5555 private ProviderFactory providerFactory ;
5656 private JavaToolchainService toolChainService ;
57+ private FileSystemOperations fileSystemOperations ;
5758
5859 @ Inject
59- public InternalDistributionBwcSetupPlugin (ObjectFactory objectFactory , ProviderFactory providerFactory ) {
60+ public InternalDistributionBwcSetupPlugin (
61+ ObjectFactory objectFactory ,
62+ ProviderFactory providerFactory ,
63+ FileSystemOperations fileSystemOperations
64+ ) {
6065 this .objectFactory = objectFactory ;
6166 this .providerFactory = providerFactory ;
67+ this .fileSystemOperations = fileSystemOperations ;
6268 }
6369
6470 @ Override
@@ -76,7 +82,8 @@ public void apply(Project project) {
7682 providerFactory ,
7783 objectFactory ,
7884 toolChainService ,
79- isCi
85+ isCi ,
86+ fileSystemOperations
8087 );
8188 });
8289 }
@@ -88,7 +95,8 @@ private static void configureBwcProject(
8895 ProviderFactory providerFactory ,
8996 ObjectFactory objectFactory ,
9097 JavaToolchainService toolChainService ,
91- Boolean isCi
98+ Boolean isCi ,
99+ FileSystemOperations fileSystemOperations
92100 ) {
93101 ProjectLayout layout = project .getLayout ();
94102 Provider <BwcVersions .UnreleasedVersionInfo > versionInfoProvider = providerFactory .provider (() -> versionInfo );
@@ -120,11 +128,18 @@ private static void configureBwcProject(
120128 List <DistributionProject > distributionProjects = resolveArchiveProjects (checkoutDir .get (), bwcVersion .get ());
121129
122130 // Setup gradle user home directory
123- project .getTasks ().register ("setupGradleUserHome" , Copy .class , copy -> {
124- copy .into (project .getGradle ().getGradleUserHomeDir ().getAbsolutePath () + "-" + project .getName ());
125- copy .from (project .getGradle ().getGradleUserHomeDir ().getAbsolutePath (), copySpec -> {
126- copySpec .include ("gradle.properties" );
127- copySpec .include ("init.d/*" );
131+ // We don't use a normal `Copy` task here as snapshotting the entire gradle user home is very expensive. This task is cheap, so
132+ // up-to-date checking doesn't buy us much
133+ project .getTasks ().register ("setupGradleUserHome" , task -> {
134+ task .doLast (t -> {
135+ fileSystemOperations .copy (copy -> {
136+ String gradleUserHome = project .getGradle ().getGradleUserHomeDir ().getAbsolutePath ();
137+ copy .into (gradleUserHome + "-" + project .getName ());
138+ copy .from (gradleUserHome , copySpec -> {
139+ copySpec .include ("gradle.properties" );
140+ copySpec .include ("init.d/*" );
141+ });
142+ });
128143 });
129144 });
130145
0 commit comments