Blame SOURCES/0004-Add-support-for-absolute-artifact-symlinks.patch

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