mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
[aether] Drop invalid ZIP validation and removal logic
Dependency resolver mustn't have unexpected side effects like artifact removal. Related logic is moved to `org.jetbrains.jps.incremental.dependencies.DependencyResolvingBuilder`. GitOrigin-RevId: f0c0152345bf17a53fa8b48a211b7c4a9335d517
This commit is contained in:
committed by
intellij-monorepo-bot
parent
28655624c3
commit
3f8603b2c7
@@ -37,7 +37,6 @@ import org.eclipse.aether.util.repository.AuthenticationBuilder;
|
||||
import org.eclipse.aether.util.repository.SimpleResolutionErrorPolicy;
|
||||
import org.eclipse.aether.util.version.GenericVersionScheme;
|
||||
import org.eclipse.aether.version.*;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.slf4j.Logger;
|
||||
@@ -113,11 +112,6 @@ public final class ArtifactRepositoryManager {
|
||||
mySessionFactory = new RepositorySystemSessionFactory(localRepositoryPath, progressConsumer, offline, retry);
|
||||
}
|
||||
|
||||
@ApiStatus.Internal
|
||||
public boolean isValidArchive(File archive) {
|
||||
var localRepositoryManager = mySessionFactory.sessionTemplate.getLocalRepositoryManager();
|
||||
return ((StrictLocalRepositoryManager) localRepositoryManager).isValidArchive(archive);
|
||||
}
|
||||
|
||||
private static final class RepositorySystemSessionFactory {
|
||||
private final RepositorySystemSession sessionTemplate;
|
||||
@@ -163,7 +157,7 @@ public final class ArtifactRepositoryManager {
|
||||
});
|
||||
}
|
||||
// setup session here
|
||||
session.setLocalRepositoryManager(new StrictLocalRepositoryManager(ourSystem.newLocalRepositoryManager(session, new LocalRepository(localRepositoryPath))));
|
||||
session.setLocalRepositoryManager(ourSystem.newLocalRepositoryManager(session, new LocalRepository(localRepositoryPath)));
|
||||
session.setProxySelector(ourProxySelector);
|
||||
session.setOffline(offline);
|
||||
|
||||
|
||||
@@ -1,100 +0,0 @@
|
||||
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package org.jetbrains.idea.maven.aether;
|
||||
|
||||
import org.eclipse.aether.RepositorySystemSession;
|
||||
import org.eclipse.aether.artifact.Artifact;
|
||||
import org.eclipse.aether.metadata.Metadata;
|
||||
import org.eclipse.aether.repository.*;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.util.zip.ZipFile;
|
||||
|
||||
class StrictLocalRepositoryManager implements LocalRepositoryManager {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(StrictLocalRepositoryManager.class);
|
||||
private static final boolean STRICT_VALIDATION = "true".equals(System.getProperty("org.jetbrains.idea.maven.aether.strictValidation"));
|
||||
private final LocalRepositoryManager delegate;
|
||||
|
||||
StrictLocalRepositoryManager(LocalRepositoryManager delegate) {
|
||||
this.delegate = delegate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public LocalArtifactResult find(RepositorySystemSession session, LocalArtifactRequest request) {
|
||||
var result = delegate.find(session, request);
|
||||
if (result.isAvailable() && !isValidArchive(result.getFile())) {
|
||||
result.setFile(null);
|
||||
result.setAvailable(false);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
boolean isValidArchive(File archive) {
|
||||
if (!archive.exists()) return false;
|
||||
// TODO: to be revised after IDEA-269182 is implemented
|
||||
if (STRICT_VALIDATION && (archive.getName().endsWith(".jar") || archive.getName().endsWith(".zip"))) {
|
||||
long entriesCount;
|
||||
try (var zip = new ZipFile(archive)) {
|
||||
entriesCount = zip.size();
|
||||
}
|
||||
catch (IOException e) {
|
||||
LOG.warn("Unable to read a number of entries in " + archive + ": " + e.getMessage());
|
||||
entriesCount = 0;
|
||||
}
|
||||
if (entriesCount <= 0) {
|
||||
LOG.warn(archive + " is probably corrupted, deleting");
|
||||
try {
|
||||
Files.deleteIfExists(archive.toPath());
|
||||
}
|
||||
catch (IOException e) {
|
||||
throw new RuntimeException("Unable to delete " + archive, e);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public LocalRepository getRepository() {
|
||||
return delegate.getRepository();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPathForLocalArtifact(Artifact artifact) {
|
||||
return delegate.getPathForLocalArtifact(artifact);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPathForRemoteArtifact(Artifact artifact, RemoteRepository repository, String context) {
|
||||
return delegate.getPathForRemoteArtifact(artifact, repository, context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPathForLocalMetadata(Metadata metadata) {
|
||||
return delegate.getPathForLocalMetadata(metadata);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPathForRemoteMetadata(Metadata metadata, RemoteRepository repository, String context) {
|
||||
return delegate.getPathForRemoteMetadata(metadata, repository, context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void add(RepositorySystemSession session, LocalArtifactRegistration request) {
|
||||
delegate.add(session, request);
|
||||
}
|
||||
|
||||
@Override
|
||||
public LocalMetadataResult find(RepositorySystemSession session, LocalMetadataRequest request) {
|
||||
return delegate.find(session, request);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void add(RepositorySystemSession session, LocalMetadataRegistration request) {
|
||||
delegate.add(session, request);
|
||||
}
|
||||
}
|
||||
@@ -116,56 +116,6 @@ public class ArtifactRepositoryManagerTest extends UsefulTestCase {
|
||||
}
|
||||
}
|
||||
|
||||
private Path resolveSomeSingleJar() throws Exception {
|
||||
myRepositoryManager.resolveDependency(
|
||||
"org.jetbrains", "annotations", "20.1.0",
|
||||
false, Collections.emptyList()
|
||||
);
|
||||
try (var stream = Files.walk(localRepository.toPath())) {
|
||||
var resolvedJars = stream.filter(file -> file.getFileName().toString().endsWith(".jar")).collect(Collectors.toList());
|
||||
assertSize(1, resolvedJars);
|
||||
var resolvedJar = resolvedJars.get(0);
|
||||
try (var zip = new ZipFile(resolvedJar.toFile())) {
|
||||
assert zip.size() > 0;
|
||||
}
|
||||
return resolvedJar;
|
||||
}
|
||||
}
|
||||
|
||||
public void testResolutionForEmptyJar() throws Exception {
|
||||
var resolvedJar = resolveSomeSingleJar();
|
||||
Files.delete(resolvedJar);
|
||||
Files.createFile(resolvedJar);
|
||||
assert Files.size(resolvedJar) == 0;
|
||||
resolveSomeSingleJar();
|
||||
}
|
||||
|
||||
public void testResolutionForSymbolicLinkToEmptyJar() throws Exception {
|
||||
var resolvedJar = resolveSomeSingleJar();
|
||||
Files.delete(resolvedJar);
|
||||
var brokenTarget = Files.createTempFile("empty", ".jar");
|
||||
assert Files.size(brokenTarget) == 0;
|
||||
Files.createSymbolicLink(resolvedJar, brokenTarget);
|
||||
resolveSomeSingleJar();
|
||||
}
|
||||
|
||||
public void testResolutionForMalformedJar() throws Exception {
|
||||
var resolvedJar = resolveSomeSingleJar();
|
||||
Files.delete(resolvedJar);
|
||||
Files.createFile(resolvedJar);
|
||||
Files.writeString(resolvedJar, "malformed jar content");
|
||||
resolveSomeSingleJar();
|
||||
}
|
||||
|
||||
public void testResolutionForSymbolicLinkToMalformedJar() throws Exception {
|
||||
var resolvedJar = resolveSomeSingleJar();
|
||||
Files.delete(resolvedJar);
|
||||
var brokenTarget = Files.createTempFile("malformed", ".jar");
|
||||
Files.writeString(brokenTarget, "malformed jar content");
|
||||
Files.createSymbolicLink(resolvedJar, brokenTarget);
|
||||
resolveSomeSingleJar();
|
||||
}
|
||||
|
||||
private static void assertCoordinates(Artifact artifact, String groupId, String artifactId, String version) {
|
||||
assertEquals(groupId, artifact.getGroupId());
|
||||
assertEquals(artifactId, artifact.getArtifactId());
|
||||
|
||||
Reference in New Issue
Block a user