mirror of https://github.com/sbt/sbt.git
Merge pull request #2897 from smarter/fix/scala-bootstrap
OverrideScalaMediator: fix bootstrapping a Scala compiler
This commit is contained in:
commit
10b71ef1c4
|
|
@ -64,13 +64,24 @@ private object IvyScala {
|
|||
// Mediate only for the dependencies in scalaVersion configurations. https://github.com/sbt/sbt/issues/2786
|
||||
def configQualifies: Boolean =
|
||||
(dd.getModuleConfigurations exists { scalaVersionConfigs })
|
||||
// Do not rewrite the dependencies of Scala dependencies themselves, this prevents bootstrapping
|
||||
// a Scala compiler using another Scala compiler.
|
||||
def dependeeQualifies: Boolean =
|
||||
dd.getParentRevisionId == null || (
|
||||
dd.getParentRevisionId.getName match {
|
||||
case name @ (CompilerID | LibraryID | ReflectID | ActorsID | ScalapID) =>
|
||||
false
|
||||
case _ =>
|
||||
true
|
||||
}
|
||||
)
|
||||
val transformer =
|
||||
new NamespaceTransformer {
|
||||
def transform(mrid: ModuleRevisionId): ModuleRevisionId = {
|
||||
if (mrid == null) mrid
|
||||
else
|
||||
mrid.getName match {
|
||||
case name @ (CompilerID | LibraryID | ReflectID | ActorsID | ScalapID) if configQualifies =>
|
||||
case name @ (CompilerID | LibraryID | ReflectID | ActorsID | ScalapID) if configQualifies && dependeeQualifies =>
|
||||
ModuleRevisionId.newInstance(scalaOrganization, name, mrid.getBranch, scalaVersion, mrid.getQualifiedExtraAttributes)
|
||||
case _ => mrid
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,43 @@
|
|||
organization := "org.dummy"
|
||||
|
||||
scalaOrganization := "org.foo"
|
||||
|
||||
scalaVersion := "2.99.0"
|
||||
|
||||
resolvers += Resolver.file("buggy", (baseDirectory in LocalRootProject).value / "repo")(
|
||||
Patterns(
|
||||
ivyPatterns = Seq("[organization]/[module]/[revision]/ivy.xml"),
|
||||
artifactPatterns = Seq("[organization]/[module]/[revision]/dummy.jar"),
|
||||
isMavenCompatible = false,
|
||||
descriptorOptional = true,
|
||||
skipConsistencyCheck = true
|
||||
)
|
||||
)
|
||||
|
||||
libraryDependencies += "org.scala-lang.modules" % "scala-parser-combinators_2.11" % "1.0.5"
|
||||
|
||||
// Adapted from the scala-organization test
|
||||
val checkDependencies = taskKey[Unit]("Checks that dependencies are correct.")
|
||||
|
||||
checkDependencies := {
|
||||
val expected: Set[ModuleID] = Set(
|
||||
"org.foo" % "scala-library" % "2.99.0",
|
||||
"org.foo" % "scala-compiler" % "2.99.0",
|
||||
|
||||
"org.scala-lang" % "scala-library" % "2.11.8",
|
||||
"org.scala-lang" % "scala-compiler" % "2.11.8",
|
||||
"org.scala-lang" % "scala-reflect" % "2.11.8",
|
||||
|
||||
"org.scala-lang.modules" % "scala-parser-combinators_2.11" % "1.0.5",
|
||||
"org.scala-lang.modules" % "scala-xml_2.11" % "1.0.4",
|
||||
"org.scala-lang.modules" % "scala-parser-combinators_2.11" % "1.0.4"
|
||||
)
|
||||
|
||||
val resolved: Set[ModuleID] =
|
||||
(for {
|
||||
c <- update.value.configurations
|
||||
m <- c.modules
|
||||
if !m.evicted
|
||||
} yield m.module.copy(extraAttributes = Map.empty)).toSet
|
||||
assert(resolved == expected)
|
||||
}
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra">
|
||||
<info organisation="org.foo" module="scala-compiler" revision="2.99.0" status="integration" publication="20170108221942">
|
||||
<license name="BSD New" url="https://github.com/lampepfl/dotty/blob/master/LICENSE.md"/>
|
||||
<description homepage="https://github.com/lampepfl/dotty">
|
||||
scala-compiler
|
||||
</description>
|
||||
</info>
|
||||
<configurations>
|
||||
<conf name="compile" visibility="public" description=""/>
|
||||
<conf name="runtime" visibility="public" description="" extends="compile"/>
|
||||
<conf name="test" visibility="public" description="" extends="runtime"/>
|
||||
<conf name="provided" visibility="public" description=""/>
|
||||
<conf name="optional" visibility="public" description=""/>
|
||||
|
||||
<conf extends="runtime" description="Default" visibility="public" name="default"/>
|
||||
|
||||
<conf name="sources" visibility="public" description=""/>
|
||||
<conf name="docs" visibility="public" description=""/>
|
||||
<conf name="pom" visibility="public" description=""/>
|
||||
|
||||
</configurations>
|
||||
<publications>
|
||||
<artifact name="scala-compiler" type="pom" ext="pom" conf="pom"/>
|
||||
<artifact name="scala-compiler" type="jar" ext="jar" conf="compile"/>
|
||||
<artifact name="scala-compiler" type="src" ext="jar" conf="sources" e:classifier="sources"/>
|
||||
<artifact name="scala-compiler" type="doc" ext="jar" conf="docs" e:classifier="javadoc"/>
|
||||
</publications>
|
||||
<dependencies>
|
||||
|
||||
|
||||
<dependency org="org.scala-lang" name="scala-compiler" rev="2.11.8" conf="compile->default(compile)"/>
|
||||
</dependencies>
|
||||
</ivy-module>
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra">
|
||||
<info organisation="org.foo" module="scala-library" revision="2.99.0" status="integration" publication="20170108222108">
|
||||
<license name="BSD New" url="https://github.com/lampepfl/dotty/blob/master/LICENSE.md"/>
|
||||
<description homepage="https://github.com/lampepfl/dotty">
|
||||
scala-library
|
||||
</description>
|
||||
</info>
|
||||
<configurations>
|
||||
<conf name="compile" visibility="public" description=""/>
|
||||
<conf name="runtime" visibility="public" description="" extends="compile"/>
|
||||
<conf name="test" visibility="public" description="" extends="runtime"/>
|
||||
<conf name="provided" visibility="public" description=""/>
|
||||
<conf name="optional" visibility="public" description=""/>
|
||||
|
||||
<conf extends="runtime" description="Default" visibility="public" name="default"/>
|
||||
|
||||
<conf name="sources" visibility="public" description=""/>
|
||||
<conf name="docs" visibility="public" description=""/>
|
||||
<conf name="pom" visibility="public" description=""/>
|
||||
|
||||
</configurations>
|
||||
<publications>
|
||||
<artifact name="scala-library" type="pom" ext="pom" conf="pom"/>
|
||||
<artifact name="scala-library" type="jar" ext="jar" conf="compile"/>
|
||||
<artifact name="scala-library" type="src" ext="jar" conf="sources" e:classifier="sources"/>
|
||||
<artifact name="scala-library" type="doc" ext="jar" conf="docs" e:classifier="javadoc"/>
|
||||
</publications>
|
||||
<dependencies>
|
||||
|
||||
<dependency org="org.scala-lang" name="scala-library" rev="2.11.8" conf="compile->default(compile)"/>
|
||||
</dependencies>
|
||||
</ivy-module>
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra">
|
||||
<info organisation="org.foo" module="scala-reflect" revision="2.99.0" status="integration" publication="20170108214513">
|
||||
<license name="BSD New" url="https://github.com/lampepfl/dotty/blob/master/LICENSE.md"/>
|
||||
<description homepage="https://github.com/lampepfl/dotty">
|
||||
scala-reflect
|
||||
</description>
|
||||
</info>
|
||||
<configurations>
|
||||
<conf name="compile" visibility="public" description=""/>
|
||||
<conf name="runtime" visibility="public" description="" extends="compile"/>
|
||||
<conf name="test" visibility="public" description="" extends="runtime"/>
|
||||
<conf name="provided" visibility="public" description=""/>
|
||||
<conf name="optional" visibility="public" description=""/>
|
||||
|
||||
<conf extends="runtime" description="Default" visibility="public" name="default"/>
|
||||
|
||||
<conf name="sources" visibility="public" description=""/>
|
||||
<conf name="docs" visibility="public" description=""/>
|
||||
<conf name="pom" visibility="public" description=""/>
|
||||
|
||||
</configurations>
|
||||
<publications>
|
||||
<artifact name="scala-reflect" type="pom" ext="pom" conf="pom"/>
|
||||
<artifact name="scala-reflect" type="jar" ext="jar" conf="compile"/>
|
||||
<artifact name="scala-reflect" type="src" ext="jar" conf="sources" e:classifier="sources"/>
|
||||
<artifact name="scala-reflect" type="doc" ext="jar" conf="docs" e:classifier="javadoc"/>
|
||||
</publications>
|
||||
<dependencies>
|
||||
|
||||
|
||||
<dependency org="org.scala-lang" name="scala-reflect" rev="2.11.8" conf="compile->default(compile)"/>
|
||||
</dependencies>
|
||||
</ivy-module>
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra">
|
||||
<info organisation="org.foo" module="scalap" revision="2.99.0" status="integration" publication="20170108222105">
|
||||
<license name="BSD New" url="https://github.com/lampepfl/dotty/blob/master/LICENSE.md"/>
|
||||
<description homepage="https://github.com/lampepfl/dotty">
|
||||
scalap
|
||||
</description>
|
||||
</info>
|
||||
<configurations>
|
||||
<conf name="compile" visibility="public" description=""/>
|
||||
<conf name="runtime" visibility="public" description="" extends="compile"/>
|
||||
<conf name="test" visibility="public" description="" extends="runtime"/>
|
||||
<conf name="provided" visibility="public" description=""/>
|
||||
<conf name="optional" visibility="public" description=""/>
|
||||
|
||||
|
||||
|
||||
|
||||
<conf name="sources" visibility="public" description=""/>
|
||||
<conf name="docs" visibility="public" description=""/>
|
||||
<conf name="pom" visibility="public" description=""/>
|
||||
|
||||
</configurations>
|
||||
<publications>
|
||||
<artifact name="scalap" type="pom" ext="pom" conf="pom"/>
|
||||
<artifact name="scalap" type="jar" ext="jar" conf="compile"/>
|
||||
<artifact name="scalap" type="src" ext="jar" conf="sources" e:classifier="sources"/>
|
||||
<artifact name="scalap" type="doc" ext="jar" conf="docs" e:classifier="javadoc"/>
|
||||
</publications>
|
||||
<dependencies>
|
||||
|
||||
|
||||
<dependency org="org.scala-lang" name="scalap" rev="2.11.8" conf="compile->default(compile)"/>
|
||||
</dependencies>
|
||||
</ivy-module>
|
||||
|
|
@ -0,0 +1 @@
|
|||
> checkDependencies
|
||||
|
|
@ -18,6 +18,8 @@ $ sleep 1000
|
|||
|
||||
# Now let's try this on the opposite order: pubishLocal => publish
|
||||
$ copy-file changes/BadCommon.scala common/src/main/scala/Common.scala
|
||||
# Sleep to ensure timestamp change
|
||||
$ sleep 1000
|
||||
> common/publishLocal
|
||||
|
||||
# Force dep resolution to be successful, then compilation to fail
|
||||
|
|
|
|||
Loading…
Reference in New Issue