diff options
author | Pascal Rapicault | 2010-08-18 15:57:42 +0000 |
---|---|---|
committer | Pascal Rapicault | 2010-08-18 15:57:42 +0000 |
commit | 25d4506a68edf084ad53e317101671103a570749 (patch) | |
tree | e993459596e186dc9a40308d995c5daf6ced2f6e | |
parent | 50720f351c6e67222729f406fcdf6a81feccfdd7 (diff) | |
download | rt.equinox.p2-25d4506a68edf084ad53e317101671103a570749.tar.gz rt.equinox.p2-25d4506a68edf084ad53e317101671103a570749.tar.xz rt.equinox.p2-25d4506a68edf084ad53e317101671103a570749.zip |
Bug 313747 - SimpleArtifactRepository fails to transfer files when its location is relative
2 files changed, 21 insertions, 1 deletions
diff --git a/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java b/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java index 343ec0a44..c07dc1061 100644 --- a/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java +++ b/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java @@ -708,7 +708,8 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme if (result != null) { if (isFolderBased(descriptor) && URIUtil.lastSegment(result).endsWith(JAR_EXTENSION)) return URIUtil.removeFileExtension(result); - + if (result.getScheme() == null && "file".equals(getLocation().getScheme())) //$NON-NLS-1$ + return URIUtil.makeAbsolute(result, new File(System.getProperty("user.dir")).toURI()); //$NON-NLS-1$ return result; } } diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/SimpleArtifactRepositoryTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/SimpleArtifactRepositoryTest.java index 8324b7a0d..5ab2f2a24 100644 --- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/SimpleArtifactRepositoryTest.java +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/SimpleArtifactRepositoryTest.java @@ -257,6 +257,25 @@ public class SimpleArtifactRepositoryTest extends AbstractProvisioningTest { } } + public void testRelativeRepositoryLocation() throws ProvisionException { + IArtifactDescriptor descriptor = new ArtifactDescriptor(new ArtifactKey("osgi.bundle", "helloworld", Version.createOSGi(1, 0, 0))); + URI repo = getTestData("CorruptedJar repo", "testData/artifactRepo/jarfiles").toURI(); + + SimpleArtifactRepository absRepo = (SimpleArtifactRepository) getArtifactRepositoryManager().loadRepository(repo, new NullProgressMonitor()); + URI absLocation = absRepo.getLocation(descriptor); + getArtifactRepositoryManager().removeRepository(repo); + + repo = new File(System.getProperty("user.dir")).toURI().relativize(repo); + repo = URI.create("file:" + repo.toString()); + + SimpleArtifactRepository repository = (SimpleArtifactRepository) getArtifactRepositoryManager().loadRepository(repo, new NullProgressMonitor()); + + URI location = repository.getLocation(descriptor); + assertNotNull("NULL Scheme", location.getScheme()); + assertTrue("File location is relative", location.isAbsolute()); + assertEquals("Path from relative & absolute repos differ", absLocation, location); + } + private static class TestDescriptor implements IArtifactDescriptor { private static final IProcessingStepDescriptor[] steps = new IProcessingStepDescriptor[0]; private IArtifactKey artifactKey; |