Skip to content

Commit

Permalink
Move the transport to the p2-plugin
Browse files Browse the repository at this point in the history
and remove references to ECF

Fix #1568
  • Loading branch information
laeubi committed Oct 27, 2022
1 parent a189188 commit 7e6d595
Show file tree
Hide file tree
Showing 18 changed files with 286 additions and 175 deletions.
25 changes: 2 additions & 23 deletions p2-maven-plugin/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -175,31 +175,10 @@
<artifactId>org.eclipse.equinox.simpleconfigurator.manipulator</artifactId>
<version>2.2.0</version>
</dependency>
<!-- ECF -->
<dependency>
<groupId>org.eclipse.platform</groupId>
<artifactId>org.eclipse.equinox.p2.transport.ecf</artifactId>
<version>1.3.300</version>
</dependency>
<dependency>
<groupId>org.eclipse.ecf</groupId>
<artifactId>org.eclipse.ecf.identity</artifactId>
<version>3.9.402</version>
</dependency>
<dependency>
<groupId>org.eclipse.ecf</groupId>
<artifactId>org.eclipse.ecf.provider.filetransfer</artifactId>
<version>3.2.800</version>
</dependency>
<dependency>
<groupId>org.eclipse.ecf</groupId>
<artifactId>org.eclipse.ecf.filetransfer</artifactId>
<version>5.1.102</version>
</dependency>
<dependency>
<groupId>org.eclipse.ecf</groupId>
<artifactId>org.eclipse.ecf</artifactId>
<version>3.10.0</version>
<artifactId>org.eclipse.core.net</artifactId>
<version>1.4.0</version>
</dependency>

<!-- felix -->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
* Contributors:
* Christoph Läubrich - initial API and implementation
*******************************************************************************/
package org.eclipse.tycho.agent;
package org.eclipse.tycho.p2maven.transport;

import java.io.File;
import java.io.IOException;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,13 @@
* Contributors:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.tycho.agent;
package org.eclipse.tycho.p2maven.transport;

import java.lang.reflect.Field;
import java.net.URI;
import java.util.Map;

import org.codehaus.plexus.logging.Logger;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository;
import org.eclipse.equinox.p2.core.IProvisioningAgent;
Expand All @@ -28,29 +29,27 @@
import org.eclipse.equinox.p2.repository.artifact.IArtifactRepositoryManager;
import org.eclipse.equinox.p2.repository.artifact.IArtifactRequest;
import org.eclipse.equinox.p2.repository.spi.AbstractRepository;
import org.eclipse.tycho.core.shared.MavenLogger;

@SuppressWarnings("restriction")
class P2MirrorDisablingArtifactRepositoryManager implements IArtifactRepositoryManager {

private final IArtifactRepositoryManager delegate;
private final MavenLogger mavenLogger;
private final Logger mavenLogger;

public P2MirrorDisablingArtifactRepositoryManager(IArtifactRepositoryManager originalRepositoryManager,
MavenLogger mavenLogger) {
Logger mavenLogger) {
this.delegate = originalRepositoryManager;
this.mavenLogger = mavenLogger;
}

private static IArtifactRepository disableMirrors(IArtifactRepository repository, MavenLogger logger)
private static IArtifactRepository disableMirrors(IArtifactRepository repository, Logger logger)
throws ProvisionException {
if (repository instanceof SimpleArtifactRepository simpleArtifactRepo) {
stripMirrorsURLProperty(simpleArtifactRepo, logger);
}
return repository;
}

private static void stripMirrorsURLProperty(AbstractRepository<?> repository, MavenLogger logger) {
private static void stripMirrorsURLProperty(AbstractRepository<?> repository, Logger logger) {
try {
Map<?, ?> properties = getRepositoryProperties(repository);
Object removedConfiguration = properties.remove(IRepository.PROP_MIRRORS_URL);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*******************************************************************************
* Copyright (c) 2022 Christoph Läubrich and others.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Christoph Läubrich - initial API and implementation
*******************************************************************************/
package org.eclipse.tycho.p2maven.transport;

import org.codehaus.plexus.component.annotations.Component;
import org.eclipse.equinox.internal.p2.core.EventBusComponent;
import org.eclipse.equinox.internal.provisional.p2.core.eventbus.IProvisioningEventBus;
import org.eclipse.equinox.p2.core.IProvisioningAgent;
import org.eclipse.equinox.p2.core.spi.IAgentServiceFactory;

@Component(role = IAgentServiceFactory.class, hint = "org.eclipse.equinox.internal.provisional.p2.core.eventbus.IProvisioningEventBus")
public class ProvisioningEventBusAgentFactory implements IAgentServiceFactory {

@Override
public Object createService(IProvisioningAgent agent) {
IProvisioningEventBus delegate = (IProvisioningEventBus) new EventBusComponent().createService(agent);
return new TychoProvisioningEventBus(delegate);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
* Contributors:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.tycho.agent;
package org.eclipse.tycho.p2maven.transport;

import java.net.URI;
import java.util.Map;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,43 +10,43 @@
* Contributors:
* Christoph Läubrich - initial API and implementation
*******************************************************************************/
package org.eclipse.tycho.agent;
package org.eclipse.tycho.p2maven.transport;

import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.logging.Logger;
import org.eclipse.equinox.internal.p2.artifact.repository.ArtifactRepositoryComponent;
import org.eclipse.equinox.p2.core.IProvisioningAgent;
import org.eclipse.equinox.p2.core.spi.IAgentServiceFactory;
import org.eclipse.equinox.p2.repository.artifact.IArtifactRepositoryManager;
import org.eclipse.tycho.IRepositoryIdManager;
import org.eclipse.tycho.core.shared.MavenContext;

@Component(role = IAgentServiceFactory.class, hint = "org.eclipse.equinox.p2.repository.artifact.IArtifactRepositoryManager")
public class RemoteArtifactRepositoryManagerAgentFactory implements IAgentServiceFactory {

@Requirement
MavenContext mavenContext;
Logger logger;

@Override
public Object createService(IProvisioningAgent agent) {
IArtifactRepositoryManager plainRepoManager = (IArtifactRepositoryManager) new ArtifactRepositoryComponent()
.createService(agent);
if (getDisableP2MirrorsConfiguration()) {
plainRepoManager = new P2MirrorDisablingArtifactRepositoryManager(plainRepoManager,
mavenContext.getLogger());
logger);
}
IRepositoryIdManager loadingHelper = agent.getService(IRepositoryIdManager.class);
return new RemoteArtifactRepositoryManager(plainRepoManager, loadingHelper);
}

private boolean getDisableP2MirrorsConfiguration() {
String key = "tycho.disableP2Mirrors";
String value = mavenContext.getSessionProperties().getProperty(key);
String value = System.getProperty(key);

boolean disableP2Mirrors = Boolean.parseBoolean(value);
if (disableP2Mirrors && mavenContext.getLogger().isDebugEnabled()) {
if (disableP2Mirrors && logger.isDebugEnabled()) {
String message = key + "=" + value + " -> ignoring mirrors specified in p2 artifact repositories";
mavenContext.getLogger().debug(message);
logger.debug(message);
}
return disableP2Mirrors;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,13 @@
* Contributors:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.tycho.agent;
package org.eclipse.tycho.p2maven.transport;

import java.net.URI;
import java.util.Map;
import java.util.Objects;

import org.codehaus.plexus.logging.Logger;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.equinox.p2.core.IProvisioningAgent;
Expand All @@ -28,16 +29,15 @@
import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
import org.eclipse.tycho.IRepositoryIdManager;
import org.eclipse.tycho.core.shared.MavenLogger;

class RemoteMetadataRepositoryManager implements IMetadataRepositoryManager {

private final IMetadataRepositoryManager delegate;
private final IRepositoryIdManager loadingHelper;
private final MavenLogger logger;
private final Logger logger;

RemoteMetadataRepositoryManager(IMetadataRepositoryManager delegate, IRepositoryIdManager loadingHelper,
MavenLogger logger) {
Logger logger) {
this.delegate = delegate;
this.loadingHelper = Objects.requireNonNull(loadingHelper);
this.logger = logger;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
* Contributors:
* Christoph Läubrich - initial API and implementation
*******************************************************************************/
package org.eclipse.tycho.agent;
package org.eclipse.tycho.p2maven.transport;

import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
Expand All @@ -20,7 +20,6 @@
import org.eclipse.equinox.p2.core.spi.IAgentServiceFactory;
import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
import org.eclipse.tycho.IRepositoryIdManager;
import org.eclipse.tycho.osgi.adapters.MavenLoggerAdapter;

@Component(role = IAgentServiceFactory.class, hint = "org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager")
public class RemoteMetadataRepositoryManagerAgentFactory implements IAgentServiceFactory {
Expand All @@ -33,8 +32,7 @@ public Object createService(IProvisioningAgent agent) {
IMetadataRepositoryManager plainMetadataRepoManager = (IMetadataRepositoryManager) new MetadataRepositoryComponent()
.createService(agent);
IRepositoryIdManager loadingHelper = agent.getService(IRepositoryIdManager.class);
return new RemoteMetadataRepositoryManager(plainMetadataRepoManager, loadingHelper,
new MavenLoggerAdapter(logger, true));
return new RemoteMetadataRepositoryManager(plainMetadataRepoManager, loadingHelper, logger);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
* Contributors:
* Christoph Läubrich - initial API and implementation
*******************************************************************************/
package org.eclipse.tycho.agent;
package org.eclipse.tycho.p2maven.transport;

import java.io.File;
import java.io.FileInputStream;
Expand Down Expand Up @@ -45,11 +45,11 @@
import java.util.stream.Collectors;

import org.apache.commons.io.FileUtils;
import org.codehaus.plexus.logging.Logger;
import org.eclipse.core.net.proxy.IProxyData;
import org.eclipse.core.net.proxy.IProxyService;
import org.eclipse.equinox.internal.p2.repository.AuthenticationFailedException;
import org.eclipse.tycho.MavenRepositorySettings.Credentials;
import org.eclipse.tycho.core.shared.MavenLogger;

public class SharedHttpCacheStorage {

Expand Down Expand Up @@ -80,7 +80,7 @@ public class SharedHttpCacheStorage {
private SharedHttpCacheStorage(CacheConfig cacheConfig) {

this.cacheConfig = cacheConfig;
entryCache = new LinkedHashMap<>(100, 0.75f, true) {
entryCache = new LinkedHashMap<File, CacheLine>(100, 0.75f, true) {

private static final long serialVersionUID = 1L;

Expand All @@ -100,7 +100,7 @@ protected boolean removeEldestEntry(final Map.Entry<File, CacheLine> eldest) {
* @throws FileNotFoundException
* if the URI is know to be not found
*/
public CacheEntry getCacheEntry(URI uri, MavenLogger logger) throws FileNotFoundException {
public CacheEntry getCacheEntry(URI uri, Logger logger) throws FileNotFoundException {
CacheLine cacheLine = getCacheLine(uri);
if (!cacheConfig.update) { //if not updates are forced ...
int code = cacheLine.getResponseCode();
Expand Down Expand Up @@ -190,7 +190,7 @@ public CacheLine(File file) {
}

public synchronized long fetchLastModified(URI uri, IProxyService proxyService,
Function<URI, Credentials> credentialsProvider, MavenLogger logger) throws IOException {
Function<URI, Credentials> credentialsProvider, Logger logger) throws IOException {
//TODO its very likely that the file is downloaded here if it has changed... so probably just download it right now?
RepositoryAuthenticator authenticator = new RepositoryAuthenticator(getProxyData(proxyService, uri),
credentialsProvider.apply(uri));
Expand Down Expand Up @@ -221,7 +221,7 @@ public synchronized long fetchLastModified(URI uri, IProxyService proxyService,

public synchronized long getLastModified(URI uri, IProxyService proxyService,
Function<URI, Credentials> credentialsProvider, Function<URI, IOException> notAviableExceptionSupplier,
MavenLogger logger) throws IOException {
Logger logger) throws IOException {
int code = getResponseCode();
if (code > 0) {
if (isAuthFailure(code)) {
Expand All @@ -246,7 +246,7 @@ public synchronized long getLastModified(URI uri, IProxyService proxyService,
}

public synchronized File fetchFile(URI uri, IProxyService proxyService,
Function<URI, Credentials> credentialsProvider, MavenLogger logger) throws IOException {
Function<URI, Credentials> credentialsProvider, Logger logger) throws IOException {
boolean exits = file.isFile();
if (exits && !mustValidate()) {
return file;
Expand Down Expand Up @@ -299,7 +299,7 @@ public synchronized File fetchFile(URI uri, IProxyService proxyService,

public synchronized File getFile(URI uri, IProxyService proxyService,
Function<URI, Credentials> credentialsProvider, Function<URI, IOException> notAviableExceptionSupplier,
MavenLogger logger) throws IOException {
Logger logger) throws IOException {
int code = getResponseCode();
if (code > 0) {
if (isAuthFailure(code)) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
/*******************************************************************************
* Copyright (c) 2022 Christoph Läubrich and others.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Christoph Läubrich - initial API and implementation
*******************************************************************************/
package org.eclipse.tycho.p2maven.transport;

import java.util.EventObject;

import org.eclipse.equinox.internal.provisional.p2.core.eventbus.IProvisioningEventBus;
import org.eclipse.equinox.internal.provisional.p2.core.eventbus.ProvisioningListener;

public class TychoProvisioningEventBus implements IProvisioningEventBus {

private IProvisioningEventBus delegate;

public void dispatchEvent(ProvisioningListener eventListener, ProvisioningListener listenerObject, int eventAction,
EventObject eventObject) {
delegate.dispatchEvent(eventListener, listenerObject, eventAction, eventObject);
}

public void addListener(ProvisioningListener toAdd) {
delegate.addListener(toAdd);
}

public void removeListener(ProvisioningListener toRemove) {
delegate.removeListener(toRemove);
}

public void publishEvent(EventObject event) {
// TODO can we transform these events and make use of them?
//events seem to be:
// org.eclipse.equinox.internal.p2.artifact.repository.MirrorEvent
// org.eclipse.equinox.internal.p2.engine.CollectEvent
// org.eclipse.equinox.internal.p2.engine.BeginOperationEvent
// org.eclipse.equinox.internal.provisional.p2.repository.RepositoryEvent
// org.eclipse.equinox.internal.p2.repository.DownloadProgressEvent
// ... and much more ..
// we even might want to actually suppress events, e.g in case of batch mode!
delegate.publishEvent(event);
}

public void close() {
delegate.close();
}

public TychoProvisioningEventBus(IProvisioningEventBus delegate) {
this.delegate = delegate;
}

}
Loading

0 comments on commit 7e6d595

Please sign in to comment.