From f392c91c0a2787137b2a153e391ea0bbed6429f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=8A?= =?UTF-8?q?=D1=80=20=D0=9A=D1=83=D1=80=D1=82=D0=B0=D0=BA=D0=BE=D0=B2?= Date: Wed, 23 Aug 2023 16:26:52 +0300 Subject: [PATCH 1/4] Ignore packed artifacts when parsing Prevents issues when packed artifacts are returned by iterator but they can no longer be handled. Fixes https://github.com/eclipse-equinox/p2/issues/308 --- .../simple/SimpleArtifactRepositoryIO.java | 38 ++++++++++++++++--- 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepositoryIO.java b/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepositoryIO.java index 2893b710e8..58aaa784e9 100644 --- a/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepositoryIO.java +++ b/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepositoryIO.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2022 IBM Corporation and others. + * Copyright (c) 2007, 2023 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -14,11 +14,26 @@ *******************************************************************************/ package org.eclipse.equinox.internal.p2.artifact.repository.simple; -import java.io.*; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.net.URI; -import java.util.*; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + import javax.xml.parsers.ParserConfigurationException; -import org.eclipse.core.runtime.*; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.OperationCanceledException; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.URIUtil; import org.eclipse.equinox.internal.p2.artifact.repository.Activator; import org.eclipse.equinox.internal.p2.artifact.repository.Messages; import org.eclipse.equinox.internal.p2.core.helpers.LogHelper; @@ -28,13 +43,19 @@ import org.eclipse.equinox.internal.p2.persistence.XMLWriter; import org.eclipse.equinox.p2.core.IProvisioningAgent; import org.eclipse.equinox.p2.core.ProvisionException; -import org.eclipse.equinox.p2.metadata.*; +import org.eclipse.equinox.p2.metadata.IArtifactKey; +import org.eclipse.equinox.p2.metadata.Version; +import org.eclipse.equinox.p2.metadata.VersionRange; +import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor; import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository; import org.eclipse.equinox.p2.repository.artifact.IProcessingStepDescriptor; import org.eclipse.equinox.p2.repository.artifact.spi.ProcessingStepDescriptor; import org.eclipse.osgi.service.datalocation.Location; import org.eclipse.osgi.util.NLS; -import org.xml.sax.*; +import org.xml.sax.Attributes; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.XMLReader; /** * This class reads and writes artifact repository metadata @@ -548,6 +569,11 @@ public void startElement(String name, Attributes attributes) { protected void finished() { if (isValidXML() && currentArtifact != null) { Map properties = (propertiesHandler == null ? new OrderedProperties(0) : propertiesHandler.getProperties()); + String format = properties.get(IArtifactDescriptor.FORMAT); + if (format != null && format.equals(IArtifactDescriptor.FORMAT_PACKED)) { + // ignore packed artifacts as they can no longer be handled at all + return; + } currentArtifact.addProperties(properties); properties = (repositoryPropertiesHandler == null ? new OrderedProperties(0) : repositoryPropertiesHandler.getProperties()); From e5781b5eaa65b5622748a21621dd034c60971d1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=8A?= =?UTF-8?q?=D1=80=20=D0=9A=D1=83=D1=80=D1=82=D0=B0=D0=BA=D0=BE=D0=B2?= Date: Wed, 23 Aug 2023 16:43:48 +0300 Subject: [PATCH 2/4] Fix MirrorRequestTest to not manually set statuses That way actually returned statuses are tested. --- .../repository/MirrorRequestTest.java | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/MirrorRequestTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/MirrorRequestTest.java index 2713bbbde4..3746e20fa2 100644 --- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/MirrorRequestTest.java +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/MirrorRequestTest.java @@ -23,8 +23,10 @@ import java.util.LinkedList; import java.util.Map; import java.util.Queue; + import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; + import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; @@ -179,7 +181,6 @@ public void testStatusFromFailover() { } catch (ProvisionException e) { fail("Failed to load source repository"); } - // Set status sequence, actual Statuses added later source.setSequence(seq); // Grab an ArtifactKey to mirror, doesn't matter which IQueryResult keys = source.query(ArtifactKeyQuery.ALL_KEYS, null); @@ -188,35 +189,29 @@ public void testStatusFromFailover() { IArtifactKey key = keys.iterator().next(); MirrorRequest req = new MirrorRequest(key, targetRepository, null, null, getTransport()); - // Set Status sequence - seq.add(new Status(IStatus.ERROR, "Activator", "Message")); - seq.add(new Status(IStatus.WARNING, "Activator", "Message")); req.perform(source, new NullProgressMonitor()); // packed artifact is ignored as Java 14 removed pack200 - assertEquals("Expected ERROR status", IStatus.ERROR, req.getResult().getSeverity()); + assertEquals("Expected OK status", IStatus.OK, req.getResult().getSeverity()); // Remove key from repo so the same one can be used targetRepository.removeDescriptor(key, new NullProgressMonitor()); - // Set Status sequence + req = new MirrorRequest(key, targetRepository, null, null, getTransport()); - seq.add(new Status(IStatus.WARNING, "Activator", "Message")); - seq.add(new Status(IStatus.INFO, "Activator", "Message")); req.perform(source, new NullProgressMonitor()); // packed artifact is ignored as Java 14 removed pack200 - assertEquals("Expected WARNING status", IStatus.WARNING, req.getResult().getSeverity()); + assertEquals("Expected OK status", IStatus.OK, req.getResult().getSeverity()); // Remove key from repo so the same one can be used targetRepository.removeDescriptor(key, new NullProgressMonitor()); - // Set Status sequence + req = new MirrorRequest(key, targetRepository, null, null, getTransport()); - seq.add(new Status(IStatus.INFO, "Activator", "Message")); req.perform(source, new NullProgressMonitor()); // packed artifact is ignored as Java 14 removed pack200 - assertEquals("Expected WARNING status", IStatus.WARNING, req.getResult().getSeverity()); + assertEquals("Expected OK status", IStatus.OK, req.getResult().getSeverity()); } protected static void assertStatusContains(String message, IStatus status, String statusString) { From 27bd0325d4cce43d0acea15ed144210910654342 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=8A?= =?UTF-8?q?=D1=80=20=D0=9A=D1=83=D1=80=D1=82=D0=B0=D0=BA=D0=BE=D0=B2?= Date: Wed, 23 Aug 2023 16:55:24 +0300 Subject: [PATCH 3/4] Remove packedSiblingsWithUUID test It was useless since pack200 support was removed but didn't fail as packed artifacts were not ignored entirely (at parsing time) --- .../tests/artifact/repository/AllTests.java | 2 +- .../artifact/repository/LocationTest.java | 62 ------------------- .../5e/00c3579a3138001f1093800c21638bce | 1 - .../packedSiblingsWithUUID/artifacts.xml | 26 -------- 4 files changed, 1 insertion(+), 90 deletions(-) delete mode 100644 bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/LocationTest.java delete mode 100644 bundles/org.eclipse.equinox.p2.tests/testData/artifactRepo/packedSiblingsWithUUID/.blobstore/5e/00c3579a3138001f1093800c21638bce delete mode 100644 bundles/org.eclipse.equinox.p2.tests/testData/artifactRepo/packedSiblingsWithUUID/artifacts.xml diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/AllTests.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/AllTests.java index 0abfcc7088..4556213f46 100644 --- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/AllTests.java +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/AllTests.java @@ -25,7 +25,7 @@ ArtifactRepositoryMissingSizeData.class, ArtifactRepositoryWithReferenceDescriptors.class, BatchExecuteArtifactRepositoryTest.class, Bug252308.class, Bug265577.class, Bug351944.class, CompositeArtifactRepositoryTest.class, CorruptedJar.class, FoldersRepositoryTest.class, - JarURLArtifactRepositoryTest.class, LocationTest.class, MD5Tests.class, MirrorSelectorTest.class, + JarURLArtifactRepositoryTest.class, MD5Tests.class, MirrorSelectorTest.class, MirrorRequestTest.class, SimpleArtifactRepositoryTest.class, TransferTest.class, PGPVerifierTest.class }) public class AllTests { diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/LocationTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/LocationTest.java deleted file mode 100644 index 4de0337e3c..0000000000 --- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/LocationTest.java +++ /dev/null @@ -1,62 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2011, 2017 IBM Corporation 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: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.equinox.p2.tests.artifact.repository; - -import java.io.File; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest; -import org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository; -import org.eclipse.equinox.internal.p2.metadata.ArtifactKey; -import org.eclipse.equinox.p2.metadata.IArtifactKey; -import org.eclipse.equinox.p2.metadata.Version; -import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository; -import org.eclipse.equinox.p2.repository.artifact.IArtifactRepositoryManager; -import org.eclipse.equinox.p2.tests.AbstractProvisioningTest; - -public class LocationTest extends AbstractProvisioningTest { - private static final String testDataLocation = "testData/artifactRepo/packedSiblingsWithUUID"; - private File targetLocation; - private IArtifactRepository targetRepository, sourceRepository; - - @Override - public void setUp() throws Exception { - super.setUp(); - targetLocation = File.createTempFile("target", ".repo"); - targetLocation.delete(); - targetLocation.mkdirs(); - targetRepository = new SimpleArtifactRepository(getAgent(), "TargetRepo", targetLocation.toURI(), null); - - IArtifactRepositoryManager mgr = getArtifactRepositoryManager(); - sourceRepository = mgr.loadRepository((getTestData("EmptyJar repo", testDataLocation).toURI()), null); - - } - - @Override - protected void tearDown() throws Exception { - getArtifactRepositoryManager().removeRepository(targetLocation.toURI()); - getArtifactRepositoryManager().removeRepository(sourceRepository.getLocation()); - AbstractProvisioningTest.delete(targetLocation); - super.tearDown(); - } - - public void testLocation() throws Exception { - IArtifactKey key = new ArtifactKey("osgi.bundle", "org.springframework.ide.eclipse", Version.parseVersion("2.3.2.201003220227-RELEASE")); - assertTrue(sourceRepository.contains(key)); - MirrorRequest req = new MirrorRequest(key, targetRepository, null, null, getTransport()); - req.perform(sourceRepository, new NullProgressMonitor()); - IStatus status = req.getResult(); - assertTrue(status.getMessage(), status.isOK()); - } -} diff --git a/bundles/org.eclipse.equinox.p2.tests/testData/artifactRepo/packedSiblingsWithUUID/.blobstore/5e/00c3579a3138001f1093800c21638bce b/bundles/org.eclipse.equinox.p2.tests/testData/artifactRepo/packedSiblingsWithUUID/.blobstore/5e/00c3579a3138001f1093800c21638bce deleted file mode 100644 index c57eff55eb..0000000000 --- a/bundles/org.eclipse.equinox.p2.tests/testData/artifactRepo/packedSiblingsWithUUID/.blobstore/5e/00c3579a3138001f1093800c21638bce +++ /dev/null @@ -1 +0,0 @@ -Hello World! \ No newline at end of file diff --git a/bundles/org.eclipse.equinox.p2.tests/testData/artifactRepo/packedSiblingsWithUUID/artifacts.xml b/bundles/org.eclipse.equinox.p2.tests/testData/artifactRepo/packedSiblingsWithUUID/artifacts.xml deleted file mode 100644 index 444db993c3..0000000000 --- a/bundles/org.eclipse.equinox.p2.tests/testData/artifactRepo/packedSiblingsWithUUID/artifacts.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - From 43cca0169f63211e01b2ccc919d4df11de23db54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=8A?= =?UTF-8?q?=D1=80=20=D0=9A=D1=83=D1=80=D1=82=D0=B0=D0=BA=D0=BE=D0=B2?= Date: Thu, 7 Sep 2023 12:45:27 +0300 Subject: [PATCH 4/4] Version bumps for 4.30 stream --- .../META-INF/MANIFEST.MF | 2 +- features/org.eclipse.equinox.p2.core.feature/feature.xml | 2 +- features/org.eclipse.equinox.p2.extras.feature/feature.xml | 2 +- features/org.eclipse.equinox.p2.rcp.feature/feature.xml | 2 +- features/org.eclipse.equinox.p2.sdk/feature.xml | 2 +- features/org.eclipse.equinox.p2.user.ui/feature.xml | 2 +- features/org.eclipse.equinox.server.p2/feature.xml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/bundles/org.eclipse.equinox.p2.artifact.repository/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.p2.artifact.repository/META-INF/MANIFEST.MF index 044be035e7..7ff861b408 100644 --- a/bundles/org.eclipse.equinox.p2.artifact.repository/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.equinox.p2.artifact.repository/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.equinox.p2.artifact.repository;singleton:=true -Bundle-Version: 1.5.100.qualifier +Bundle-Version: 1.5.200.qualifier Bundle-Activator: org.eclipse.equinox.internal.p2.artifact.repository.Activator Bundle-Vendor: %providerName Bundle-Localization: plugin diff --git a/features/org.eclipse.equinox.p2.core.feature/feature.xml b/features/org.eclipse.equinox.p2.core.feature/feature.xml index 60c4ee3f6b..4a72e22b84 100644 --- a/features/org.eclipse.equinox.p2.core.feature/feature.xml +++ b/features/org.eclipse.equinox.p2.core.feature/feature.xml @@ -2,7 +2,7 @@ diff --git a/features/org.eclipse.equinox.p2.extras.feature/feature.xml b/features/org.eclipse.equinox.p2.extras.feature/feature.xml index 688e4c58ee..38ba2e1639 100644 --- a/features/org.eclipse.equinox.p2.extras.feature/feature.xml +++ b/features/org.eclipse.equinox.p2.extras.feature/feature.xml @@ -2,7 +2,7 @@ diff --git a/features/org.eclipse.equinox.p2.rcp.feature/feature.xml b/features/org.eclipse.equinox.p2.rcp.feature/feature.xml index 363856056b..10207bbdad 100644 --- a/features/org.eclipse.equinox.p2.rcp.feature/feature.xml +++ b/features/org.eclipse.equinox.p2.rcp.feature/feature.xml @@ -2,7 +2,7 @@ diff --git a/features/org.eclipse.equinox.p2.sdk/feature.xml b/features/org.eclipse.equinox.p2.sdk/feature.xml index 2e71988a73..b156869c3a 100644 --- a/features/org.eclipse.equinox.p2.sdk/feature.xml +++ b/features/org.eclipse.equinox.p2.sdk/feature.xml @@ -2,7 +2,7 @@ diff --git a/features/org.eclipse.equinox.p2.user.ui/feature.xml b/features/org.eclipse.equinox.p2.user.ui/feature.xml index 99e59190b0..4192e94fed 100644 --- a/features/org.eclipse.equinox.p2.user.ui/feature.xml +++ b/features/org.eclipse.equinox.p2.user.ui/feature.xml @@ -2,7 +2,7 @@ diff --git a/features/org.eclipse.equinox.server.p2/feature.xml b/features/org.eclipse.equinox.server.p2/feature.xml index 17d36367f1..e97592278f 100644 --- a/features/org.eclipse.equinox.server.p2/feature.xml +++ b/features/org.eclipse.equinox.server.p2/feature.xml @@ -2,7 +2,7 @@