Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix incorrect Gradle root build directory location #11976

Merged
merged 1 commit into from
Jan 23, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
@@ -0,0 +1,44 @@
/*
* Copyright 2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.gradle.api

import org.gradle.integtests.fixtures.AbstractIntegrationSpec
import org.gradle.integtests.fixtures.ToBeFixedForInstantExecution

class GradleBuildScriptExecutionFromSubDirIntegTest extends AbstractIntegrationSpec {

@ToBeFixedForInstantExecution
def "shouldn't create a gradle directory within the invocation directory"() {
buildFile << """
tasks.register("checkDir") {
doLast {
println file("tmp/gradle")
}
}
"""
settingsFile << "include 'tmp'"

when:
def subdir = file("tmp")
subdir.mkdirs()
executer.inDirectory(subdir)
succeeds ':checkDir'

then:
subdir.listFiles().length == 0
}
}
Expand Up @@ -102,6 +102,8 @@
import org.gradle.cache.internal.InMemoryCacheDecoratorFactory;
import org.gradle.cache.internal.ProducerGuard;
import org.gradle.initialization.ProjectAccessListener;
import org.gradle.initialization.layout.BuildLayoutConfiguration;
import org.gradle.initialization.layout.BuildLayoutFactory;
import org.gradle.internal.build.BuildState;
import org.gradle.internal.build.BuildStateRegistry;
import org.gradle.internal.component.external.model.ModuleComponentArtifactMetadata;
Expand Down Expand Up @@ -134,6 +136,7 @@
import org.gradle.util.BuildCommencedTimeProvider;
import org.gradle.util.internal.SimpleMapInterner;

import java.io.File;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
Expand Down Expand Up @@ -314,8 +317,8 @@ RepositoryTransportFactory createRepositoryTransportFactory(StartParameter start
BuildOperationExecutor buildOperationExecutor,
ProducerGuard<ExternalResourceName> producerGuard,
FileResourceRepository fileResourceRepository,
ChecksumService checksumService) {
StartParameterResolutionOverride startParameterResolutionOverride = new StartParameterResolutionOverride(startParameter);
ChecksumService checksumService,
StartParameterResolutionOverride startParameterResolutionOverride) {
return new RepositoryTransportFactory(
resourceConnectorFactories,
progressLoggerFactory,
Expand All @@ -334,8 +337,10 @@ RepositoryBlacklister createRepositoryBlacklister() {
return new ConnectionFailureRepositoryBlacklister();
}

StartParameterResolutionOverride createStartParameterResolutionOverride(StartParameter startParameter) {
return new StartParameterResolutionOverride(startParameter);
StartParameterResolutionOverride createStartParameterResolutionOverride(StartParameter startParameter, BuildLayoutFactory buildLayoutFactory) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you use BuildLayout here? It should be a build scope service created in this same way.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nope, BuildLayout is not available at this stage.

File rootDirectory = buildLayoutFactory.getLayoutFor(new BuildLayoutConfiguration(startParameter)).getRootDirectory();
File gradleDir = new File(rootDirectory, "gradle");
return new StartParameterResolutionOverride(startParameter, gradleDir);
}

DependencyVerificationOverride createDependencyVerificationOverride(StartParameterResolutionOverride startParameterResolutionOverride, BuildOperationExecutor buildOperationExecutor, ChecksumService checksumService) {
Expand Down
Expand Up @@ -18,7 +18,6 @@
import org.gradle.StartParameter;
import org.gradle.api.artifacts.component.ModuleComponentIdentifier;
import org.gradle.api.internal.artifacts.configurations.dynamicversion.CachePolicy;
import org.gradle.internal.hash.ChecksumService;
import org.gradle.api.internal.artifacts.ivyservice.ivyresolve.verification.ChecksumVerificationOverride;
import org.gradle.api.internal.artifacts.ivyservice.ivyresolve.verification.DependencyVerificationOverride;
import org.gradle.api.internal.artifacts.ivyservice.ivyresolve.verification.WriteDependencyVerificationFile;
Expand All @@ -32,6 +31,7 @@
import org.gradle.internal.component.model.ComponentResolveMetadata;
import org.gradle.internal.component.model.ConfigurationMetadata;
import org.gradle.internal.component.model.ModuleSources;
import org.gradle.internal.hash.ChecksumService;
import org.gradle.internal.operations.BuildOperationExecutor;
import org.gradle.internal.resolve.ArtifactResolveException;
import org.gradle.internal.resolve.ModuleVersionResolveException;
Expand All @@ -54,9 +54,11 @@

public class StartParameterResolutionOverride {
private final StartParameter startParameter;
private final File gradleDir;

public StartParameterResolutionOverride(StartParameter startParameter) {
public StartParameterResolutionOverride(StartParameter startParameter, File gradleDir) {
this.startParameter = startParameter;
this.gradleDir = gradleDir;
}

public void applyToCachePolicy(CachePolicy cachePolicy) {
Expand All @@ -75,13 +77,12 @@ public ModuleComponentRepository overrideModuleVersionRepository(ModuleComponent
}

public DependencyVerificationOverride dependencyVerificationOverride(BuildOperationExecutor buildOperationExecutor, ChecksumService checksumService) {
File currentDir = startParameter.getCurrentDir();
List<String> checksums = startParameter.getWriteDependencyVerifications();
if (!checksums.isEmpty()) {
SingleMessageLogger.incubatingFeatureUsed("Dependency verification");
return new WriteDependencyVerificationFile(currentDir, buildOperationExecutor, checksums, checksumService);
return new WriteDependencyVerificationFile(gradleDir, buildOperationExecutor, checksums, checksumService);
} else {
File verificationsFile = DependencyVerificationOverride.dependencyVerificationsFile(currentDir);
File verificationsFile = DependencyVerificationOverride.dependencyVerificationsFile(gradleDir);
if (verificationsFile.exists()) {
SingleMessageLogger.incubatingFeatureUsed("Dependency verification");
return new ChecksumVerificationOverride(buildOperationExecutor, verificationsFile, checksumService);
Expand Down
Expand Up @@ -29,17 +29,8 @@ public ModuleComponentRepository overrideDependencyVerification(ModuleComponentR
}
};

static File dependencyVerificationsFile(File buildDirectory) {
File gradleDir = ensureGradleDirExists(buildDirectory);
return new File(gradleDir, "verification-metadata.xml");
}

static File ensureGradleDirExists(File buildDirectory) {
File gradleDir = new File(buildDirectory, "gradle");
if (!gradleDir.exists()) {
gradleDir.mkdirs();
}
return gradleDir;
static File dependencyVerificationsFile(File gradleDirectory) {
return new File(gradleDirectory, "verification-metadata.xml");
}

ModuleComponentRepository overrideDependencyVerification(ModuleComponentRepository original);
Expand Down
Expand Up @@ -65,14 +65,14 @@ public class WriteDependencyVerificationFile implements DependencyVerificationOv
private static final List<String> DEFAULT_CHECKSUMS = ImmutableList.of("sha1", "sha512");

private final DependencyVerifierBuilder verificationsBuilder = new DependencyVerifierBuilder();
private final File buildDirectory;
private final File gradleDirectory;
private final BuildOperationExecutor buildOperationExecutor;
private final List<String> checksums;
private final Set<ChecksumEntry> entriesToBeWritten = Sets.newLinkedHashSetWithExpectedSize(512);
private final ChecksumService checksumService;

public WriteDependencyVerificationFile(File buildDirectory, BuildOperationExecutor buildOperationExecutor, List<String> checksums, ChecksumService checksumService) {
this.buildDirectory = buildDirectory;
public WriteDependencyVerificationFile(File gradleDirectory, BuildOperationExecutor buildOperationExecutor, List<String> checksums, ChecksumService checksumService) {
this.gradleDirectory = gradleDirectory;
this.buildOperationExecutor = buildOperationExecutor;
this.checksums = validateChecksums(checksums);
this.checksumService = checksumService;
Expand Down Expand Up @@ -115,9 +115,11 @@ public ModuleComponentRepository overrideDependencyVerification(ModuleComponentR
return new DependencyVerifyingModuleComponentRepository(original, this);
}

@SuppressWarnings("ResultOfMethodCallIgnored")
@Override
public void buildFinished(Gradle gradle) {
File verifFile = DependencyVerificationOverride.dependencyVerificationsFile(buildDirectory);
File verifFile = DependencyVerificationOverride.dependencyVerificationsFile(gradleDirectory);
verifFile.getParentFile().mkdirs();
try {
maybeReadExistingFile(verifFile);
computeHashsConcurrently(gradle);
Expand Down
Expand Up @@ -45,7 +45,7 @@ class RepositoryTransportFactoryTest extends Specification {
connectorFactory2.getSupportedProtocols() >> (["protocol2a", "protocol2b"] as Set)
connectorFactory2.getSupportedAuthentication() >> ([] as Set)
List<ResourceConnectorFactory> resourceConnectorFactories = Lists.newArrayList(connectorFactory1, connectorFactory2)
StartParameterResolutionOverride override = new StartParameterResolutionOverride(new StartParameter())
StartParameterResolutionOverride override = new StartParameterResolutionOverride(new StartParameter(), Mock(File))
repositoryTransportFactory = new RepositoryTransportFactory(resourceConnectorFactories, null, null, null, null, null, null, override, producerGuard, Mock(FileResourceRepository), TestUtil.checksumService)
}

Expand Down