Apply snapshot versions to dependencies
diff --git a/src/main/groovy/m4e/PatchCmd.groovy b/src/main/groovy/m4e/PatchCmd.groovy
index a554afd..57a998e 100644
--- a/src/main/groovy/m4e/PatchCmd.groovy
+++ b/src/main/groovy/m4e/PatchCmd.groovy
@@ -13,6 +13,7 @@
 import java.util.regex.Pattern;
 import groovy.transform.ToString;
 import m4e.maven.ImportExportDB;
+import m4e.p2.Version
 import m4e.patch.ArtifactRenamer
 import m4e.patch.DeleteClasses
 import m4e.patch.DeleteEmptyDirectories
@@ -21,6 +22,7 @@
 import m4e.patch.OrbitPatch
 import m4e.patch.PatchLoader
 import m4e.patch.PatchSet
+import m4e.patch.QualifierPatch
 import m4e.patch.RemoveNonOptional
 import m4e.patch.StripQualifiers
 import org.codehaus.groovy.control.CompilerConfiguration;
@@ -173,9 +175,35 @@
     GlobalPatches globalPatches = new GlobalPatches()
     
     void init() {
+        assert target != null
+        
         globalPatches.orbitExclusions << 'org.eclipse.*'
         
         set = new PatchSet()
+        
+        convertSnapshotVersionsToPatches()
+    }
+    
+    void convertSnapshotVersionsToPatches() {
+        File snapshotVersionMapping = new File( target, "${MT4E_FOLDER}/${SNAPSHOT_VERSION_MAPPING_FILE}" )
+        if( !snapshotVersionMapping.exists() ) {
+            return
+        }
+        
+        loadSnapshotVersionsFromFile( snapshotVersionMapping )
+    }
+    
+    void loadSnapshotVersionsFromFile( File snapshotVersionMapping ) {
+        snapshotVersionMapping.eachLine( UTF_8 ) {
+            def (shortKey, eclipseVersion, mavenVersion) = it.split( ' ' )
+            
+            String pattern = "${shortKey}:${eclipseVersion}"
+            globalPatches.qualifierPatches << new QualifierPatch( pattern, mavenVersion )
+            
+            def version = new Version( eclipseVersion )
+            pattern = "${shortKey}:[${version.shortVersion()},)"
+            globalPatches.qualifierPatches << new QualifierPatch( pattern, mavenVersion )
+        }
     }
     
     PatchSet deleteClasses = new PatchSet()
diff --git a/src/test/groovy/m4e/PatchCmdTest.groovy b/src/test/groovy/m4e/PatchCmdTest.groovy
index 066d077..63c978b 100644
--- a/src/test/groovy/m4e/PatchCmdTest.groovy
+++ b/src/test/groovy/m4e/PatchCmdTest.groovy
@@ -21,6 +21,7 @@
     public void testGoogleInject() throws Exception {
         
         def tool = new PatchCmd()
+        tool.target = CommonTestCode.newFile( 'testGoogleInject' )
         tool.init()
         
         tool.loadPatches( 'data/input/googleInject.patch' )
diff --git a/src/test/groovy/m4e/patch/OrbitPatchTest.groovy b/src/test/groovy/m4e/patch/OrbitPatchTest.groovy
index f6b646b..4260780 100644
--- a/src/test/groovy/m4e/patch/OrbitPatchTest.groovy
+++ b/src/test/groovy/m4e/patch/OrbitPatchTest.groovy
@@ -151,6 +151,7 @@
     public void testProfilePatching() throws Exception {
         
         def tool = new PatchCmd()
+        tool.target = CommonTestCode.newFile( 'testProfilePatching' )
         tool.init()
         
         tool.globalPatches.defaultProfile = 'm4e.orbit'
diff --git a/src/test/groovy/m4e/patch/PatchLoaderTest.groovy b/src/test/groovy/m4e/patch/PatchLoaderTest.groovy
index 4e51140..3e211fe 100644
--- a/src/test/groovy/m4e/patch/PatchLoaderTest.groovy
+++ b/src/test/groovy/m4e/patch/PatchLoaderTest.groovy
@@ -72,8 +72,12 @@
     
     void loadAndPatch( String fileName ) throws Exception {
         MopSetup.setup()
+
+        def dir = CommonTestCode.newFile( 'patchLoaderTest' )
+        dir.makedirs()
         
         PatchCmd cmd = new PatchCmd()
+        cmd.target = dir
         cmd.init()
         
         cmd.loadPatches( 'patches/eclipse-3.6.2.patches' )
@@ -81,9 +85,6 @@
         def file = new File( 'data/input', fileName )
         def expectedFile = new File( 'data/expected', fileName )
         
-        def dir = CommonTestCode.newFile( 'patchLoaderTest' )
-        dir.makedirs()
-        
         def copy = new File( dir, fileName )
         file.copy( copy )
         
diff --git a/src/test/groovy/m4e/patch/StripQualifiersTest.groovy b/src/test/groovy/m4e/patch/StripQualifiersTest.groovy
index 8d2f775..c9de3fc 100644
--- a/src/test/groovy/m4e/patch/StripQualifiersTest.groovy
+++ b/src/test/groovy/m4e/patch/StripQualifiersTest.groovy
@@ -12,13 +12,14 @@
 
 import static org.junit.Assert.*;
 import java.io.File;
+import m4e.CommonConstants;
 import m4e.CommonTestCode;
 import m4e.MopSetup;
 import m4e.PatchCmd
 import m4e.Pom;
 import org.junit.Test;
 
-class StripQualifiersTest {
+class StripQualifiersTest extends CommonTestCode implements CommonConstants {
     
     @Test
     public void testNoVersion1() throws Exception {
@@ -88,7 +89,7 @@
     @Test
     public void testStripQualifierFromPomVersion() throws Exception {
         
-        File target = CommonTestCode.prepareRepo( new File( 'data/input/stripQualifier' ), 'testStripQualifierFromPomVersion/m2repo' )
+        File target = prepareRepo( new File( 'data/input/stripQualifier' ), 'testStripQualifierFromPomVersion/m2repo' )
         
         def tool = new PatchCmd( target: target )
         tool.init()
@@ -113,7 +114,7 @@
 org/eclipse/swt/org.eclipse.swt.gtk.linux.x86/3.7.1/org.eclipse.swt.gtk.linux.x86-3.7.1.pom.bak
 org/eclipse/swt/org.eclipse.swt.gtk.linux.x86/3.7.1/org.eclipse.swt.gtk.linux.x86-3.7.1.sha1
 org/eclipse/swt/org.eclipse.swt.gtk.linux.x86/3.7.1/org.eclipse.swt.gtk.linux.x86-3.7.1xxx'''
-            , CommonTestCode.listFiles( target ) )
+            , listFiles( target ) )
         
         File dir = new File( target, 'org/eclipse/swt/org.eclipse.swt.gtk.linux.x86' )
         def pom = Pom.load( new File( dir, '3.7.1/org.eclipse.swt.gtk.linux.x86-3.7.1.pom' ) )
@@ -123,7 +124,7 @@
         File newDir = new File( dir, pom.version() )
         assert newDir.exists()
 
-        CommonTestCode.fileEquals( '''\
+        fileEquals( '''\
 <?xml version="1.0" encoding="UTF-8"?>
 <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
@@ -157,7 +158,7 @@
         newDir = new File( dir, pom.version() )
         assert newDir.exists()
         
-        CommonTestCode.fileEquals( '''\
+        fileEquals( '''\
 <?xml version="1.0" encoding="UTF-8"?>
 <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
@@ -185,7 +186,7 @@
         newDir = new File( dir, pom.version() )
         assert newDir.exists()
         
-        CommonTestCode.fileEquals( '''\
+        fileEquals( '''\
 <?xml version="1.0" encoding="UTF-8"?>
 <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
@@ -219,4 +220,42 @@
 </project>''',
             new File( newDir, 'org.apache.batik.dom-1.6.0.pom' ) )
     }
+    
+    @Test
+    public void testSnapshotDependencies() throws Exception {
+        
+        File target = newFile( 'testSnapshotDependencies' )
+        
+        def file = new File( target, "${MT4E_FOLDER}/${SNAPSHOT_VERSION_MAPPING_FILE}" )
+        file.parentFile?.makedirs()
+        file << "de.itemis.xtext:de.itemis.xtext.typesystem 2.0.5.201205161310 2.0.5-SNAPSHOT\n"
+        
+        def tool = new PatchCmd( target: target )
+        tool.init()
+
+        tool.loadPatches()
+        
+        def input = '''\
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>com.avanon.eclipse</groupId>
+  <artifactId>com.avanon.eclipse.pm-dsl</artifactId>
+  <version>2.2.0-SNAPSHOT</version>
+  <name>DSL for Parameter Model</name>
+  <dependencies>
+    <dependency>
+      <groupId>de.itemis.xtext</groupId>
+      <artifactId>de.itemis.xtext.typesystem</artifactId>
+      <version>[2.0.5,)</version>
+    </dependency>
+  </dependencies>
+</project>'''
+
+        def pom = Pom.load( input )
+        tool.patchPom( pom )
+        
+        assertEquals( input.replace( '<version>[2.0.5,)</version>' ,'<version>2.0.5-SNAPSHOT</version>' ), pom.toString() )
+    }
 }