Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

Merge remote-tracking branch 'mirco/wip' into wip

Conflicts:
	src/main/scala/org/scalaide/buildtools/GenerateEcosystemBuilds.scala
	src/main/scala/org/scalaide/buildtools/P2Repository.scala
  • Loading branch information...
commit b8df106744a23194a41ebb9993ea706cefdffdc8 2 parents 9ea1de0 + 713d752
Luc Bourlier authored October 09, 2012
1  build.sbt
@@ -13,6 +13,7 @@ publishTo := Some("Typesafe IDE" at "https://typesafe.artifactoryonline.com/type
13 13
 credentials += Credentials(Path.userHome / ".credentials")
14 14
 
15 15
 libraryDependencies ++= Seq(
  16
+  "org.osgi" % "org.osgi.core" % "4.3.0", 
16 17
   "net.databinder.dispatch" %% "core" % "0.9.1",
17 18
   "com.typesafe" % "config" % "0.5.2",
18 19
   "junit" % "junit" % "4.8.1" % "test",
6  src/main/scala/org/scalaide/buildtools/Ecosystem.scala
@@ -2,9 +2,9 @@ package org.scalaide.buildtools
2 2
 
3 3
 import java.io.File
4 4
 import java.io.FileWriter
5  
-
6 5
 import scala.io.Source
7 6
 import scala.util.matching.Regex
  7
+import org.osgi.framework.Version
8 8
 
9 9
 object Ecosystem {
10 10
 
@@ -43,11 +43,11 @@ object Ecosystem {
43 43
   def idInManifestWithVersion(id: String) = ("(.*)" + id + """;bundle-version="([^"]*)"(,?.*)""").r
44 44
 
45 45
   /** create the partial function finding the dependency line corresponding to the given id, and set the version */
46  
-  def updateVersionInManifest(id: String, version: String): PartialFunction[String, String] =
  46
+  def updateVersionInManifest(id: String, version: Version): PartialFunction[String, String] =
47 47
     updateVersionInManifest(idInManifestWithVersion(id), idInManifest(id), version)
48 48
 
49 49
   /** method need to create the partial function */
50  
-  private def updateVersionInManifest(idWithVersion: Regex, id: Regex, version: String): PartialFunction[String, String] = {
  50
+  private def updateVersionInManifest(idWithVersion: Regex, id: Regex, version: Version): PartialFunction[String, String] = {
51 51
     case line @ idWithVersion(_, currentVersion, _) =>
52 52
       warning("%s has already a version number defined: %s".format(ScalaLibraryId, currentVersion))
53 53
       line
13  src/main/scala/org/scalaide/buildtools/GenerateEcosystemBuilds.scala
@@ -4,6 +4,7 @@ import java.io.File
4 4
 import scala.annotation.tailrec
5 5
 import scala.collection.mutable.HashMap
6 6
 import java.net.URL
  7
+import org.osgi.framework.Version
7 8
 
8 9
 /**
9 10
  * !!! This object not thread safe !!! It was used in a single threaded system when implemented.
@@ -142,7 +143,7 @@ class GenerateEcosystemBuilds(rootFolder: String) {
142 143
 }
143 144
 
144 145
 case class ScalaIDEDefinition(
145  
-  sdtFeatureVersion: String,
  146
+  sdtFeatureVersion: Version,
146 147
   sdtCoreVersion: Option[DependencyUnit],
147 148
   scalaLibraryVersion: Option[DependencyUnit],
148 149
   scalaCompilerVersion: Option[DependencyUnit], repository: P2Repository)
@@ -168,7 +169,7 @@ object ScalaIDEDefinition {
168 169
   }
169 170
 
170 171
   def allDependencies(du: DependencyUnit, repository: P2Repository): List[DependencyUnit] = {
171  
-    repository.findIU(du.id).filter(iu => matches(iu.version, du.range)) match {
  172
+    repository.findIU(du.id).toList.filter(iu => matches(iu.version, du.range)) match {
172 173
       case Nil =>
173 174
         // not part of this repository, fine
174 175
         Nil
@@ -182,12 +183,12 @@ object ScalaIDEDefinition {
182 183
     }
183 184
   }
184 185
 
185  
-  def matches(version: String, range: String): Boolean = {
  186
+  def matches(version: Version, range: String): Boolean = {
186 187
     range match {
187 188
       case RangeRegex(low, high) if (low == high) =>
188 189
         // we care only about strict versions so far
189 190
         // TODO: may need to improve that
190  
-        version == low
  191
+        version.equals(new Version(low))
191 192
       case _ =>
192 193
         false
193 194
     }
@@ -196,7 +197,7 @@ object ScalaIDEDefinition {
196 197
 
197 198
 case class FeatureDefinition(
198 199
   details: PluginDescriptor,
199  
-  version: String,
  200
+  version: Version,
200 201
   sdtFeatureRange: DependencyUnit,
201 202
   sdtCoreRange: DependencyUnit,
202 203
   scalaLibraryRange: DependencyUnit,
@@ -220,4 +221,4 @@ object FeatureDefinition {
220 221
 
221 222
     new FeatureDefinition(details, iu.version, sdtFeature.get, sdtCore.get, scalaLibrary.get, scalaCompiler.get, repository)
222 223
   }
223  
-}
  224
+}
5  src/main/scala/org/scalaide/buildtools/MavenProject.scala
@@ -3,6 +3,7 @@ package org.scalaide.buildtools
3 3
 import java.io.File
4 4
 import scala.xml.Elem
5 5
 import scala.xml.XML
  6
+import org.osgi.framework.Version
6 7
 
7 8
 object MavenProject {
8 9
   import Ecosystem._
@@ -115,8 +116,8 @@ object MavenProject {
115 116
   private def featureXml(feature: FeatureDefinition): List[Elem] =
116 117
     List(featureXml(feature.details.id, feature.version, feature.details.category)) ++ feature.details.source.map(featureXml(_, feature.version, "source"))
117 118
 
118  
-  private def featureXml(id: String, version: String, category: String): Elem = {
119  
-    <feature url={ "features/" + id + "_0.0.0.jar" } id={ id } version={ version }>
  119
+  private def featureXml(id: String, version: Version, category: String): Elem = {
  120
+    <feature url={ "features/" + id + "_0.0.0.jar" } id={ id } version={ version.toString }>
120 121
       <category name={ category }/>
121 122
     </feature>
122 123
   }
34  src/main/scala/org/scalaide/buildtools/P2Repository.scala
@@ -11,6 +11,8 @@ import scala.xml.Elem
11 11
 import org.xml.sax.SAXException
12 12
 import java.net.{URL => jURL}
13 13
 import scala.xml.Node
  14
+import org.osgi.framework.Version
  15
+import scala.collection.immutable.TreeSet
14 16
 
15 17
 case class DependencyUnit(id: String, range: String)
16 18
 
@@ -26,18 +28,26 @@ object DependencyUnit {
26 28
 
27 29
 }
28 30
 
29  
-case class InstallableUnit(id: String, version: String, dependencies: List[DependencyUnit])
  31
+case class InstallableUnit(id: String, version: Version, dependencies: Seq[DependencyUnit])
30 32
 
31 33
 object InstallableUnit {
32 34
   def apply(unit: Node): Option[InstallableUnit] = {
33 35
     if (isBundle(unit) || isFeature(unit))
34  
-      Some(InstallableUnit(unit \ "@id" text, unit \ "@version" text, getDependencies(unit)))
  36
+      Some(InstallableUnit(unit \ "@id" text, new Version(unit \ "@version" text), getDependencies(unit)))
35 37
     else
36 38
       None
37 39
   }
38 40
 
39  
-  private def getDependencies(unit: Node): List[DependencyUnit] = {
40  
-    (unit \ "requires" \ "required" flatMap {d: Node => DependencyUnit(d)}).toList
  41
+  implicit object DescendingOrdering extends Ordering[InstallableUnit] {
  42
+    override def compare(x: InstallableUnit, y: InstallableUnit): Int = {
  43
+      val diffId = x.id.compareTo(y.id)
  44
+      if(diffId == 0) -1 * x.version.compareTo(y.version) // same bundle name, compare versions
  45
+      else diffId
  46
+    }
  47
+  }
  48
+  
  49
+  private def getDependencies(unit: Node): Seq[DependencyUnit] = {
  50
+    unit \ "requires" \ "required" flatMap (DependencyUnit(_))
41 51
   }
42 52
 
43 53
   private def isBundle(unit: Node) = unit \ "artifacts" \ "artifact" \ "@classifier" exists (a => a.text == "osgi.bundle")
@@ -45,13 +55,10 @@ object InstallableUnit {
45 55
   private def isFeature(unit: Node) = unit \ "properties" \ "property" exists (e => (e \ "@name" text) == "org.eclipse.equinox.p2.type.group" && (e \ "@value" text) == "true")
46 56
 }
47 57
 
48  
-case class P2Repository(uis: Map[String, Seq[InstallableUnit]], location: String) {
  58
+case class P2Repository private(uis: Map[String, TreeSet[InstallableUnit]], location: String) {
49 59
 
50  
-  def findIU(pattern: String): List[InstallableUnit] = {
51  
-    uis.flatMap { entry =>
52  
-      if (entry._1.matches(pattern)) entry._2 else Nil
53  
-    }.toList
54  
-  }
  60
+  def findIU(unitId: String): TreeSet[InstallableUnit] = 
  61
+    uis get (unitId) getOrElse (TreeSet.empty[InstallableUnit])
55 62
   
56 63
   override def toString = "P2Repository(%s)".format(location)
57 64
 
@@ -64,8 +71,9 @@ object P2Repository {
64 71
   def fromXML(contentXml: Elem, location: String): P2Repository = {
65 72
     val unitsXML = (contentXml \ "units" \\ "unit")
66 73
     val units = unitsXML.flatMap(InstallableUnit(_))
67  
-
68  
-    P2Repository(units.groupBy(_.id), location)
  74
+    val grouped = units.groupBy(_.id)
  75
+    val sorted = for((key, values) <- grouped) yield (key, TreeSet(values : _*))
  76
+    P2Repository(sorted, location)
69 77
   }
70 78
 
71 79
   def fromString(content: String): P2Repository = {
@@ -139,4 +147,4 @@ object P2Repository {
139 147
     } finally
140 148
       zipFile.close()
141 149
   }
142  
-}
  150
+}
25  src/main/scala/org/scalaide/buildtools/UpdateAddonManifests.scala
... ...
@@ -1,13 +1,12 @@
1 1
 package org.scalaide.buildtools
2 2
 
3 3
 import java.io.File
4  
-
5 4
 import scala.xml.Attribute
6 5
 import scala.xml.Elem
7 6
 import scala.xml.Null
8 7
 import scala.xml.XML
9  
-
10 8
 import dispatch.Http
  9
+import org.osgi.framework.Version
11 10
 
12 11
 object UpdateAddonManifests {
13 12
   import Ecosystem._
@@ -73,7 +72,7 @@ class UpdateAddonManifests(repoURL: String, rootFolder: String) {
73 72
   /**
74 73
    * Set strict version dependency to Scala IDE in the plugin and features found under the root.
75 74
    */
76  
-  private def updateVersions(scalaIDEVersion: String, scalaLibraryVersion: String, scalaCompilerVersion: String, scalaIDEFeatureVersion: String): Either[String, String] = {
  75
+  private def updateVersions(scalaIDEVersion: Version, scalaLibraryVersion: Version, scalaCompilerVersion: Version, scalaIDEFeatureVersion: Version): Either[String, String] = {
77 76
     println("%s, %s, %s, %s".format(scalaIDEVersion, scalaLibraryVersion, scalaCompilerVersion, scalaIDEFeatureVersion))
78 77
 
79 78
     val root = new File(rootFolder)
@@ -111,9 +110,9 @@ class UpdateAddonManifests(repoURL: String, rootFolder: String) {
111 110
   /**
112 111
    * Go through the feature definition XML tree, and add version and match attribute for the reference to the scala IDE feature.
113 112
    */
114  
-  private def transformXML(e: Elem, version: String): Elem = {
  113
+  private def transformXML(e: Elem, version: Version): Elem = {
115 114
     if (e.attributes.get("feature").exists(_.text == ScalaIDEFeatureId)) {
116  
-      e.copy(attributes = e.attributes.append(Attribute(null, "version", version, Attribute(null, "match", "perfect", Null))))
  115
+      e.copy(attributes = e.attributes.append(Attribute(null, "version", version.toString, Attribute(null, "match", "perfect", Null))))
117 116
     } else {
118 117
       e.copy(child = e.child.map(_ match {
119 118
         case e: Elem => transformXML(e, version)
@@ -125,7 +124,7 @@ class UpdateAddonManifests(repoURL: String, rootFolder: String) {
125 124
   /**
126 125
    * Set strict version dependency to Scala IDE feature in the given feature file.
127 126
    */
128  
-  private def updateVersionInFeature(feature: File, scalaIDEFeatureVersion: String): Either[String, String] = {
  127
+  private def updateVersionInFeature(feature: File, scalaIDEFeatureVersion: Version): Either[String, String] = {
129 128
     println(feature.getAbsoluteFile())
130 129
     
131 130
     val savedFeature= new File(feature.getAbsolutePath() + OriginalSuffix)
@@ -142,15 +141,15 @@ class UpdateAddonManifests(repoURL: String, rootFolder: String) {
142 141
   }
143 142
 
144 143
   /**
145  
-   * Return the unique version of a plugin available in the repository.
146  
-   * Return an error if the plugin is not available, or more than one version is available.
  144
+   * Return the latest version of a plugin available in the repository.
  145
+   * Return an error if the plugin is not available.
147 146
    */
148  
-  private def getOneVersion(p2Repo: P2Repository, pluginId: String): Either[String, String] = {
149  
-    p2Repo.findIU(pluginId) match {
150  
-      case Seq(iu) =>
  147
+  private def getOneVersion(p2Repo: P2Repository, pluginId: String): Either[String, Version] = {
  148
+    p2Repo.findIU(pluginId).headOption match {
  149
+      case Some(iu) =>
151 150
         Right(iu.version)
152  
-      case s =>
153  
-        Left("More than one version found for %s. You may not be using the right repository.".format(pluginId))
  151
+      case None =>
  152
+        Left("No version found for %s. You may not be using the right repository.".format(pluginId))
154 153
     }
155 154
   }
156 155
 
7  src/main/scala/org/scalaide/buildtools/UpdateScalaIDEManifests.scala
@@ -3,6 +3,7 @@ package org.scalaide.buildtools
3 3
 import java.io.File
4 4
 import scala.io.Source
5 5
 import java.io.FileWriter
  6
+import org.osgi.framework.Version
6 7
 
7 8
 object UpdateScalaIDEManifests {
8 9
 
@@ -52,7 +53,7 @@ class UpdateScalaIDEManifests(root: String) {
52 53
   /**
53 54
    * Returns the version contained in the generated manifest file
54 55
    */
55  
-  private def getPackagedBundleVersion(projectPath: String): String = {
  56
+  private def getPackagedBundleVersion(projectPath: String): Version = {
56 57
     val projectFolder = new File(rootFolder, projectPath)
57 58
     val manifestFile = new File(projectFolder, PackagedManifestPath)
58 59
 
@@ -64,13 +65,13 @@ class UpdateScalaIDEManifests(root: String) {
64 65
     }
65 66
 
66 67
     // TODO: check if version found
67  
-    version.get
  68
+    new Version(version.get)
68 69
   }
69 70
 
70 71
   /**
71 72
    * Set strict version dependency to Scala library and compiler in the given project.
72 73
    */
73  
-  private def updateManifest(projectPath: String, scalaLibraryVersion: String, scalaCompilerVersion: String) {
  74
+  private def updateManifest(projectPath: String, scalaLibraryVersion: Version, scalaCompilerVersion: Version) {
74 75
     val projectFolder = new File(rootFolder, projectPath)
75 76
     val baseManifest = new File(projectFolder, PluginManifest)
76 77
 
32  src/test/scala/org/scalaide/buildtools/P2RepositoryTest.scala
@@ -2,8 +2,13 @@ package org.scalaide.buildtools
2 2
 
3 3
 import org.junit.Test
4 4
 import org.junit.Assert
  5
+import org.osgi.framework.Version
  6
+import scala.collection.immutable.TreeSet
5 7
 
6 8
 class P2RepositoryTest {
  9
+  
  10
+  private def InstallableUnit(id: String, version: String, dependencies: Seq[DependencyUnit] = Nil): InstallableUnit = 
  11
+    new InstallableUnit(id, new Version(version), dependencies)
7 12
 
8 13
   @Test def testSimpleRepo() {
9 14
     val repoText = """
@@ -34,10 +39,10 @@ class P2RepositoryTest {
34 39
     
35 40
     val units = repo.findIU("org.scala-ide.scala.library")
36 41
     
37  
-    Assert.assertEquals("Scala Library not found", Seq(InstallableUnit("org.scala-ide.scala.library", "2.10.0.v20120924-042318-ffaa3cb89e", Nil)), units)
  42
+    Assert.assertEquals("Scala Library not found", TreeSet(InstallableUnit("org.scala-ide.scala.library", "2.10.0.v20120924-042318-ffaa3cb89e")), units)
38 43
   }
39 44
   
40  
-    @Test def testMultipleMatches() {
  45
+    @Test def multipleMatchesAreOrderedByVersion() {
41 46
     val repoText = """
42 47
       <repository name='org.scala-ide.sdt.update-site' type='org.eclipse.equinox.internal.p2.metadata.repository.LocalMetadataRepository' version='1'>
43 48
         <properties size='2'>
@@ -47,8 +52,8 @@ class P2RepositoryTest {
47 52
         <references size='4'>
48 53
         </references>
49 54
         <units size='28'>
50  
-          <unit id='org.scala-ide.scala.library' version='2.10.0.v20120924-042318-ffaa3cb89e' singleton='false'>
51  
-            <update id='org.scala-ide.scala.library' range='[0.0.0,2.10.0.v20120924-042318-ffaa3cb89e)' severity='0'/>
  55
+          <unit id='org.scala-ide.scala.library' version='2.10.0.v20121024-050000-ffaa3cb89e' singleton='false'>
  56
+            <update id='org.scala-ide.scala.library' range='[0.0.0,2.10.0.v20121024-050000-ffaa3cb89e)' severity='0'/>
52 57
             <properties size='3'>
53 58
               <property name='org.eclipse.equinox.p2.name' value='Scala Library for Eclipse'/>
54 59
               <property name='org.eclipse.equinox.p2.description' value='Bundle containing the Scala library'/>
@@ -59,7 +64,7 @@ class P2RepositoryTest {
59 64
             </artifacts>
60 65
             <provides size='71'/>
61 66
           </unit>
62  
-          <unit id='org.scala-ide.scala.compiler' version='2.10.0.v20120924-042318-ffaa3cb89e' singleton='false'>
  67
+          <unit id='org.scala-ide.scala.library' version='2.10.0.v20120924-042318-ffaa3cb89e' singleton='false'>
63 68
             <update id='org.scala-ide.scala.library' range='[0.0.0,2.10.0.v20120924-042318-ffaa3cb89e)' severity='0'/>
64 69
             <properties size='3'>
65 70
               <property name='org.eclipse.equinox.p2.name' value='Scala Library for Eclipse'/>
@@ -71,8 +76,8 @@ class P2RepositoryTest {
71 76
             </artifacts>
72 77
             <provides size='71'/>
73 78
           </unit>
74  
-          <unit id='org.scala-ide.sdt.core' version='2.10.0.v20120924-042318-ffaa3cb89e' singleton='false'>
75  
-            <update id='org.scala-ide.scala.library' range='[0.0.0,2.10.0.v20120924-042318-ffaa3cb89e)' severity='0'/>
  79
+          <unit id='org.scala-ide.scala.library' version='2.10.0.v20121024-042318-ffaa3cb89e' singleton='false'>
  80
+            <update id='org.scala-ide.scala.library' range='[0.0.0,2.10.0.v20121024-042318-ffaa3cb89e)' severity='0'/>
76 81
             <properties size='3'>
77 82
               <property name='org.eclipse.equinox.p2.name' value='Scala Library for Eclipse'/>
78 83
               <property name='org.eclipse.equinox.p2.description' value='Bundle containing the Scala library'/>
@@ -88,12 +93,13 @@ class P2RepositoryTest {
88 93
 """
89 94
     val repo = P2Repository.fromString(repoText)
90 95
     
91  
-    val units = repo.findIU("org.scala-ide.*")
  96
+    val units = repo.findIU("org.scala-ide.scala.library")
92 97
     
93  
-    Assert.assertEquals("Scala Library not found", Seq(
94  
-        InstallableUnit("org.scala-ide.scala.compiler", "2.10.0.v20120924-042318-ffaa3cb89e", Nil),
95  
-        InstallableUnit("org.scala-ide.scala.library", "2.10.0.v20120924-042318-ffaa3cb89e", Nil),
96  
-        InstallableUnit("org.scala-ide.sdt.core", "2.10.0.v20120924-042318-ffaa3cb89e", Nil)
97  
-        ), units.sortWith((a, b) => a.id < b.id))
  98
+    val expected = TreeSet[InstallableUnit](
  99
+        InstallableUnit("org.scala-ide.scala.library", "2.10.0.v20121024-050000-ffaa3cb89e"),
  100
+        InstallableUnit("org.scala-ide.scala.library", "2.10.0.v20121024-042318-ffaa3cb89e"),
  101
+        InstallableUnit("org.scala-ide.scala.library", "2.10.0.v20120924-042318-ffaa3cb89e")
  102
+        )
  103
+    Assert.assertEquals("Scala Library not found", expected, units)
98 104
   }
99 105
 }
7  src/test/scala/org/scalaide/buildtools/RemoteRepositoryTest.scala
@@ -2,12 +2,13 @@ package org.scalaide.buildtools
2 2
 
3 3
 import org.junit.Test
4 4
 import org.junit.Assert
  5
+import org.osgi.framework.Version
5 6
 
6 7
 class RemoteRepositoryTest {
7 8
   val expectedIds = Map(
8  
-    "org.scala-ide.scala.compiler" -> "2.10.0.v20120820-123254-M7-1ab4994990",
9  
-    "org.scala-ide.scala.library" -> "2.10.0.v20120820-123254-M7-1ab4994990",
10  
-    "org.scala-ide.sdt.core" -> "2.1.0.m2-2_10-201209130850-f6ab297")
  9
+    "org.scala-ide.scala.compiler" -> new Version("2.10.0.v20120820-123254-M7-1ab4994990"),
  10
+    "org.scala-ide.scala.library" -> new Version("2.10.0.v20120820-123254-M7-1ab4994990"),
  11
+    "org.scala-ide.sdt.core" -> new Version("2.1.0.m2-2_10-201209130850-f6ab297"))
11 12
 
12 13
   @Test def milestonesTest {
13 14
     val maybeRepo = P2Repository.fromUrl("http://download.scala-ide.org/ecosystem/dev-milestone-milestone/site/")
43  src/test/scala/org/scalaide/buildtools/VersionTest.scala
... ...
@@ -0,0 +1,43 @@
  1
+package org.scalaide.buildtools
  2
+
  3
+import org.junit.Test
  4
+import org.osgi.framework.Version
  5
+import org.junit.Assert
  6
+
  7
+class VersionTest {
  8
+  @Test def versionIsIdenticalBeforeAndAfterBoxing() {
  9
+    val rawVersion = "2.10.0.v20120924-042318-ffaa3cb89e"
  10
+    val version = new Version(rawVersion)
  11
+    Assert.assertEquals(rawVersion, version.toString)
  12
+  }
  13
+
  14
+  @Test def versionMajorNumber() {
  15
+    val rawVersion = "2.10.0.v20120924-042318-ffaa3cb89e"
  16
+    val version = new Version(rawVersion)
  17
+    Assert.assertEquals(version.getMajor(), 2)
  18
+  }
  19
+
  20
+  @Test def versionMinorNumber() {
  21
+    val rawVersion = "2.10.0.v20120924-042318-ffaa3cb89e"
  22
+    val version = new Version(rawVersion)
  23
+    Assert.assertEquals(version.getMinor(), 10)
  24
+  }
  25
+  
  26
+  @Test def versionMicroNumber() {
  27
+    val rawVersion = "2.10.0.v20120924-042318-ffaa3cb89e"
  28
+    val version = new Version(rawVersion)
  29
+    Assert.assertEquals(version.getMicro(), 0)
  30
+  }
  31
+  
  32
+  @Test def versionQualifier() {
  33
+    val rawVersion = "2.10.0.v20120924-042318-ffaa3cb89e"
  34
+    val version = new Version(rawVersion)
  35
+    Assert.assertEquals(version.getQualifier(), "v20120924-042318-ffaa3cb89e")
  36
+  }
  37
+  
  38
+  @Test def comparingVersionsWithDifferentQualifier() {
  39
+    val beforeVersion = new Version("2.10.0.v20120924-042318-ffaa3cb89e")
  40
+    val afterVersion = new Version("2.10.0.v20120924-050020-ffaa3cb89e")
  41
+    Assert.assertTrue(beforeVersion.compareTo(afterVersion) < 0)
  42
+  } 
  43
+}

0 notes on commit b8df106

Please sign in to comment.
Something went wrong with that request. Please try again.