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 .TaskProvider ;
2727import org .gradle .jvm .toolchain .JavaToolchainService ;
2828import 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