Drop RepositoriesParser & therefore util-completion

This code originates from a PR against sbt 0.13:
https://github.com/sbt/sbt/pull/2576

The sbt/librarymanagement part was forward-ported to
sbt/librarymanagement and merged, while the sbt/sbt part wasn't.

So let's get rid of this so we can drop the dependency on
util-completion.
This commit is contained in:
Dale Wijnand 2017-06-21 14:16:29 +01:00
parent 85cfe4d78c
commit f255894413
No known key found for this signature in database
GPG Key ID: 4F256E3D151DF5EF
4 changed files with 1 additions and 302 deletions

View File

@ -88,13 +88,7 @@ lazy val lm = (project in file("librarymanagement"))
(((srcs --- sdirs --- base) pair (relativeTo(sdirs) | relativeTo(base) | flat)) toSeq)
}
)
.configure(
addSbtIO,
addSbtUtilLogging,
addSbtUtilCollection,
addSbtUtilCompletion,
addSbtUtilCache
)
.configure(addSbtIO, addSbtUtilLogging, addSbtUtilCollection, addSbtUtilCache)
.enablePlugins(ContrabandPlugin, JsonCodecPlugin)
def customCommands: Seq[Setting[_]] = Seq(

View File

@ -1,117 +0,0 @@
package sbt
package internal
package librarymanagement
import java.io.File
import java.net.URL
import scala.io.Source
import sbt.internal.util.complete.Parser
import sbt.internal.util.complete.DefaultParsers._
private[sbt] object RepositoriesParser {
private case class AfterPattern(artifactPattern: Option[String], flags: Int)
final case class PredefinedRepository(override val id: xsbti.Predefined)
extends xsbti.PredefinedRepository
final case class MavenRepository(override val id: String, override val url: URL)
extends xsbti.MavenRepository
final case class IvyRepository(
override val id: String,
override val url: URL,
override val ivyPattern: String,
override val artifactPattern: String,
override val mavenCompatible: Boolean,
override val skipConsistencyCheck: Boolean,
override val descriptorOptional: Boolean,
val bootOnly: Boolean
) extends xsbti.IvyRepository
// Predefined repositories
def local: Parser[xsbti.Repository] =
"local" ^^^ new PredefinedRepository(xsbti.Predefined.Local)
def mavenLocal: Parser[xsbti.Repository] =
"maven-local" ^^^ new PredefinedRepository(xsbti.Predefined.MavenLocal)
def mavenCentral: Parser[xsbti.Repository] =
"maven-central" ^^^ new PredefinedRepository(xsbti.Predefined.MavenCentral)
def predefinedResolver: Parser[xsbti.Repository] = local | mavenLocal | mavenCentral
// Options
def descriptorOptional: Parser[Int] = "descriptorOptional" ^^^ Flags.descriptorOptionalFlag
def skipConsistencyCheck: Parser[Int] = "skipConsistencyCheck" ^^^ Flags.skipConsistencyCheckFlag
def bootOnly: Parser[Int] = "bootOnly" ^^^ Flags.bootOnlyFlag
def mavenCompatible: Parser[Int] = "mavenCompatible" ^^^ Flags.mavenCompatibleFlag
def option: Parser[Int] = descriptorOptional | skipConsistencyCheck | bootOnly | mavenCompatible
def options: Parser[Int] = rep1sep(option, separator) map (_ reduce (_ | _))
def name: Parser[String] = ID
def separator: Parser[String] = "," ~> charClass(c => c == ' ' || c == '\t').*.string
def nonComma: Parser[String] = charClass(_ != ',').*.string
def ivyPattern: Parser[String] = nonComma
def artifactPattern: Parser[String] = nonComma
private def afterPattern: Parser[AfterPattern] = {
def onlyOptions = options map (AfterPattern(None, _))
def both = artifactPattern ~ (separator ~> options).? map {
case ap ~ opts => AfterPattern(Some(ap), opts getOrElse 0)
}
onlyOptions | both
}
def customResolver: Parser[xsbti.Repository] =
name ~ ": " ~ basicUri ~ (separator ~> ivyPattern).? ~ (separator ~> afterPattern).? map {
case name ~ ": " ~ uri ~ None ~ _ =>
new MavenRepository(name, uri.toURL)
case name ~ ": " ~ uri ~ Some(ivy) ~ ap =>
// scalac complains about the recursion depth if we pattern match over `ap` directly.
ap match {
case Some(AfterPattern(artifactPattern, Flags(dOpt, sc, bo, mc))) =>
new IvyRepository(
name,
uri.toURL,
ivy,
artifactPattern getOrElse ivy,
mc,
sc,
dOpt,
bo
)
case None =>
new IvyRepository(name, uri.toURL, ivy, ivy, false, false, false, false)
}
}
def resolver: Parser[xsbti.Repository] =
predefinedResolver | customResolver
def getResolver[T](in: String)(parser: Parser[T]): Option[T] =
Parser.parse(in.trim, parser).right.toOption
def apply(lines: Iterator[String]): Seq[xsbti.Repository] =
if (lines.isEmpty) Nil
else {
if (lines.next != "[repositories]")
throw new Exception("Repositories file must start with '[repositories]'")
lines.flatMap(getResolver(_)(resolver)).toList
}
def apply(str: String): Seq[xsbti.Repository] = apply(str.lines)
def apply(file: File): Seq[xsbti.Repository] = {
if (!file.exists) Nil
else apply(Source.fromFile(file).getLines)
}
object Flags {
val descriptorOptionalFlag = 1 << 0
val skipConsistencyCheckFlag = 1 << 1
val bootOnlyFlag = 1 << 2
val mavenCompatibleFlag = 1 << 3
def unapply(flags: Int): Some[(Boolean, Boolean, Boolean, Boolean)] = {
val dOpt = (flags & descriptorOptionalFlag) != 0
val sc = (flags & skipConsistencyCheckFlag) != 0
val bo = (flags & bootOnlyFlag) != 0
val mc = (flags & mavenCompatibleFlag) != 0
Some((dOpt, sc, bo, mc))
}
}
}

View File

@ -1,175 +0,0 @@
package sbt
package internal
package librarymanagement
import java.net.URL
/**
* Tests that we can correctly parse repositories definitions.
*/
class RepositoriesParserSpecification extends UnitSpec {
import RepositoriesParser._
"The RepositoriesParser" should "check that repositories file starts with [repositories]" in {
val file = """local
|maven-central""".stripMargin
a[Exception] should be thrownBy RepositoriesParser(file)
}
it should "parse the local repository" in {
val file = """[repositories]
| local""".stripMargin
val repos = RepositoriesParser(file)
repos.size shouldBe 1
repos(0) shouldBe PredefinedRepository(xsbti.Predefined.Local)
}
it should "parse the local maven repository" in {
val file = """[repositories]
| maven-local""".stripMargin
val repos = RepositoriesParser(file)
repos.size shouldBe 1
repos(0) shouldBe PredefinedRepository(xsbti.Predefined.MavenLocal)
}
it should "parse Maven Central repository" in {
val file = """[repositories]
| maven-central""".stripMargin
val repos = RepositoriesParser(file)
repos.size shouldBe 1
repos(0) shouldBe PredefinedRepository(xsbti.Predefined.MavenCentral)
}
it should "parse simple Maven repository" in {
val file = """[repositories]
| mavenRepo: https://repo1.maven.org""".stripMargin
val repos = RepositoriesParser(file)
repos.size shouldBe 1
repos(0) shouldBe MavenRepository("mavenRepo", new URL("https://repo1.maven.org"))
}
it should "parse `bootOnly` option" in {
val file = """[repositories]
| ivyRepo: https://repo1.maven.org, [orgPath], bootOnly""".stripMargin
val repos = RepositoriesParser(file)
val expected =
IvyRepository(
"ivyRepo",
new URL("https://repo1.maven.org"),
"[orgPath]",
"[orgPath]",
mavenCompatible = false,
skipConsistencyCheck = false,
descriptorOptional = false,
bootOnly = true
)
repos.size shouldBe 1
repos(0) shouldBe expected
}
it should "parse `mavenCompatible` option" in {
val file = """[repositories]
| ivyRepo: https://repo1.maven.org, [orgPath], mavenCompatible""".stripMargin
val repos = RepositoriesParser(file)
val expected =
IvyRepository(
"ivyRepo",
new URL("https://repo1.maven.org"),
"[orgPath]",
"[orgPath]",
mavenCompatible = true,
skipConsistencyCheck = false,
descriptorOptional = false,
bootOnly = false
)
repos.size shouldBe 1
repos(0) shouldBe expected
}
it should "parse `skipConsistencyCheck` option" in {
val file = """[repositories]
| ivyRepo: https://repo1.maven.org, [orgPath], skipConsistencyCheck""".stripMargin
val repos = RepositoriesParser(file)
val expected =
IvyRepository(
"ivyRepo",
new URL("https://repo1.maven.org"),
"[orgPath]",
"[orgPath]",
mavenCompatible = false,
skipConsistencyCheck = true,
descriptorOptional = false,
bootOnly = false
)
repos.size shouldBe 1
repos(0) shouldBe expected
}
it should "parse `descriptorOptional` option" in {
val file = """[repositories]
| ivyRepo: https://repo1.maven.org, [orgPath], descriptorOptional""".stripMargin
val repos = RepositoriesParser(file)
val expected =
IvyRepository(
"ivyRepo",
new URL("https://repo1.maven.org"),
"[orgPath]",
"[orgPath]",
mavenCompatible = false,
skipConsistencyCheck = false,
descriptorOptional = true,
bootOnly = false
)
repos.size shouldBe 1
repos(0) shouldBe expected
}
it should "parse complex ivy repository definition" in {
val file =
"""[repositories]
| ivyRepo: https://repo1.maven.org, [orgPath], [artPath], descriptorOptional, skipConsistencyCheck""".stripMargin
val repos = RepositoriesParser(file)
val expected =
IvyRepository(
"ivyRepo",
new URL("https://repo1.maven.org"),
"[orgPath]",
"[artPath]",
mavenCompatible = false,
skipConsistencyCheck = true,
descriptorOptional = true,
bootOnly = false
)
repos.size shouldBe 1
repos(0) shouldBe expected
}
it should "parse multiple repositories defined together" in {
val file =
"""[repositories]
| local
| ivyRepo: https://repo1.maven.org, [orgPath], [artPath], descriptorOptional, skipConsistencyCheck
| mavenRepo: https://repo1.maven.org""".stripMargin
val expected0 = PredefinedRepository(xsbti.Predefined.Local)
val expected1 =
IvyRepository(
"ivyRepo",
new URL("https://repo1.maven.org"),
"[orgPath]",
"[artPath]",
mavenCompatible = false,
skipConsistencyCheck = true,
descriptorOptional = true,
bootOnly = false
)
val expected2 = MavenRepository("mavenRepo", new URL("https://repo1.maven.org"))
val repos = RepositoriesParser(file)
repos.size shouldBe 3
repos(0) shouldBe expected0
repos(1) shouldBe expected1
repos(2) shouldBe expected2
}
}

View File

@ -13,7 +13,6 @@ object Dependencies {
private val utilCollection = "org.scala-sbt" %% "util-collection" % utilVersion
private val utilLogging = "org.scala-sbt" %% "util-logging" % utilVersion
private val utilCompletion = "org.scala-sbt" %% "util-completion" % utilVersion
private val utilCache = "org.scala-sbt" %% "util-cache" % utilVersion
def getSbtModulePath(key: String, name: String) = {
@ -38,8 +37,6 @@ object Dependencies {
addSbtModule(p, sbtUtilPath, "utilCollection", utilCollection)
def addSbtUtilLogging(p: Project): Project =
addSbtModule(p, sbtUtilPath, "utilLogging", utilLogging)
def addSbtUtilCompletion(p: Project): Project =
addSbtModule(p, sbtUtilPath, "utilComplete", utilCompletion)
def addSbtUtilCache(p: Project): Project = addSbtModule(p, sbtUtilPath, "utilCache", utilCache)
val launcherInterface = "org.scala-sbt" % "launcher-interface" % "1.0.0"