Skip to content

Commit

Permalink
Merge branch 'release' into cc/dm/issue-11971-merge
Browse files Browse the repository at this point in the history
  • Loading branch information
melix committed Jan 23, 2020
2 parents b192a90 + 6c84a09 commit fad140c
Show file tree
Hide file tree
Showing 7 changed files with 82 additions and 29 deletions.
Original file line number Diff line number Diff line change
@@ -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
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,12 @@
*/
package org.gradle.internal.hash;

import com.google.common.io.Files;
import org.gradle.api.UncheckedIOException;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

class ChecksumHasher implements FileHasher {

Expand All @@ -32,7 +33,15 @@ public ChecksumHasher(HashFunction hashFunction) {
@Override
public HashCode hash(File file) {
try {
return hashFunction.hashBytes(Files.toByteArray(file));
PrimitiveHasher hasher = hashFunction.newPrimitiveHasher();
byte[] buffer = new byte[4096];
int len;
try (InputStream in = new FileInputStream(file)) {
while ((len = in.read(buffer)) >= 0) {
hasher.putBytes(buffer, 0, len);
}
}
return hasher.hash();
} catch (IOException e) {
throw new UncheckedIOException(e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,8 @@
import org.gradle.initialization.InternalBuildFinishedListener;
import org.gradle.initialization.ProjectAccessListener;
import org.gradle.initialization.layout.ProjectCacheDir;
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 @@ -144,6 +146,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 @@ -335,8 +338,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 @@ -355,8 +358,10 @@ RepositoryBlacklister createRepositoryBlacklister() {
return new ConnectionFailureRepositoryBlacklister();
}

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

DependencyVerificationOverride createDependencyVerificationOverride(StartParameterResolutionOverride startParameterResolutionOverride,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,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 @@ -90,16 +92,15 @@ public DependencyVerificationOverride dependencyVerificationOverride(BuildOperat
ChecksumService checksumService,
SignatureVerificationServiceFactory signatureVerificationServiceFactory,
DocumentationRegistry documentationRegistry) {
File currentDir = startParameter.getCurrentDir();
List<String> checksums = startParameter.getWriteDependencyVerifications();
if (!checksums.isEmpty()) {
IncubationLogger.incubatingFeatureUsed("Dependency verification");
return DisablingVerificationOverride.of(
new WriteDependencyVerificationFile(currentDir, buildOperationExecutor, checksums, checksumService, signatureVerificationServiceFactory, startParameter.isDryRun(), startParameter.isExportKeys())
new WriteDependencyVerificationFile(gradleDir, buildOperationExecutor, checksums, checksumService, signatureVerificationServiceFactory, startParameter.isDryRun(), startParameter.isExportKeys())
);
} else {
File verificationsFile = DependencyVerificationOverride.dependencyVerificationsFile(currentDir);
File keyringsFile = DependencyVerificationOverride.keyringsFile(currentDir);
File verificationsFile = DependencyVerificationOverride.dependencyVerificationsFile(gradleDir);
File keyringsFile = DependencyVerificationOverride.keyringsFile(gradleDir);
if (verificationsFile.exists()) {
if (startParameter.getDependencyVerificationMode() == DependencyVerificationMode.OFF) {
return DependencyVerificationOverride.NO_VERIFICATION;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,24 +28,14 @@ public interface DependencyVerificationOverride {
String VERIFICATION_KEYRING_GPG = "verification-keyring.gpg";
String VERIFICATION_KEYRING_DRYRUN_GPG = "verification-keyring-dryrun.gpg";

static File dependencyVerificationsFile(File buildDirectory) {
File gradleDir = ensureGradleDirExists(buildDirectory);
return new File(gradleDir, VERIFICATION_METADATA_XML);
static File dependencyVerificationsFile(File gradleDirectory) {
return new File(gradleDirectory, VERIFICATION_METADATA_XML);
}

static File keyringsFile(File buildDirectory) {
File gradleDir = ensureGradleDirExists(buildDirectory);
static File keyringsFile(File gradleDir) {
return new File(gradleDir, VERIFICATION_KEYRING_GPG);
}

static File ensureGradleDirExists(File buildDirectory) {
File gradleDir = new File(buildDirectory, "gradle");
if (!gradleDir.exists()) {
gradleDir.mkdirs();
}
return gradleDir;
}

ModuleComponentRepository overrideDependencyVerification(ModuleComponentRepository original, String resolveContextName, ResolutionStrategyInternal resolutionStrategy);

default void buildFinished(Gradle gradle) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ public class WriteDependencyVerificationFile implements DependencyVerificationOv
private boolean hasMissingKeys = false;
private boolean hasFailedVerification = false;

public WriteDependencyVerificationFile(File buildDirectory,
public WriteDependencyVerificationFile(File gradleDir,
BuildOperationExecutor buildOperationExecutor,
List<String> checksums,
ChecksumService checksumService,
Expand All @@ -119,8 +119,8 @@ public WriteDependencyVerificationFile(File buildDirectory,
this.buildOperationExecutor = buildOperationExecutor;
this.checksums = checksums;
this.checksumService = checksumService;
this.verificationFile = DependencyVerificationOverride.dependencyVerificationsFile(buildDirectory);
this.keyringsFile = DependencyVerificationOverride.keyringsFile(buildDirectory);
this.verificationFile = DependencyVerificationOverride.dependencyVerificationsFile(gradleDir);
this.keyringsFile = DependencyVerificationOverride.keyringsFile(gradleDir);
this.signatureVerificationServiceFactory = signatureVerificationServiceFactory;
this.isDryRun = isDryRun;
this.generatePgpInfo = checksums.contains(PGP);
Expand Down Expand Up @@ -165,7 +165,7 @@ public ModuleComponentRepository overrideDependencyVerification(ModuleComponentR

@Override
public void buildFinished(Gradle gradle) {

ensureOutputDirCreated();
maybeReadExistingFile();
SignatureVerificationService signatureVerificationService = signatureVerificationServiceFactory.create(
keyringsFile,
Expand All @@ -184,6 +184,10 @@ public void buildFinished(Gradle gradle) {
}
}

public boolean ensureOutputDirCreated() {
return verificationFile.getParentFile().mkdirs();
}

private void serializeResult(SignatureVerificationService signatureVerificationService) throws IOException {
File out = verificationFile;
if (isDryRun) {
Expand Down
Original file line number Diff line number Diff line change
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

0 comments on commit fad140c

Please sign in to comment.