|
|
a5fc8a |
From 5ba0fab707d9a4bf7ba46d5bf17887f91ad16ca4 Mon Sep 17 00:00:00 2001
|
|
|
a5fc8a |
From: Mikolaj Izdebski <mizdebsk@redhat.com>
|
|
|
a5fc8a |
Date: Mon, 6 Jan 2014 14:45:06 +0100
|
|
|
a5fc8a |
Subject: [PATCH 4/4] Add support for absolute artifact symlinks
|
|
|
a5fc8a |
|
|
|
a5fc8a |
[backport-feature-absolute-symlinks]
|
|
|
a5fc8a |
---
|
|
|
a5fc8a |
.../maven/installer/impl/DefaultInstaller.java | 51 +++++++++++++++++-----
|
|
|
a5fc8a |
.../maven/installer/impl/Package.java | 6 ++-
|
|
|
a5fc8a |
2 files changed, 46 insertions(+), 11 deletions(-)
|
|
|
a5fc8a |
|
|
|
a5fc8a |
diff --git a/xmvn-core/src/main/java/org/fedoraproject/maven/installer/impl/DefaultInstaller.java b/xmvn-core/src/main/java/org/fedoraproject/maven/installer/impl/DefaultInstaller.java
|
|
|
a5fc8a |
index e22905f..efaeeaf 100644
|
|
|
a5fc8a |
--- a/xmvn-core/src/main/java/org/fedoraproject/maven/installer/impl/DefaultInstaller.java
|
|
|
a5fc8a |
+++ b/xmvn-core/src/main/java/org/fedoraproject/maven/installer/impl/DefaultInstaller.java
|
|
|
a5fc8a |
@@ -255,8 +255,7 @@ public class DefaultInstaller
|
|
|
a5fc8a |
for ( Path basePath : basePaths )
|
|
|
a5fc8a |
{
|
|
|
a5fc8a |
if ( basePath.isAbsolute() )
|
|
|
a5fc8a |
- throw new RuntimeException( "Absolute JPP artifact paths are not supported: artifact: " + artifact
|
|
|
a5fc8a |
- + ", path: " + basePath );
|
|
|
a5fc8a |
+ continue;
|
|
|
a5fc8a |
|
|
|
a5fc8a |
Path jppName = basePath.getFileName();
|
|
|
a5fc8a |
Path jppGroup = Paths.get( "JPP" );
|
|
|
a5fc8a |
@@ -280,9 +279,35 @@ public class DefaultInstaller
|
|
|
a5fc8a |
}
|
|
|
a5fc8a |
}
|
|
|
a5fc8a |
|
|
|
a5fc8a |
+ if ( jppArtifacts.isEmpty() )
|
|
|
a5fc8a |
+ throw new RuntimeException( "At least one non-absolute file must be specified for artifact " + artifact );
|
|
|
a5fc8a |
+
|
|
|
a5fc8a |
return jppArtifacts;
|
|
|
a5fc8a |
}
|
|
|
a5fc8a |
|
|
|
a5fc8a |
+ private void installAbsoluteSymlinks( Package pkg, Artifact artifact, PackagingRule rule, Path symlinkTarget )
|
|
|
a5fc8a |
+ throws IOException
|
|
|
a5fc8a |
+ {
|
|
|
a5fc8a |
+ List<String> versionSuffixes = new ArrayList<>();
|
|
|
a5fc8a |
+ for ( String version : rule.getVersions() )
|
|
|
a5fc8a |
+ versionSuffixes.add( "-" + version );
|
|
|
a5fc8a |
+ if ( rule.getVersions().isEmpty() )
|
|
|
a5fc8a |
+ versionSuffixes.add( "" );
|
|
|
a5fc8a |
+
|
|
|
a5fc8a |
+ for ( String filePath : rule.getFiles() )
|
|
|
a5fc8a |
+ {
|
|
|
a5fc8a |
+ String classifierSuffix = artifact.getClassifier().isEmpty() ? "" : "-" + artifact.getClassifier();
|
|
|
a5fc8a |
+ String extensionSuffix = artifact.getExtension().isEmpty() ? "" : "." + artifact.getExtension();
|
|
|
a5fc8a |
+
|
|
|
a5fc8a |
+ for ( String versionSuffix : versionSuffixes )
|
|
|
a5fc8a |
+ {
|
|
|
a5fc8a |
+ Path symlink = Paths.get( filePath + versionSuffix + classifierSuffix + extensionSuffix );
|
|
|
a5fc8a |
+ if ( symlink.isAbsolute() )
|
|
|
a5fc8a |
+ pkg.addSymlink( Paths.get( "/" ).relativize( symlink ), symlinkTarget );
|
|
|
a5fc8a |
+ }
|
|
|
a5fc8a |
+ }
|
|
|
a5fc8a |
+ }
|
|
|
a5fc8a |
+
|
|
|
a5fc8a |
private void installArtifact( Package pkg, Artifact artifact, List<Artifact> aliases, List<Artifact> jppArtifacts )
|
|
|
a5fc8a |
throws IOException
|
|
|
a5fc8a |
{
|
|
|
a5fc8a |
@@ -586,18 +611,24 @@ public class DefaultInstaller
|
|
|
a5fc8a |
|
|
|
a5fc8a |
develArtifacts.add( artifact );
|
|
|
a5fc8a |
}
|
|
|
a5fc8a |
- else if ( !isAttachedArtifact )
|
|
|
a5fc8a |
+ else
|
|
|
a5fc8a |
{
|
|
|
a5fc8a |
- installPomFiles( pkg, artifact, jppArtifacts );
|
|
|
a5fc8a |
+ Path primaryJppArtifactPath = jppArtifacts.iterator().next().getFile().toPath();
|
|
|
a5fc8a |
+ installAbsoluteSymlinks( pkg, artifact, rule, primaryJppArtifactPath );
|
|
|
a5fc8a |
|
|
|
a5fc8a |
- Set<Artifact> userArtifacts = packageUserArtifacts.get( pkg );
|
|
|
a5fc8a |
- if ( userArtifacts == null )
|
|
|
a5fc8a |
+ if ( !isAttachedArtifact )
|
|
|
a5fc8a |
{
|
|
|
a5fc8a |
- userArtifacts = new LinkedHashSet<>();
|
|
|
a5fc8a |
- packageUserArtifacts.put( pkg, userArtifacts );
|
|
|
a5fc8a |
- }
|
|
|
a5fc8a |
+ installPomFiles( pkg, artifact, jppArtifacts );
|
|
|
a5fc8a |
|
|
|
a5fc8a |
- userArtifacts.add( artifact );
|
|
|
a5fc8a |
+ Set<Artifact> userArtifacts = packageUserArtifacts.get( pkg );
|
|
|
a5fc8a |
+ if ( userArtifacts == null )
|
|
|
a5fc8a |
+ {
|
|
|
a5fc8a |
+ userArtifacts = new LinkedHashSet<>();
|
|
|
a5fc8a |
+ packageUserArtifacts.put( pkg, userArtifacts );
|
|
|
a5fc8a |
+ }
|
|
|
a5fc8a |
+
|
|
|
a5fc8a |
+ userArtifacts.add( artifact );
|
|
|
a5fc8a |
+ }
|
|
|
a5fc8a |
}
|
|
|
a5fc8a |
}
|
|
|
a5fc8a |
|
|
|
a5fc8a |
diff --git a/xmvn-core/src/main/java/org/fedoraproject/maven/installer/impl/Package.java b/xmvn-core/src/main/java/org/fedoraproject/maven/installer/impl/Package.java
|
|
|
a5fc8a |
index 104c53d..79140a6 100644
|
|
|
a5fc8a |
--- a/xmvn-core/src/main/java/org/fedoraproject/maven/installer/impl/Package.java
|
|
|
a5fc8a |
+++ b/xmvn-core/src/main/java/org/fedoraproject/maven/installer/impl/Package.java
|
|
|
a5fc8a |
@@ -83,7 +83,11 @@ class Package
|
|
|
a5fc8a |
|
|
|
a5fc8a |
public void addFile( Path file, Path target, int mode )
|
|
|
a5fc8a |
{
|
|
|
a5fc8a |
- addFile( file, target.getParent(), target.getFileName(), mode );
|
|
|
a5fc8a |
+ Path parent = target.getParent();
|
|
|
a5fc8a |
+ if ( parent == null )
|
|
|
a5fc8a |
+ parent = Paths.get( "." );
|
|
|
a5fc8a |
+
|
|
|
a5fc8a |
+ addFile( file, parent, target.getFileName(), mode );
|
|
|
a5fc8a |
}
|
|
|
a5fc8a |
|
|
|
a5fc8a |
public void addSymlink( Path symlinkFile, Path symlinkTarget )
|
|
|
a5fc8a |
--
|
|
|
a5fc8a |
1.8.4.2
|
|
|
a5fc8a |
|