All Downloads are FREE. Search and download functionalities are using the official Maven repository.

scala.coursier.params.Mirror.scala Maven / Gradle / Ivy

There is a newer version: 2.1.24
Show newest version
package coursier.params

import coursier.core.Repository

import scala.collection.compat._

abstract class Mirror extends Serializable {
  def matches(repo: Repository): Option[Repository]
}

object Mirror {
  def replace(repositories: Seq[Repository], mirrors: Seq[Mirror]): Seq[Repository] =
    repositories
      .map { repo =>
        val it = mirrors
          .iterator
          .flatMap(_.matches(repo).iterator)
        if (it.hasNext)
          it.next()
        else
          repo
      }
      .distinct

  private def parseMirrorString(input: String): Either[String, (String, Seq[String])] =
    input.split("=", 2) match {
      case Array(dest, froms) =>
        Right((
          dest.trim,
          immutable.ArraySeq.unsafeWrapArray(froms.split(";")).map(_.trim).filter(_.nonEmpty)
        ))
      case _ =>
        Left(s"Invalid mirror definition '$input', expected 'dest=source1;source2;...'")
    }

  def parse(input: String): Either[String, Mirror] =
    if (input.startsWith("tree:"))
      parseMirrorString(input.stripPrefix("tree:")).map {
        case (dest, froms) =>
          TreeMirror(froms, dest)
      }
    else if (input.startsWith("maven:"))
      parseMirrorString(input.stripPrefix("maven:")).map {
        case (dest, froms) =>
          MavenMirror(froms, dest)
      }
    else
      parseMirrorString(input).map {
        case (dest, froms) =>
          MavenMirror(froms, dest)
      }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy