6c088e
From 6405dfa42ff8d12fb6f810041aa89243f6ae7433 Mon Sep 17 00:00:00 2001
6c088e
From: Stanislav Ochotnicky <sochotnicky@redhat.com>
6c088e
Date: Wed, 4 Dec 2013 17:47:06 +0100
6c088e
Subject: [PATCH 1/3] Support absolute symlinks in SCLs in mvn_file
6c088e
 (rhbz#1038553)
6c088e
6c088e
---
6c088e
 java-utils/mvn_file.py                 | 11 +++++------
6c088e
 python/javapackages/xmvn_config.py     | 10 ++++++----
6c088e
 test/data/mvn_file/absolute1_00001.xml |  3 ++-
6c088e
 test/mvn_file_test.py                  | 27 +++++----------------------
6c088e
 4 files changed, 18 insertions(+), 33 deletions(-)
6c088e
6c088e
diff --git a/java-utils/mvn_file.py b/java-utils/mvn_file.py
6c088e
index e059129..c59ed6c 100644
6c088e
--- a/java-utils/mvn_file.py
6c088e
+++ b/java-utils/mvn_file.py
6c088e
@@ -35,7 +35,7 @@ import sys
6c088e
 
6c088e
 from javapackages.artifact import (Artifact, ArtifactFormatException,
6c088e
                                    ArtifactValidationException)
6c088e
-from javapackages.xmvn_config import XMvnConfig
6c088e
+from javapackages.xmvn_config import XMvnConfig, XMvnConfigException
6c088e
 
6c088e
 class SaneParser(optparse.OptionParser):
6c088e
     def format_epilog(self, formatter):
6c088e
@@ -61,10 +61,6 @@ commons-lang:commons-lang:war:test-jar:3.1
6c088e
 if __name__ == "__main__":
6c088e
     parser = SaneParser(usage=usage,
6c088e
                         epilog=epilog)
6c088e
-    parser.add_option("-p", "--prefix",
6c088e
-                      help="Set prefix for converting absolute paths to "+
6c088e
-                           "relative",
6c088e
-                      default="/usr/share/java")
6c088e
     for index, arg in enumerate(sys.argv):
6c088e
         sys.argv[index] = arg.decode(sys.getfilesystemencoding())
6c088e
 
6c088e
@@ -75,8 +71,11 @@ if __name__ == "__main__":
6c088e
     try:
6c088e
         orig = Artifact.from_mvn_str(args[0])
6c088e
         orig.validate(allow_backref=False)
6c088e
-        XMvnConfig().add_file_mapping(orig, args[1:], options.prefix)
6c088e
+        XMvnConfig().add_file_mapping(orig, args[1:])
6c088e
     except (ArtifactValidationException, ArtifactFormatException), e:
6c088e
         parser.error("{e}: Provided artifact strings were invalid. "
6c088e
                      "Please see help  and check your arguments".format(e=e))
6c088e
         sys.exit(1)
6c088e
+    except XMvnConfigException, e:
6c088e
+        parser.error("Incorrect configuration: {e}".format(e=e))
6c088e
+        sys.exit(1)
6c088e
diff --git a/python/javapackages/xmvn_config.py b/python/javapackages/xmvn_config.py
6c088e
index 838bde9..da22f0b 100644
6c088e
--- a/python/javapackages/xmvn_config.py
6c088e
+++ b/python/javapackages/xmvn_config.py
6c088e
@@ -43,6 +43,9 @@ from lxml.etree import ElementTree, Element, SubElement
6c088e
 
6c088e
 from javapackages.artifact import ArtifactValidationException
6c088e
 
6c088e
+class XMvnConfigException(Exception):
6c088e
+    pass
6c088e
+
6c088e
 class XMvnConfig(object):
6c088e
     """
6c088e
     Class for modifying XMvn configuration
6c088e
@@ -205,7 +208,7 @@ class XMvnConfig(object):
6c088e
         elems.append(velem)
6c088e
         self.__add_config("artifactManagement", "rule", content=elems)
6c088e
 
6c088e
-    def add_file_mapping(self, artifact, paths, prefix="/"):
6c088e
+    def add_file_mapping(self, artifact, paths):
6c088e
         """
6c088e
         Change where on filesystem given artifact is installed
6c088e
 
6c088e
@@ -217,6 +220,8 @@ class XMvnConfig(object):
6c088e
         main = artifact.get_xml_element(root="artifactGlob")
6c088e
         elems = [main]
6c088e
         felem = Element("files")
6c088e
+        if not [path for path in paths if not os.path.isabs(path)]:
6c088e
+            raise XMvnConfigException("At least one path must be relative")
6c088e
         for path in paths:
6c088e
             backrefs = self.__count_backreferences(path)
6c088e
             if backrefs > wild_groups:
6c088e
@@ -224,9 +229,6 @@ class XMvnConfig(object):
6c088e
                                                   "is higher than wildcard "
6c088e
                                                   "groups.")
6c088e
             pe = SubElement(felem, "file")
6c088e
-
6c088e
-            if os.path.isabs(path):
6c088e
-                path = os.path.relpath(path, prefix)
6c088e
             pe.text = path
6c088e
         elems.append(felem)
6c088e
         self.__add_config("artifactManagement", "rule", content=elems)
6c088e
diff --git a/test/data/mvn_file/absolute1_00001.xml b/test/data/mvn_file/absolute1_00001.xml
6c088e
index 82aeba1..2a56449 100644
6c088e
--- a/test/data/mvn_file/absolute1_00001.xml
6c088e
+++ b/test/data/mvn_file/absolute1_00001.xml
6c088e
@@ -11,7 +11,8 @@
6c088e
 	<groupId>a</groupId>
6c088e
       </artifactGlob>
6c088e
       <files>
6c088e
-	<file>sym</file>
6c088e
+        <file>file</file>
6c088e
+        <file>/usr/share/java/sym</file>
6c088e
       </files>
6c088e
     </rule>
6c088e
   </artifactManagement>
6c088e
diff --git a/test/mvn_file_test.py b/test/mvn_file_test.py
6c088e
index 09a2648..4792497 100644
6c088e
--- a/test/mvn_file_test.py
6c088e
+++ b/test/mvn_file_test.py
6c088e
@@ -234,7 +234,7 @@ class TestMvnFile(unittest.TestCase):
6c088e
                  ['artifactGlob'])
6c088e
             self.assertFalse(report, '\n' + report)
6c088e
 
6c088e
-    @xmvnconfig('mvn_file',['a:b', '/usr/share/java/sym', ])
6c088e
+    @xmvnconfig('mvn_file',['a:b', 'file', '/usr/share/java/sym'])
6c088e
     def test_absolute1(self, stdout, stderr, return_value):
6c088e
         self.assertEquals(return_value, 0)
6c088e
         filelist = get_config_file_list()
6c088e
@@ -245,27 +245,10 @@ class TestMvnFile(unittest.TestCase):
6c088e
                  ['artifactGlob'])
6c088e
             self.assertFalse(report, '\n' + report)
6c088e
 
6c088e
-    @xmvnconfig('mvn_file',['-p', '/usr/share/', 'a:b', '/usr/share/sym', ])
6c088e
-    def test_prefix1(self, stdout, stderr, return_value):
6c088e
-        self.assertEquals(return_value, 0)
6c088e
-        filelist = get_config_file_list()
6c088e
-        self.assertEquals(len(filelist), 1)
6c088e
-        for filename in filelist:
6c088e
-            report = compare_xml_files(get_actual_config(filename),
6c088e
-                 get_expected_config(filename, 'mvn_file', 'prefix1'),
6c088e
-                 ['artifactGlob'])
6c088e
-            self.assertFalse(report, '\n' + report)
6c088e
-
6c088e
-    @xmvnconfig('mvn_file',['-p', '/usr', 'a:b', '/usr/share/sym', ])
6c088e
-    def test_prefix2(self, stdout, stderr, return_value):
6c088e
-        self.assertEquals(return_value, 0)
6c088e
-        filelist = get_config_file_list()
6c088e
-        self.assertEquals(len(filelist), 1)
6c088e
-        for filename in filelist:
6c088e
-            report = compare_xml_files(get_actual_config(filename),
6c088e
-                 get_expected_config(filename, 'mvn_file', 'prefix2'),
6c088e
-                 ['artifactGlob'])
6c088e
-            self.assertFalse(report, '\n' + report)
6c088e
+    @xmvnconfig('mvn_file',['a:b', '/usr/share/java/sym', ])
6c088e
+    def test_absolute2(self, stdout, stderr, return_value):
6c088e
+        self.assertNotEqual(return_value, 0)
6c088e
+        self.assertTrue(stderr)
6c088e
 
6c088e
 if __name__ == '__main__':
6c088e
     unittest.main()
6c088e
-- 
6c088e
1.9.0
6c088e