diff options
2 files changed, 28 insertions, 10 deletions
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/ProfileBundleContainer.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/ProfileBundleContainer.java index 2e3bc0cdf3..901b8f82a5 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/ProfileBundleContainer.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/ProfileBundleContainer.java @@ -128,7 +128,7 @@ public class ProfileBundleContainer extends AbstractBundleContainer { BundleInfo[] infos = P2Utils.readBundles(home, configurationArea); if (infos == null) { if (configurationArea != null) { - Collection<TargetBundle> osgiBundles = readBundleInfosFromConfigIni(configurationArea); + Collection<TargetBundle> osgiBundles = readBundleInfosFromConfigIni(configurationArea, new File(home)); if (!osgiBundles.isEmpty()) { return osgiBundles.toArray(new TargetBundle[0]); } @@ -167,7 +167,7 @@ public class ProfileBundleContainer extends AbstractBundleContainer { }).filter(Objects::nonNull).toArray(TargetBundle[]::new); } - private Collection<TargetBundle> readBundleInfosFromConfigIni(File configArea) { + private Collection<TargetBundle> readBundleInfosFromConfigIni(File configArea, File home) { File configIni = new File(configArea, CONFIG_INI); if (!configIni.isFile()) { return emptyList(); @@ -180,7 +180,7 @@ public class ProfileBundleContainer extends AbstractBundleContainer { return emptyList(); } - List<File> bundleFiles = parseBundlesFromConfigIni(configProps); + List<File> bundleFiles = parseBundlesFromConfigIni(configProps, home); ArrayList<TargetBundle> bundles = new ArrayList<>(); for (File file : bundleFiles) { if (!file.exists()) { @@ -197,7 +197,7 @@ public class ProfileBundleContainer extends AbstractBundleContainer { return bundles; } - public static List<File> parseBundlesFromConfigIni(Properties configProps) { + public static List<File> parseBundlesFromConfigIni(Properties configProps, File home) { String osgiBundles = configProps.getProperty("osgi.bundles"); //$NON-NLS-1$ if (osgiBundles == null || osgiBundles.isEmpty()) { return emptyList(); @@ -209,6 +209,9 @@ public class ProfileBundleContainer extends AbstractBundleContainer { String osgiFramework = configProps.getProperty("osgi.framework"); //$NON-NLS-1$ if (osgiFramework != null) { File frameworkBundle = parseBundleLocation(osgiFramework); + if (!frameworkBundle.isAbsolute()) { + frameworkBundle = new File(home, frameworkBundle.getPath()); + } bundles.add(frameworkBundle); baseDir = frameworkBundle.getParentFile(); } diff --git a/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/target/ProfileContainerTests.java b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/target/ProfileContainerTests.java index fb1c79afc8..755df202b7 100644 --- a/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/target/ProfileContainerTests.java +++ b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/target/ProfileContainerTests.java @@ -41,7 +41,7 @@ public class ProfileContainerTests extends AbstractTargetTest { configIni.put("osgi.bundles", absoluteFile("plugins/some.bundle").toURI() + ","// + "reference:" + absoluteFile("plugins/some.bundle_startlevel").toURI() + "@1:start"); - Collection<File> parsedBundles = ProfileBundleContainer.parseBundlesFromConfigIni(configIni); + Collection<File> parsedBundles = ProfileBundleContainer.parseBundlesFromConfigIni(configIni, new File(".")); assertEquals(Arrays.asList( // absoluteFile("plugins/some.bundle"), // absoluteFile("plugins/some.bundle_startlevel")), // @@ -55,7 +55,7 @@ public class ProfileContainerTests extends AbstractTargetTest { + "reference:file:plugins/some.bundle_startlevel@1:start," // + "reference:" + absoluteFile("absolute.bundle").toURI()); - Collection<File> parsedBundles = ProfileBundleContainer.parseBundlesFromConfigIni(configIni); + Collection<File> parsedBundles = ProfileBundleContainer.parseBundlesFromConfigIni(configIni, new File(".")); assertEquals(Arrays.asList( // new File("plugins/some.bundle"), // new File("plugins/some.bundle_startlevel"), // @@ -71,15 +71,30 @@ public class ProfileContainerTests extends AbstractTargetTest { + "reference:" + absoluteFile("absolute.bundle").toURI()); configIni.put("osgi.framework", "file:plugins/o.e.osgi.jar"); - Collection<File> parsedBundles = ProfileBundleContainer.parseBundlesFromConfigIni(configIni); + Collection<File> parsedBundles = ProfileBundleContainer.parseBundlesFromConfigIni(configIni, new File("/home")); assertEquals(Arrays.asList( // - new File("plugins/o.e.osgi.jar"), // - new File("plugins/some.bundle"), // - new File("plugins/some.bundle_startlevel"), // + new File("/home/plugins/o.e.osgi.jar"), // + new File("/home/plugins/some.bundle"), // + new File("/home/plugins/some.bundle_startlevel"), // absoluteFile("absolute.bundle")), // parsedBundles); } + @Test + public void testParseBundleInfoFromConfigIni_relativeToAbsoluteFramework() { + Properties configIni = new Properties(); + configIni.put("osgi.bundles", "reference:file:some.bundle," // + + "reference:file:some.bundle_startlevel@1:start"); + configIni.put("osgi.framework", absoluteFile("plugins/o.e.osgi.jar").toURI().toString()); + + Collection<File> parsedBundles = ProfileBundleContainer.parseBundlesFromConfigIni(configIni, new File("/home")); + assertEquals(Arrays.asList( // + absoluteFile("plugins/o.e.osgi.jar"), // + absoluteFile("plugins/some.bundle"), // + absoluteFile("plugins/some.bundle_startlevel")), // + parsedBundles); + } + private static File absoluteFile(String path) { return new File(path).getAbsoluteFile(); } |