From 7194fe7b4894bb28746f3f21904cfc8beffe80c2 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Thu, 2 Feb 2017 01:30:01 +0100 Subject: [PATCH 01/10] Add missing language.higherKinds imports --- core/shared/src/main/scala/coursier/Fetch.scala | 2 +- .../shared/src/main/scala/coursier/core/ResolutionProcess.scala | 1 + core/shared/src/main/scala/coursier/ivy/IvyRepository.scala | 2 ++ .../scala-2.10/coursier/FallbackDependenciesRepository.scala | 2 ++ .../src/main/scala-2.10/coursier/InterProjectRepository.scala | 2 ++ tests/shared/src/test/scala/coursier/test/TestRepository.scala | 2 ++ 6 files changed, 10 insertions(+), 1 deletion(-) diff --git a/core/shared/src/main/scala/coursier/Fetch.scala b/core/shared/src/main/scala/coursier/Fetch.scala index 16f1ddcdb..236bb183c 100644 --- a/core/shared/src/main/scala/coursier/Fetch.scala +++ b/core/shared/src/main/scala/coursier/Fetch.scala @@ -1,6 +1,6 @@ package coursier -import coursier.maven.MavenSource +import scala.language.higherKinds import scalaz._ diff --git a/core/shared/src/main/scala/coursier/core/ResolutionProcess.scala b/core/shared/src/main/scala/coursier/core/ResolutionProcess.scala index 6e802b7ac..e86949f74 100644 --- a/core/shared/src/main/scala/coursier/core/ResolutionProcess.scala +++ b/core/shared/src/main/scala/coursier/core/ResolutionProcess.scala @@ -3,6 +3,7 @@ package core import scalaz._ import scala.annotation.tailrec +import scala.language.higherKinds sealed abstract class ResolutionProcess { diff --git a/core/shared/src/main/scala/coursier/ivy/IvyRepository.scala b/core/shared/src/main/scala/coursier/ivy/IvyRepository.scala index 092c4cfac..250fba614 100644 --- a/core/shared/src/main/scala/coursier/ivy/IvyRepository.scala +++ b/core/shared/src/main/scala/coursier/ivy/IvyRepository.scala @@ -3,6 +3,8 @@ package coursier.ivy import coursier.Fetch import coursier.core._ +import scala.language.higherKinds + import scalaz._ import scalaz.Scalaz._ diff --git a/plugin/src/main/scala-2.10/coursier/FallbackDependenciesRepository.scala b/plugin/src/main/scala-2.10/coursier/FallbackDependenciesRepository.scala index eb4b7a6a4..8d0cc8553 100644 --- a/plugin/src/main/scala-2.10/coursier/FallbackDependenciesRepository.scala +++ b/plugin/src/main/scala-2.10/coursier/FallbackDependenciesRepository.scala @@ -3,6 +3,8 @@ package coursier import java.io.{ File, FileNotFoundException, IOException } import java.net.{ HttpURLConnection, URL, URLConnection } +import scala.language.higherKinds + import scalaz.{ EitherT, Monad } object FallbackDependenciesRepository { diff --git a/plugin/src/main/scala-2.10/coursier/InterProjectRepository.scala b/plugin/src/main/scala-2.10/coursier/InterProjectRepository.scala index 8eb094420..88b6e91a1 100644 --- a/plugin/src/main/scala-2.10/coursier/InterProjectRepository.scala +++ b/plugin/src/main/scala-2.10/coursier/InterProjectRepository.scala @@ -1,5 +1,7 @@ package coursier +import scala.language.higherKinds + import scalaz.{ -\/, \/-, Monad, EitherT } case class InterProjectRepository(projects: Seq[Project]) extends Repository { diff --git a/tests/shared/src/test/scala/coursier/test/TestRepository.scala b/tests/shared/src/test/scala/coursier/test/TestRepository.scala index f1d355ee9..1bbb38024 100644 --- a/tests/shared/src/test/scala/coursier/test/TestRepository.scala +++ b/tests/shared/src/test/scala/coursier/test/TestRepository.scala @@ -3,6 +3,8 @@ package test import coursier.core._ +import scala.language.higherKinds + import scalaz.{ Monad, EitherT } import scalaz.Scalaz._ From d277153777bd08414c01edd8eca100fbc7006686 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Thu, 2 Feb 2017 01:34:42 +0100 Subject: [PATCH 02/10] Annotate all case classes with final --- build.sbt | 19 +++++++++++++++++++ .../src/main/scala/coursier/TermDisplay.scala | 4 ++-- .../src/main/scala/coursier/util/Base64.scala | 2 +- .../scala-2.11/coursier/cli/Bootstrap.scala | 2 +- .../scala-2.11/coursier/cli/Coursier.scala | 2 +- .../main/scala-2.11/coursier/cli/Fetch.scala | 2 +- .../main/scala-2.11/coursier/cli/Launch.scala | 2 +- .../scala-2.11/coursier/cli/Options.scala | 16 ++++++++-------- .../scala-2.11/coursier/cli/Resolve.scala | 2 +- .../scala-2.11/coursier/cli/SparkSubmit.scala | 2 +- .../coursier/cli/spark/Assembly.scala | 8 ++++---- .../main/scala/coursier/core/Activation.scala | 2 +- .../scala/coursier/core/Definitions.scala | 2 +- .../main/scala/coursier/core/Version.scala | 2 +- .../main/scala/coursier/core/Versions.scala | 10 ++++++---- .../scala/coursier/ivy/IvyRepository.scala | 2 +- .../src/main/scala/coursier/ivy/Pattern.scala | 18 +++++++++--------- .../coursier/maven/MavenRepository.scala | 2 +- .../scala/coursier/maven/MavenSource.scala | 2 +- .../src/main/scala/coursier/util/Print.scala | 4 ++-- .../main/scala-2.11/coursier/HttpServer.scala | 2 +- .../scala-2.10/coursier/Credentials.scala | 4 ++-- .../FallbackDependenciesRepository.scala | 2 +- .../coursier/InterProjectRepository.scala | 2 +- .../scala-2.10/coursier/ResolutionError.scala | 10 +++++----- .../src/main/scala-2.10/coursier/Tasks.scala | 4 ++-- .../scala/coursier/test/TestRepository.scala | 2 +- web/src/main/scala/coursier/web/Backend.scala | 4 ++-- 28 files changed, 78 insertions(+), 57 deletions(-) diff --git a/build.sbt b/build.sbt index e89a7febb..050184561 100644 --- a/build.sbt +++ b/build.sbt @@ -20,6 +20,22 @@ lazy val core = crossProject import com.typesafe.tools.mima.core._ Seq( + ProblemFilters.exclude[FinalClassProblem]("coursier.core.Activation$Os"), + ProblemFilters.exclude[FinalClassProblem]("coursier.core.Version"), + ProblemFilters.exclude[FinalClassProblem]("coursier.core.Authentication"), + ProblemFilters.exclude[FinalClassProblem]("coursier.core.VersionInterval"), + ProblemFilters.exclude[FinalClassProblem]("coursier.ivy.Pattern"), + ProblemFilters.exclude[FinalClassProblem]("coursier.ivy.Pattern$Chunk$Opt"), + ProblemFilters.exclude[FinalClassProblem]("coursier.ivy.PropertiesPattern$ChunkOrProperty$Const"), + ProblemFilters.exclude[FinalClassProblem]("coursier.ivy.PropertiesPattern$ChunkOrProperty$Opt"), + ProblemFilters.exclude[FinalClassProblem]("coursier.ivy.PropertiesPattern"), + ProblemFilters.exclude[FinalClassProblem]("coursier.ivy.Pattern$Chunk$Var"), + ProblemFilters.exclude[FinalClassProblem]("coursier.ivy.IvyRepository"), + ProblemFilters.exclude[FinalClassProblem]("coursier.ivy.Pattern$Chunk$Const"), + ProblemFilters.exclude[FinalClassProblem]("coursier.ivy.PropertiesPattern$ChunkOrProperty$Prop"), + ProblemFilters.exclude[FinalClassProblem]("coursier.ivy.PropertiesPattern$ChunkOrProperty$Var"), + ProblemFilters.exclude[FinalClassProblem]("coursier.maven.MavenRepository"), + ProblemFilters.exclude[FinalClassProblem]("coursier.maven.MavenSource"), ProblemFilters.exclude[IncompatibleResultTypeProblem]("coursier.package#Resolution.apply$default$9"), ProblemFilters.exclude[DirectMissingMethodProblem]("coursier.package#Resolution.apply"), ProblemFilters.exclude[IncompatibleResultTypeProblem]("coursier.core.Resolution.copy$default$9"), @@ -126,6 +142,9 @@ lazy val cache = project import com.typesafe.tools.mima.core._ Seq( + ProblemFilters.exclude[FinalClassProblem]("coursier.TermDisplay$DownloadInfo"), + ProblemFilters.exclude[FinalClassProblem]("coursier.TermDisplay$CheckUpdateInfo"), + ProblemFilters.exclude[FinalClassProblem]("coursier.util.Base64$B64Scheme"), ProblemFilters.exclude[MissingClassProblem]("coursier.TermDisplay$Message$Stop$"), ProblemFilters.exclude[MissingClassProblem]("coursier.TermDisplay$Message"), ProblemFilters.exclude[MissingClassProblem]("coursier.TermDisplay$Message$"), diff --git a/cache/src/main/scala/coursier/TermDisplay.scala b/cache/src/main/scala/coursier/TermDisplay.scala index 89b8b1db4..72b1f56f6 100644 --- a/cache/src/main/scala/coursier/TermDisplay.scala +++ b/cache/src/main/scala/coursier/TermDisplay.scala @@ -79,7 +79,7 @@ object TermDisplay { def display(): String } - private case class DownloadInfo( + private final case class DownloadInfo( downloaded: Long, previouslyDownloaded: Long, length: Option[Long], @@ -127,7 +127,7 @@ object TermDisplay { private def formatTimestamp(ts: Long): String = format.format(new Timestamp(ts)) - private case class CheckUpdateInfo( + private final case class CheckUpdateInfo( currentTimeOpt: Option[Long], remoteTimeOpt: Option[Long], isDone: Boolean diff --git a/cache/src/main/scala/coursier/util/Base64.scala b/cache/src/main/scala/coursier/util/Base64.scala index 0019a80c8..58cf0c888 100644 --- a/cache/src/main/scala/coursier/util/Base64.scala +++ b/cache/src/main/scala/coursier/util/Base64.scala @@ -16,7 +16,7 @@ import scala.collection.mutable.ArrayBuilder object Base64 { - case class B64Scheme(encodeTable: Array[Char], strictPadding: Boolean = true, + final case class B64Scheme(encodeTable: Array[Char], strictPadding: Boolean = true, postEncode: String => String = identity, preDecode: String => String = identity) { lazy val decodeTable = { diff --git a/cli/src/main/scala-2.11/coursier/cli/Bootstrap.scala b/cli/src/main/scala-2.11/coursier/cli/Bootstrap.scala index 3ae44f51a..071de1c5e 100644 --- a/cli/src/main/scala-2.11/coursier/cli/Bootstrap.scala +++ b/cli/src/main/scala-2.11/coursier/cli/Bootstrap.scala @@ -11,7 +11,7 @@ import caseapp._ import coursier.cli.util.Zip import coursier.internal.FileUtil -case class Bootstrap( +final case class Bootstrap( @Recurse artifactOptions: ArtifactOptions, @Recurse diff --git a/cli/src/main/scala-2.11/coursier/cli/Coursier.scala b/cli/src/main/scala-2.11/coursier/cli/Coursier.scala index f8e8a9fcf..1cb732438 100644 --- a/cli/src/main/scala-2.11/coursier/cli/Coursier.scala +++ b/cli/src/main/scala-2.11/coursier/cli/Coursier.scala @@ -7,7 +7,7 @@ import caseapp.core.{ ArgsApp, CommandsMessages } import shapeless.union.Union // Temporary, see comment in Coursier below -case class CoursierCommandHelper( +final case class CoursierCommandHelper( command: CoursierCommandHelper.U ) extends ArgsApp { def setRemainingArgs(remainingArgs: Seq[String], extraArgs: Seq[String]): Unit = diff --git a/cli/src/main/scala-2.11/coursier/cli/Fetch.scala b/cli/src/main/scala-2.11/coursier/cli/Fetch.scala index 132d1b00e..a541e02f0 100644 --- a/cli/src/main/scala-2.11/coursier/cli/Fetch.scala +++ b/cli/src/main/scala-2.11/coursier/cli/Fetch.scala @@ -7,7 +7,7 @@ import caseapp._ import scala.language.reflectiveCalls -case class Fetch( +final case class Fetch( @Recurse options: FetchOptions ) extends App { diff --git a/cli/src/main/scala-2.11/coursier/cli/Launch.scala b/cli/src/main/scala-2.11/coursier/cli/Launch.scala index c8bd5f048..074daaba6 100644 --- a/cli/src/main/scala-2.11/coursier/cli/Launch.scala +++ b/cli/src/main/scala-2.11/coursier/cli/Launch.scala @@ -79,7 +79,7 @@ trait ExtraArgsApp extends caseapp.core.DefaultArgsApp { extraArgs1 } -case class Launch( +final case class Launch( @Recurse options: LaunchOptions ) extends App with ExtraArgsApp { diff --git a/cli/src/main/scala-2.11/coursier/cli/Options.scala b/cli/src/main/scala-2.11/coursier/cli/Options.scala index 72b4100bb..deb6df077 100644 --- a/cli/src/main/scala-2.11/coursier/cli/Options.scala +++ b/cli/src/main/scala-2.11/coursier/cli/Options.scala @@ -5,7 +5,7 @@ import caseapp.{ HelpMessage => Help, ValueDescription => Value, ExtraName => Sh import coursier.util.Parse -case class CommonOptions( +final case class CommonOptions( @Help("Keep optional dependencies (Maven)") keepOptional: Boolean = false, @Help("Download mode (default: missing, that is fetch things missing from cache)") @@ -94,13 +94,13 @@ case class CommonOptions( lazy val classifier0 = classifier.flatMap(_.split(',')).filter(_.nonEmpty) } -case class CacheOptions( +final case class CacheOptions( @Help("Cache directory (defaults to environment variable COURSIER_CACHE or ~/.coursier/cache/v1)") @Short("C") cache: String = Cache.default.toString ) -case class IsolatedLoaderOptions( +final case class IsolatedLoaderOptions( @Value("target:dependency") @Short("I") isolated: List[String] = Nil, @@ -174,7 +174,7 @@ object ArtifactOptions { def defaultArtifactTypes = Set("jar", "bundle") } -case class ArtifactOptions( +final case class ArtifactOptions( @Help("Artifact types that should be retained (e.g. jar, src, doc, etc.) - defaults to jar,bundle") @Value("type1,type2,...") @Short("A") @@ -197,7 +197,7 @@ case class ArtifactOptions( } } -case class FetchOptions( +final case class FetchOptions( @Help("Fetch source artifacts") @Short("S") sources: Boolean = false, @@ -213,7 +213,7 @@ case class FetchOptions( common: CommonOptions = CommonOptions() ) -case class LaunchOptions( +final case class LaunchOptions( @Short("M") @Short("main") mainClass: String = "", @@ -226,7 +226,7 @@ case class LaunchOptions( common: CommonOptions = CommonOptions() ) -case class BootstrapOptions( +final case class BootstrapOptions( @Short("M") @Short("main") mainClass: String = "", @@ -253,7 +253,7 @@ case class BootstrapOptions( common: CommonOptions = CommonOptions() ) -case class SparkSubmitOptions( +final case class SparkSubmitOptions( @Short("M") @Short("main") @Help("Main class to be launched (optional if in manifest)") diff --git a/cli/src/main/scala-2.11/coursier/cli/Resolve.scala b/cli/src/main/scala-2.11/coursier/cli/Resolve.scala index fd1a78e86..8536de833 100644 --- a/cli/src/main/scala-2.11/coursier/cli/Resolve.scala +++ b/cli/src/main/scala-2.11/coursier/cli/Resolve.scala @@ -3,7 +3,7 @@ package cli import caseapp._ -case class Resolve( +final case class Resolve( @Recurse common: CommonOptions ) extends App { diff --git a/cli/src/main/scala-2.11/coursier/cli/SparkSubmit.scala b/cli/src/main/scala-2.11/coursier/cli/SparkSubmit.scala index 4df696265..72f48b777 100644 --- a/cli/src/main/scala-2.11/coursier/cli/SparkSubmit.scala +++ b/cli/src/main/scala-2.11/coursier/cli/SparkSubmit.scala @@ -50,7 +50,7 @@ object SparkSubmit { * @author Han Ju */ @CommandName("spark-submit") -case class SparkSubmit( +final case class SparkSubmit( @Recurse options: SparkSubmitOptions ) extends App with ExtraArgsApp { diff --git a/cli/src/main/scala-2.11/coursier/cli/spark/Assembly.scala b/cli/src/main/scala-2.11/coursier/cli/spark/Assembly.scala index 6cc1a59fc..8ddb6b674 100644 --- a/cli/src/main/scala-2.11/coursier/cli/spark/Assembly.scala +++ b/cli/src/main/scala-2.11/coursier/cli/spark/Assembly.scala @@ -24,8 +24,8 @@ object Assembly { def path: String } - case class Exclude(path: String) extends PathRule - case class ExcludePattern(path: Pattern) extends Rule + final case class Exclude(path: String) extends PathRule + final case class ExcludePattern(path: Pattern) extends Rule object ExcludePattern { def apply(s: String): ExcludePattern = @@ -34,8 +34,8 @@ object Assembly { // TODO Accept a separator: Array[Byte] argument in these // (to separate content with a line return in particular) - case class Append(path: String) extends PathRule - case class AppendPattern(path: Pattern) extends Rule + final case class Append(path: String) extends PathRule + final case class AppendPattern(path: Pattern) extends Rule object AppendPattern { def apply(s: String): AppendPattern = diff --git a/core/shared/src/main/scala/coursier/core/Activation.scala b/core/shared/src/main/scala/coursier/core/Activation.scala index 79e980815..1b98abc2d 100644 --- a/core/shared/src/main/scala/coursier/core/Activation.scala +++ b/core/shared/src/main/scala/coursier/core/Activation.scala @@ -47,7 +47,7 @@ final case class Activation( object Activation { - case class Os( + final case class Os( arch: Option[String], families: Set[String], name: Option[String], diff --git a/core/shared/src/main/scala/coursier/core/Definitions.scala b/core/shared/src/main/scala/coursier/core/Definitions.scala index 3a5fc6b46..3331b8fc2 100644 --- a/core/shared/src/main/scala/coursier/core/Definitions.scala +++ b/core/shared/src/main/scala/coursier/core/Definitions.scala @@ -219,7 +219,7 @@ object Artifact { } } -case class Authentication( +final case class Authentication( user: String, password: String ) { diff --git a/core/shared/src/main/scala/coursier/core/Version.scala b/core/shared/src/main/scala/coursier/core/Version.scala index 34da4d71d..08b2c3652 100644 --- a/core/shared/src/main/scala/coursier/core/Version.scala +++ b/core/shared/src/main/scala/coursier/core/Version.scala @@ -8,7 +8,7 @@ import coursier.core.compatibility._ * * Same kind of ordering as aether-util/src/main/java/org/eclipse/aether/util/version/GenericVersion.java */ -case class Version(repr: String) extends Ordered[Version] { +final case class Version(repr: String) extends Ordered[Version] { lazy val items = Version.items(repr) lazy val rawItems: Seq[Version.Item] = { val (first, tokens) = Version.Tokenizer(repr) diff --git a/core/shared/src/main/scala/coursier/core/Versions.scala b/core/shared/src/main/scala/coursier/core/Versions.scala index d59ecfec9..3512b4ed7 100644 --- a/core/shared/src/main/scala/coursier/core/Versions.scala +++ b/core/shared/src/main/scala/coursier/core/Versions.scala @@ -3,10 +3,12 @@ package coursier.core import scalaz.{ -\/, \/, \/- } import scalaz.Scalaz.ToEitherOps -case class VersionInterval(from: Option[Version], - to: Option[Version], - fromIncluded: Boolean, - toIncluded: Boolean) { +final case class VersionInterval( + from: Option[Version], + to: Option[Version], + fromIncluded: Boolean, + toIncluded: Boolean +) { def isValid: Boolean = { val fromToOrder = diff --git a/core/shared/src/main/scala/coursier/ivy/IvyRepository.scala b/core/shared/src/main/scala/coursier/ivy/IvyRepository.scala index 250fba614..8956db9f2 100644 --- a/core/shared/src/main/scala/coursier/ivy/IvyRepository.scala +++ b/core/shared/src/main/scala/coursier/ivy/IvyRepository.scala @@ -8,7 +8,7 @@ import scala.language.higherKinds import scalaz._ import scalaz.Scalaz._ -case class IvyRepository( +final case class IvyRepository( pattern: Pattern, metadataPatternOpt: Option[Pattern], changing: Option[Boolean], diff --git a/core/shared/src/main/scala/coursier/ivy/Pattern.scala b/core/shared/src/main/scala/coursier/ivy/Pattern.scala index 98704eff8..f8031e6bb 100644 --- a/core/shared/src/main/scala/coursier/ivy/Pattern.scala +++ b/core/shared/src/main/scala/coursier/ivy/Pattern.scala @@ -4,7 +4,7 @@ import scalaz._, Scalaz._ import fastparse.all._ -case class PropertiesPattern(chunks: Seq[PropertiesPattern.ChunkOrProperty]) { +final case class PropertiesPattern(chunks: Seq[PropertiesPattern.ChunkOrProperty]) { def string: String = chunks.map(_.string).mkString @@ -51,7 +51,7 @@ case class PropertiesPattern(chunks: Seq[PropertiesPattern.ChunkOrProperty]) { } } -case class Pattern(chunks: Seq[Pattern.Chunk]) { +final case class Pattern(chunks: Seq[Pattern.Chunk]) { def +:(chunk: Pattern.Chunk): Pattern = Pattern(chunk +: chunks) @@ -101,17 +101,17 @@ object PropertiesPattern { } object ChunkOrProperty { - case class Prop(name: String, alternative: Option[Seq[ChunkOrProperty]]) extends ChunkOrProperty { + final case class Prop(name: String, alternative: Option[Seq[ChunkOrProperty]]) extends ChunkOrProperty { def string: String = s"$${" + name + alternative.fold("")(alt => "-" + alt.map(_.string).mkString) + "}" } - case class Var(name: String) extends ChunkOrProperty { + final case class Var(name: String) extends ChunkOrProperty { def string: String = "[" + name + "]" } - case class Opt(content: ChunkOrProperty*) extends ChunkOrProperty { + final case class Opt(content: ChunkOrProperty*) extends ChunkOrProperty { def string: String = "(" + content.map(_.string).mkString + ")" } - case class Const(value: String) extends ChunkOrProperty { + final case class Const(value: String) extends ChunkOrProperty { def string: String = value } @@ -159,13 +159,13 @@ object Pattern { } object Chunk { - case class Var(name: String) extends Chunk { + final case class Var(name: String) extends Chunk { def string: String = "[" + name + "]" } - case class Opt(content: Chunk*) extends Chunk { + final case class Opt(content: Chunk*) extends Chunk { def string: String = "(" + content.map(_.string).mkString + ")" } - case class Const(value: String) extends Chunk { + final case class Const(value: String) extends Chunk { def string: String = value } diff --git a/core/shared/src/main/scala/coursier/maven/MavenRepository.scala b/core/shared/src/main/scala/coursier/maven/MavenRepository.scala index 796b7f5ca..eaee02d20 100644 --- a/core/shared/src/main/scala/coursier/maven/MavenRepository.scala +++ b/core/shared/src/main/scala/coursier/maven/MavenRepository.scala @@ -75,7 +75,7 @@ object MavenRepository { } -case class MavenRepository( +final case class MavenRepository( root: String, changing: Option[Boolean] = None, /** Hackish hack for sbt plugins mainly - what this does really sucks */ diff --git a/core/shared/src/main/scala/coursier/maven/MavenSource.scala b/core/shared/src/main/scala/coursier/maven/MavenSource.scala index fd3c60145..6bdec3c94 100644 --- a/core/shared/src/main/scala/coursier/maven/MavenSource.scala +++ b/core/shared/src/main/scala/coursier/maven/MavenSource.scala @@ -2,7 +2,7 @@ package coursier.maven import coursier.core._ -case class MavenSource( +final case class MavenSource( root: String, changing: Option[Boolean] = None, /** See doc on MavenRepository */ diff --git a/core/shared/src/main/scala/coursier/util/Print.scala b/core/shared/src/main/scala/coursier/util/Print.scala index c53321981..eb8de860c 100644 --- a/core/shared/src/main/scala/coursier/util/Print.scala +++ b/core/shared/src/main/scala/coursier/util/Print.scala @@ -71,7 +71,7 @@ object Print { else ("", "", "") - case class Elem(dep: Dependency, excluded: Boolean) { + final case class Elem(dep: Dependency, excluded: Boolean) { lazy val reconciledVersion = resolution.reconciledVersions .getOrElse(dep.module, dep.version) @@ -144,7 +144,7 @@ object Print { if (reverse) { - case class Parent( + final case class Parent( module: Module, version: String, dependsOn: Module, diff --git a/http-server/src/main/scala-2.11/coursier/HttpServer.scala b/http-server/src/main/scala-2.11/coursier/HttpServer.scala index b6cdbbf6d..11e3b732b 100644 --- a/http-server/src/main/scala-2.11/coursier/HttpServer.scala +++ b/http-server/src/main/scala-2.11/coursier/HttpServer.scala @@ -16,7 +16,7 @@ import scala.collection.JavaConverters._ import scalaz.concurrent.Task -case class HttpServerApp( +final case class HttpServerApp( @ExtraName("d") @ValueDescription("served directory") directory: String, diff --git a/plugin/src/main/scala-2.10/coursier/Credentials.scala b/plugin/src/main/scala-2.10/coursier/Credentials.scala index c3229fe17..ac55f8579 100644 --- a/plugin/src/main/scala-2.10/coursier/Credentials.scala +++ b/plugin/src/main/scala-2.10/coursier/Credentials.scala @@ -15,11 +15,11 @@ sealed abstract class Credentials extends Product with Serializable { object Credentials { - case class Direct(user: String, password: String) extends Credentials { + final case class Direct(user: String, password: String) extends Credentials { override def toString = s"Direct($user, ******)" } - case class FromFile(file: File) extends Credentials { + final case class FromFile(file: File) extends Credentials { private lazy val props = { val p = new Properties() diff --git a/plugin/src/main/scala-2.10/coursier/FallbackDependenciesRepository.scala b/plugin/src/main/scala-2.10/coursier/FallbackDependenciesRepository.scala index 8d0cc8553..43ea07d77 100644 --- a/plugin/src/main/scala-2.10/coursier/FallbackDependenciesRepository.scala +++ b/plugin/src/main/scala-2.10/coursier/FallbackDependenciesRepository.scala @@ -65,7 +65,7 @@ object FallbackDependenciesRepository { } -case class FallbackDependenciesRepository( +final case class FallbackDependenciesRepository( fallbacks: Map[(Module, String), (URL, Boolean)] ) extends Repository { diff --git a/plugin/src/main/scala-2.10/coursier/InterProjectRepository.scala b/plugin/src/main/scala-2.10/coursier/InterProjectRepository.scala index 88b6e91a1..affb10273 100644 --- a/plugin/src/main/scala-2.10/coursier/InterProjectRepository.scala +++ b/plugin/src/main/scala-2.10/coursier/InterProjectRepository.scala @@ -4,7 +4,7 @@ import scala.language.higherKinds import scalaz.{ -\/, \/-, Monad, EitherT } -case class InterProjectRepository(projects: Seq[Project]) extends Repository { +final case class InterProjectRepository(projects: Seq[Project]) extends Repository { private val map = projects .map { proj => proj.moduleVersion -> proj } diff --git a/plugin/src/main/scala-2.10/coursier/ResolutionError.scala b/plugin/src/main/scala-2.10/coursier/ResolutionError.scala index 951e4d502..cc246c3d9 100644 --- a/plugin/src/main/scala-2.10/coursier/ResolutionError.scala +++ b/plugin/src/main/scala-2.10/coursier/ResolutionError.scala @@ -39,11 +39,11 @@ sealed abstract class ResolutionError extends Product with Serializable { object ResolutionError { case object MaximumIterationsReached extends ResolutionError - case class UnknownException(ex: Throwable) extends ResolutionError - case class UnknownDownloadException(ex: Throwable) extends ResolutionError - case class Conflicts(description: String) extends ResolutionError + final case class UnknownException(ex: Throwable) extends ResolutionError + final case class UnknownDownloadException(ex: Throwable) extends ResolutionError + final case class Conflicts(description: String) extends ResolutionError - case class MetadataDownloadErrors(errors: Seq[(Dependency, Seq[String])]) extends ResolutionError { + final case class MetadataDownloadErrors(errors: Seq[(Dependency, Seq[String])]) extends ResolutionError { def description(): String = { def grouped(errs: Seq[String]) = @@ -86,7 +86,7 @@ object ResolutionError { } } - case class DownloadErrors(errors: Seq[FileError]) extends ResolutionError { + final case class DownloadErrors(errors: Seq[FileError]) extends ResolutionError { def description(verbose: Boolean): String = { diff --git a/plugin/src/main/scala-2.10/coursier/Tasks.scala b/plugin/src/main/scala-2.10/coursier/Tasks.scala index 2dbcc116b..ebd28996c 100644 --- a/plugin/src/main/scala-2.10/coursier/Tasks.scala +++ b/plugin/src/main/scala-2.10/coursier/Tasks.scala @@ -250,7 +250,7 @@ object Tasks { } } - private case class ResolutionCacheKey( + private final case class ResolutionCacheKey( project: Project, repositories: Seq[Repository], userEnabledProfiles: Set[String], @@ -258,7 +258,7 @@ object Tasks { sbtClassifiers: Boolean ) - private case class ReportCacheKey( + private final case class ReportCacheKey( project: Project, resolution: Resolution, withClassifiers: Boolean, diff --git a/tests/shared/src/test/scala/coursier/test/TestRepository.scala b/tests/shared/src/test/scala/coursier/test/TestRepository.scala index 1bbb38024..94e51dcb0 100644 --- a/tests/shared/src/test/scala/coursier/test/TestRepository.scala +++ b/tests/shared/src/test/scala/coursier/test/TestRepository.scala @@ -8,7 +8,7 @@ import scala.language.higherKinds import scalaz.{ Monad, EitherT } import scalaz.Scalaz._ -case class TestRepository(projects: Map[(Module, String), Project]) extends Repository { +final case class TestRepository(projects: Map[(Module, String), Project]) extends Repository { val source = new core.Artifact.Source { def artifacts( dependency: Dependency, diff --git a/web/src/main/scala/coursier/web/Backend.scala b/web/src/main/scala/coursier/web/Backend.scala index 64e3511b3..0573bda17 100644 --- a/web/src/main/scala/coursier/web/Backend.scala +++ b/web/src/main/scala/coursier/web/Backend.scala @@ -15,11 +15,11 @@ import scala.concurrent.Future import scala.scalajs.js import js.Dynamic.{ global => g } -case class ResolutionOptions( +final case class ResolutionOptions( followOptional: Boolean = false ) -case class State( +final case class State( modules: Seq[Dependency], repositories: Seq[(String, MavenRepository)], options: ResolutionOptions, From 035391f6478d5fde888bfed656157da48786d2f8 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Thu, 2 Feb 2017 01:36:33 +0100 Subject: [PATCH 03/10] Add missing language.implicitConversions imports --- cache/src/main/scala/coursier/Platform.scala | 3 ++- core/shared/src/main/scala/coursier/ivy/Pattern.scala | 2 ++ fetch-js/src/main/scala/coursier/Platform.scala | 2 ++ plugin/src/main/scala-2.10/coursier/Structure.scala | 2 ++ 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/cache/src/main/scala/coursier/Platform.scala b/cache/src/main/scala/coursier/Platform.scala index 33acf1bde..1ee752582 100644 --- a/cache/src/main/scala/coursier/Platform.scala +++ b/cache/src/main/scala/coursier/Platform.scala @@ -1,7 +1,8 @@ package coursier import java.io._ -import java.net.URL + +import scala.language.implicitConversions import scalaz._ import scalaz.concurrent.Task diff --git a/core/shared/src/main/scala/coursier/ivy/Pattern.scala b/core/shared/src/main/scala/coursier/ivy/Pattern.scala index f8031e6bb..5c1b6b5d9 100644 --- a/core/shared/src/main/scala/coursier/ivy/Pattern.scala +++ b/core/shared/src/main/scala/coursier/ivy/Pattern.scala @@ -1,5 +1,7 @@ package coursier.ivy +import scala.language.implicitConversions + import scalaz._, Scalaz._ import fastparse.all._ diff --git a/fetch-js/src/main/scala/coursier/Platform.scala b/fetch-js/src/main/scala/coursier/Platform.scala index f09ced57d..eea0efe9b 100644 --- a/fetch-js/src/main/scala/coursier/Platform.scala +++ b/fetch-js/src/main/scala/coursier/Platform.scala @@ -4,6 +4,8 @@ import org.scalajs.dom.raw.{ Event, XMLHttpRequest } import scala.concurrent.{ ExecutionContext, Promise, Future } +import scala.language.implicitConversions + import scala.scalajs.js import js.Dynamic.{ global => g } diff --git a/plugin/src/main/scala-2.10/coursier/Structure.scala b/plugin/src/main/scala-2.10/coursier/Structure.scala index c9e5ea7e3..1b687fbb9 100644 --- a/plugin/src/main/scala-2.10/coursier/Structure.scala +++ b/plugin/src/main/scala-2.10/coursier/Structure.scala @@ -2,6 +2,8 @@ package coursier import sbt._ +import scala.language.implicitConversions + // things from sbt-structure object Structure { import Def.Initialize._ From a6b9c845c280bfc423b3f646bcaf4be7a4a6f07e Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Thu, 2 Feb 2017 02:06:04 +0100 Subject: [PATCH 04/10] Rename plugin module to sbt-coursier --- .ci/travis.sh | 4 ++-- appveyor.yml | 2 +- build.sbt | 9 +++------ .../src/main/scala-2.10/coursier/CoursierPlugin.scala | 0 .../src/main/scala-2.10/coursier/Credentials.scala | 0 .../coursier/FallbackDependenciesRepository.scala | 0 .../src/main/scala-2.10/coursier/FromSbt.scala | 0 .../scala-2.10/coursier/InterProjectRepository.scala | 0 .../src/main/scala-2.10/coursier/IvyXml.scala | 0 .../src/main/scala-2.10/coursier/Keys.scala | 0 .../src/main/scala-2.10/coursier/ResolutionError.scala | 0 .../main/scala-2.10/coursier/ResolutionException.scala | 0 .../src/main/scala-2.10/coursier/SbtBootJars.scala | 0 .../src/main/scala-2.10/coursier/Settings.scala | 0 .../src/main/scala-2.10/coursier/Structure.scala | 0 .../src/main/scala-2.10/coursier/Tasks.scala | 0 .../src/main/scala-2.10/coursier/ToSbt.scala | 0 .../src/sbt-test/sbt-coursier/aar-packaging/build.sbt | 0 .../sbt-coursier/aar-packaging/project/plugins.sbt | 0 .../sbt-coursier/aar-packaging/src/main/scala/Main.scala | 0 .../src/sbt-test/sbt-coursier/aar-packaging/test | 0 .../sbt-coursier/credentials-from-file/build.sbt | 0 .../sbt-coursier/credentials-from-file/credentials | 0 .../credentials-from-file/project/plugins.sbt | 0 .../credentials-from-file/src/main/scala/Main.scala | 0 .../src/sbt-test/sbt-coursier/credentials-from-file/test | 0 .../src/sbt-test/sbt-coursier/credentials-sbt/build.sbt | 0 .../sbt-coursier/credentials-sbt/project/plugins.sbt | 0 .../credentials-sbt/src/main/scala/Main.scala | 0 .../src/sbt-test/sbt-coursier/credentials-sbt/test | 0 .../src/sbt-test/sbt-coursier/credentials/build.sbt | 0 .../sbt-coursier/credentials/project/plugins.sbt | 0 .../sbt-coursier/credentials/src/main/scala/Main.scala | 0 .../src/sbt-test/sbt-coursier/credentials/test | 0 .../sbt-test/sbt-coursier/exclude-dependencies/build.sbt | 0 .../exclude-dependencies/project/plugins.sbt | 0 .../exclude-dependencies/src/main/scala/Main.scala | 0 .../src/sbt-test/sbt-coursier/exclude-dependencies/test | 0 .../a/src/main/scala/A.scala | 0 .../b/src/main/scala/Main.scala | 0 .../fallback-dependencies-inter-project/build.sbt | 0 .../project/plugins.sbt | 0 .../fallback-dependencies-inter-project/test | 0 .../src/sbt-test/sbt-coursier/from-no-head/build.sbt | 0 .../sbt-coursier/from-no-head/project/plugins.sbt | 0 .../sbt-coursier/from-no-head/src/main/scala/Main.scala | 0 .../src/sbt-test/sbt-coursier/from-no-head/test | 0 .../src/sbt-test/sbt-coursier/from-wrong-url/build.sbt | 0 .../sbt-coursier/from-wrong-url/project/plugins.sbt | 0 .../from-wrong-url/src/main/scala/Main.scala | 0 .../src/sbt-test/sbt-coursier/from-wrong-url/test | 0 .../src/sbt-test/sbt-coursier/from/build.sbt | 0 .../src/sbt-test/sbt-coursier/from/project/plugins.sbt | 0 .../sbt-test/sbt-coursier/from/src/main/scala/Main.scala | 0 .../src/sbt-test/sbt-coursier/from/test | 0 .../hadoop-yarn-server-resourcemanager/build.sbt | 0 .../project/plugins.sbt | 0 .../src/main/scala/Main.scala | 0 .../sbt-coursier/hadoop-yarn-server-resourcemanager/test | 0 .../inter-project-resolvers/a/src/main/scala/A.scala | 0 .../inter-project-resolvers/b/src/main/scala/Main.scala | 0 .../sbt-coursier/inter-project-resolvers/build.sbt | 0 .../inter-project-resolvers/project/plugins.sbt | 0 .../sbt-test/sbt-coursier/inter-project-resolvers/test | 0 .../sbt-coursier/inter-project/a/src/main/scala/A.scala | 0 .../inter-project/b/src/main/scala/Main.scala | 0 .../src/sbt-test/sbt-coursier/inter-project/build.sbt | 0 .../sbt-coursier/inter-project/project/plugins.sbt | 0 .../src/sbt-test/sbt-coursier/inter-project/test | 0 .../src/sbt-test/sbt-coursier/maven-compatible/build.sbt | 0 .../sbt-coursier/maven-compatible/project/plugins.sbt | 0 .../maven-compatible/src/main/scala/Main.scala | 0 .../src/sbt-test/sbt-coursier/maven-compatible/test | 0 .../src/sbt-test/sbt-coursier/profiles/build.sbt | 0 .../src/sbt-test/sbt-coursier/profiles/output | 0 .../sbt-test/sbt-coursier/profiles/project/plugins.sbt | 0 .../sbt-coursier/profiles/src/main/scala/Main.scala | 0 .../src/sbt-test/sbt-coursier/profiles/test | 0 .../src/sbt-test/sbt-coursier/scala-jars/build.sbt | 0 .../sbt-test/sbt-coursier/scala-jars/project/plugins.sbt | 0 .../sbt-coursier/scala-jars/src/main/scala/Main.scala | 0 .../src/sbt-test/sbt-coursier/scala-jars/test | 0 .../sbt-coursier/scala-sources-javadoc-jars/build.sbt | 0 .../scala-sources-javadoc-jars/project/plugins.sbt | 0 .../scala-sources-javadoc-jars/src/main/scala/Main.scala | 0 .../sbt-coursier/scala-sources-javadoc-jars/test | 0 .../src/sbt-test/sbt-coursier/simple/build.sbt | 0 .../src/sbt-test/sbt-coursier/simple/project/plugins.sbt | 0 .../sbt-coursier/simple/src/main/scala/Main.scala | 0 .../src/sbt-test/sbt-coursier/simple/test | 0 .../typelevel-force-version-stdlib/build.sbt | 0 .../typelevel-force-version-stdlib/project/plugins.sbt | 0 .../src/main/scala/Main.scala | 0 .../sbt-coursier/typelevel-force-version-stdlib/test | 0 .../src/sbt-test/sbt-coursier/typelevel/build.sbt | 0 .../sbt-test/sbt-coursier/typelevel/project/plugins.sbt | 0 .../sbt-coursier/typelevel/src/main/scala/Main.scala | 0 .../src/sbt-test/sbt-coursier/typelevel/test | 0 .../src/sbt-test/sbt-coursier/zookeeper/build.sbt | 0 .../sbt-test/sbt-coursier/zookeeper/project/plugins.sbt | 0 .../sbt-coursier/zookeeper/src/main/scala/Main.scala | 0 .../src/sbt-test/sbt-coursier/zookeeper/test | 0 102 files changed, 6 insertions(+), 9 deletions(-) rename {plugin => sbt-coursier}/src/main/scala-2.10/coursier/CoursierPlugin.scala (100%) rename {plugin => sbt-coursier}/src/main/scala-2.10/coursier/Credentials.scala (100%) rename {plugin => sbt-coursier}/src/main/scala-2.10/coursier/FallbackDependenciesRepository.scala (100%) rename {plugin => sbt-coursier}/src/main/scala-2.10/coursier/FromSbt.scala (100%) rename {plugin => sbt-coursier}/src/main/scala-2.10/coursier/InterProjectRepository.scala (100%) rename {plugin => sbt-coursier}/src/main/scala-2.10/coursier/IvyXml.scala (100%) rename {plugin => sbt-coursier}/src/main/scala-2.10/coursier/Keys.scala (100%) rename {plugin => sbt-coursier}/src/main/scala-2.10/coursier/ResolutionError.scala (100%) rename {plugin => sbt-coursier}/src/main/scala-2.10/coursier/ResolutionException.scala (100%) rename {plugin => sbt-coursier}/src/main/scala-2.10/coursier/SbtBootJars.scala (100%) rename {plugin => sbt-coursier}/src/main/scala-2.10/coursier/Settings.scala (100%) rename {plugin => sbt-coursier}/src/main/scala-2.10/coursier/Structure.scala (100%) rename {plugin => sbt-coursier}/src/main/scala-2.10/coursier/Tasks.scala (100%) rename {plugin => sbt-coursier}/src/main/scala-2.10/coursier/ToSbt.scala (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/aar-packaging/build.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/aar-packaging/project/plugins.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/aar-packaging/src/main/scala/Main.scala (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/aar-packaging/test (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/credentials-from-file/build.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/credentials-from-file/credentials (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/credentials-from-file/project/plugins.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/credentials-from-file/src/main/scala/Main.scala (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/credentials-from-file/test (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/credentials-sbt/build.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/credentials-sbt/project/plugins.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/credentials-sbt/src/main/scala/Main.scala (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/credentials-sbt/test (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/credentials/build.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/credentials/project/plugins.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/credentials/src/main/scala/Main.scala (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/credentials/test (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/exclude-dependencies/build.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/exclude-dependencies/project/plugins.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/exclude-dependencies/src/main/scala/Main.scala (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/exclude-dependencies/test (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/fallback-dependencies-inter-project/a/src/main/scala/A.scala (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/fallback-dependencies-inter-project/b/src/main/scala/Main.scala (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/fallback-dependencies-inter-project/build.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/fallback-dependencies-inter-project/project/plugins.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/fallback-dependencies-inter-project/test (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/from-no-head/build.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/from-no-head/project/plugins.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/from-no-head/src/main/scala/Main.scala (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/from-no-head/test (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/from-wrong-url/build.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/from-wrong-url/project/plugins.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/from-wrong-url/src/main/scala/Main.scala (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/from-wrong-url/test (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/from/build.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/from/project/plugins.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/from/src/main/scala/Main.scala (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/from/test (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/hadoop-yarn-server-resourcemanager/build.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/hadoop-yarn-server-resourcemanager/project/plugins.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/hadoop-yarn-server-resourcemanager/src/main/scala/Main.scala (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/hadoop-yarn-server-resourcemanager/test (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/inter-project-resolvers/a/src/main/scala/A.scala (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/inter-project-resolvers/b/src/main/scala/Main.scala (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/inter-project-resolvers/build.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/inter-project-resolvers/project/plugins.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/inter-project-resolvers/test (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/inter-project/a/src/main/scala/A.scala (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/inter-project/b/src/main/scala/Main.scala (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/inter-project/build.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/inter-project/project/plugins.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/inter-project/test (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/maven-compatible/build.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/maven-compatible/project/plugins.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/maven-compatible/src/main/scala/Main.scala (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/maven-compatible/test (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/profiles/build.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/profiles/output (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/profiles/project/plugins.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/profiles/src/main/scala/Main.scala (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/profiles/test (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/scala-jars/build.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/scala-jars/project/plugins.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/scala-jars/src/main/scala/Main.scala (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/scala-jars/test (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/scala-sources-javadoc-jars/build.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/scala-sources-javadoc-jars/project/plugins.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/scala-sources-javadoc-jars/src/main/scala/Main.scala (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/scala-sources-javadoc-jars/test (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/simple/build.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/simple/project/plugins.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/simple/src/main/scala/Main.scala (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/simple/test (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/typelevel-force-version-stdlib/build.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/typelevel-force-version-stdlib/project/plugins.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/typelevel-force-version-stdlib/src/main/scala/Main.scala (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/typelevel-force-version-stdlib/test (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/typelevel/build.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/typelevel/project/plugins.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/typelevel/src/main/scala/Main.scala (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/typelevel/test (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/zookeeper/build.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/zookeeper/project/plugins.sbt (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/zookeeper/src/main/scala/Main.scala (100%) rename {plugin => sbt-coursier}/src/sbt-test/sbt-coursier/zookeeper/test (100%) diff --git a/.ci/travis.sh b/.ci/travis.sh index f52120f17..6a853d75e 100755 --- a/.ci/travis.sh +++ b/.ci/travis.sh @@ -47,7 +47,7 @@ RUN_SHADING_TESTS=1 if echo "$TRAVIS_SCALA_VERSION" | grep -q "^2\.10"; then SBT_COMMANDS="$SBT_COMMANDS publishLocal" # to make the scripted tests happy - SBT_COMMANDS="$SBT_COMMANDS plugin/scripted" + SBT_COMMANDS="$SBT_COMMANDS sbt-coursier/scripted" if [ "$RUN_SHADING_TESTS" = 1 ]; then # for the shading scripted test @@ -68,7 +68,7 @@ if echo "$TRAVIS_SCALA_VERSION" | grep -q "^2\.10"; then rm -rf jarjar fi - SBT_COMMANDS="$SBT_COMMANDS plugin/publishLocal sbt-shading/scripted" + SBT_COMMANDS="$SBT_COMMANDS sbt-coursier/publishLocal sbt-shading/scripted" fi fi diff --git a/appveyor.yml b/appveyor.yml index 5a7cad557..88b57bc96 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -30,7 +30,7 @@ test_script: - ps: Start-Job { & java -jar -noverify C:\projects\coursier\coursier launch -r http://dl.bintray.com/scalaz/releases io.get-coursier:http-server-java7_2.11:1.0.0-SNAPSHOT -- -d /C:/projects/coursier/tests/jvm/src/test/resources/test-repo/http/abc.com -u user -P pass -r realm -v } - sbt ++2.12.1 testsJVM/test testsJVM/it:test # Would node be around for testsJS/test? - sbt ++2.11.8 testsJVM/test testsJVM/it:test - - sbt ++2.10.6 testsJVM/test testsJVM/it:test plugin/scripted plugin/publishLocal sbt-shading/scripted + - sbt ++2.10.6 testsJVM/test testsJVM/it:test sbt-coursier/scripted sbt-coursier/publishLocal sbt-shading/scripted cache: - C:\Users\appveyor\.ivy2\cache - C:\Users\appveyor\.m2 diff --git a/build.sbt b/build.sbt index 050184561..55eed0e38 100644 --- a/build.sbt +++ b/build.sbt @@ -345,16 +345,13 @@ lazy val doc = project ) // Don't try to compile that if you're not in 2.10 -lazy val plugin = project +lazy val `sbt-coursier` = project .dependsOn(coreJvm, cache) .settings(pluginSettings) - .settings( - name := "sbt-coursier" - ) // Don't try to compile that if you're not in 2.10 lazy val `sbt-shading` = project - .dependsOn(plugin) + .dependsOn(`sbt-coursier`) .settings(pluginSettings) .settings( // Warning: this version doesn't handle well class names with '$'s @@ -404,7 +401,7 @@ lazy val `coursier` = project.in(file(".")) cache, bootstrap, cli, - plugin, + `sbt-coursier`, `sbt-shading`, web, doc, diff --git a/plugin/src/main/scala-2.10/coursier/CoursierPlugin.scala b/sbt-coursier/src/main/scala-2.10/coursier/CoursierPlugin.scala similarity index 100% rename from plugin/src/main/scala-2.10/coursier/CoursierPlugin.scala rename to sbt-coursier/src/main/scala-2.10/coursier/CoursierPlugin.scala diff --git a/plugin/src/main/scala-2.10/coursier/Credentials.scala b/sbt-coursier/src/main/scala-2.10/coursier/Credentials.scala similarity index 100% rename from plugin/src/main/scala-2.10/coursier/Credentials.scala rename to sbt-coursier/src/main/scala-2.10/coursier/Credentials.scala diff --git a/plugin/src/main/scala-2.10/coursier/FallbackDependenciesRepository.scala b/sbt-coursier/src/main/scala-2.10/coursier/FallbackDependenciesRepository.scala similarity index 100% rename from plugin/src/main/scala-2.10/coursier/FallbackDependenciesRepository.scala rename to sbt-coursier/src/main/scala-2.10/coursier/FallbackDependenciesRepository.scala diff --git a/plugin/src/main/scala-2.10/coursier/FromSbt.scala b/sbt-coursier/src/main/scala-2.10/coursier/FromSbt.scala similarity index 100% rename from plugin/src/main/scala-2.10/coursier/FromSbt.scala rename to sbt-coursier/src/main/scala-2.10/coursier/FromSbt.scala diff --git a/plugin/src/main/scala-2.10/coursier/InterProjectRepository.scala b/sbt-coursier/src/main/scala-2.10/coursier/InterProjectRepository.scala similarity index 100% rename from plugin/src/main/scala-2.10/coursier/InterProjectRepository.scala rename to sbt-coursier/src/main/scala-2.10/coursier/InterProjectRepository.scala diff --git a/plugin/src/main/scala-2.10/coursier/IvyXml.scala b/sbt-coursier/src/main/scala-2.10/coursier/IvyXml.scala similarity index 100% rename from plugin/src/main/scala-2.10/coursier/IvyXml.scala rename to sbt-coursier/src/main/scala-2.10/coursier/IvyXml.scala diff --git a/plugin/src/main/scala-2.10/coursier/Keys.scala b/sbt-coursier/src/main/scala-2.10/coursier/Keys.scala similarity index 100% rename from plugin/src/main/scala-2.10/coursier/Keys.scala rename to sbt-coursier/src/main/scala-2.10/coursier/Keys.scala diff --git a/plugin/src/main/scala-2.10/coursier/ResolutionError.scala b/sbt-coursier/src/main/scala-2.10/coursier/ResolutionError.scala similarity index 100% rename from plugin/src/main/scala-2.10/coursier/ResolutionError.scala rename to sbt-coursier/src/main/scala-2.10/coursier/ResolutionError.scala diff --git a/plugin/src/main/scala-2.10/coursier/ResolutionException.scala b/sbt-coursier/src/main/scala-2.10/coursier/ResolutionException.scala similarity index 100% rename from plugin/src/main/scala-2.10/coursier/ResolutionException.scala rename to sbt-coursier/src/main/scala-2.10/coursier/ResolutionException.scala diff --git a/plugin/src/main/scala-2.10/coursier/SbtBootJars.scala b/sbt-coursier/src/main/scala-2.10/coursier/SbtBootJars.scala similarity index 100% rename from plugin/src/main/scala-2.10/coursier/SbtBootJars.scala rename to sbt-coursier/src/main/scala-2.10/coursier/SbtBootJars.scala diff --git a/plugin/src/main/scala-2.10/coursier/Settings.scala b/sbt-coursier/src/main/scala-2.10/coursier/Settings.scala similarity index 100% rename from plugin/src/main/scala-2.10/coursier/Settings.scala rename to sbt-coursier/src/main/scala-2.10/coursier/Settings.scala diff --git a/plugin/src/main/scala-2.10/coursier/Structure.scala b/sbt-coursier/src/main/scala-2.10/coursier/Structure.scala similarity index 100% rename from plugin/src/main/scala-2.10/coursier/Structure.scala rename to sbt-coursier/src/main/scala-2.10/coursier/Structure.scala diff --git a/plugin/src/main/scala-2.10/coursier/Tasks.scala b/sbt-coursier/src/main/scala-2.10/coursier/Tasks.scala similarity index 100% rename from plugin/src/main/scala-2.10/coursier/Tasks.scala rename to sbt-coursier/src/main/scala-2.10/coursier/Tasks.scala diff --git a/plugin/src/main/scala-2.10/coursier/ToSbt.scala b/sbt-coursier/src/main/scala-2.10/coursier/ToSbt.scala similarity index 100% rename from plugin/src/main/scala-2.10/coursier/ToSbt.scala rename to sbt-coursier/src/main/scala-2.10/coursier/ToSbt.scala diff --git a/plugin/src/sbt-test/sbt-coursier/aar-packaging/build.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/aar-packaging/build.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/aar-packaging/build.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/aar-packaging/build.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/aar-packaging/project/plugins.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/aar-packaging/project/plugins.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/aar-packaging/project/plugins.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/aar-packaging/project/plugins.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/aar-packaging/src/main/scala/Main.scala b/sbt-coursier/src/sbt-test/sbt-coursier/aar-packaging/src/main/scala/Main.scala similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/aar-packaging/src/main/scala/Main.scala rename to sbt-coursier/src/sbt-test/sbt-coursier/aar-packaging/src/main/scala/Main.scala diff --git a/plugin/src/sbt-test/sbt-coursier/aar-packaging/test b/sbt-coursier/src/sbt-test/sbt-coursier/aar-packaging/test similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/aar-packaging/test rename to sbt-coursier/src/sbt-test/sbt-coursier/aar-packaging/test diff --git a/plugin/src/sbt-test/sbt-coursier/credentials-from-file/build.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/credentials-from-file/build.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/credentials-from-file/build.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/credentials-from-file/build.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/credentials-from-file/credentials b/sbt-coursier/src/sbt-test/sbt-coursier/credentials-from-file/credentials similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/credentials-from-file/credentials rename to sbt-coursier/src/sbt-test/sbt-coursier/credentials-from-file/credentials diff --git a/plugin/src/sbt-test/sbt-coursier/credentials-from-file/project/plugins.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/credentials-from-file/project/plugins.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/credentials-from-file/project/plugins.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/credentials-from-file/project/plugins.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/credentials-from-file/src/main/scala/Main.scala b/sbt-coursier/src/sbt-test/sbt-coursier/credentials-from-file/src/main/scala/Main.scala similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/credentials-from-file/src/main/scala/Main.scala rename to sbt-coursier/src/sbt-test/sbt-coursier/credentials-from-file/src/main/scala/Main.scala diff --git a/plugin/src/sbt-test/sbt-coursier/credentials-from-file/test b/sbt-coursier/src/sbt-test/sbt-coursier/credentials-from-file/test similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/credentials-from-file/test rename to sbt-coursier/src/sbt-test/sbt-coursier/credentials-from-file/test diff --git a/plugin/src/sbt-test/sbt-coursier/credentials-sbt/build.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/credentials-sbt/build.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/credentials-sbt/build.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/credentials-sbt/build.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/credentials-sbt/project/plugins.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/credentials-sbt/project/plugins.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/credentials-sbt/project/plugins.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/credentials-sbt/project/plugins.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/credentials-sbt/src/main/scala/Main.scala b/sbt-coursier/src/sbt-test/sbt-coursier/credentials-sbt/src/main/scala/Main.scala similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/credentials-sbt/src/main/scala/Main.scala rename to sbt-coursier/src/sbt-test/sbt-coursier/credentials-sbt/src/main/scala/Main.scala diff --git a/plugin/src/sbt-test/sbt-coursier/credentials-sbt/test b/sbt-coursier/src/sbt-test/sbt-coursier/credentials-sbt/test similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/credentials-sbt/test rename to sbt-coursier/src/sbt-test/sbt-coursier/credentials-sbt/test diff --git a/plugin/src/sbt-test/sbt-coursier/credentials/build.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/credentials/build.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/credentials/build.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/credentials/build.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/credentials/project/plugins.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/credentials/project/plugins.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/credentials/project/plugins.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/credentials/project/plugins.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/credentials/src/main/scala/Main.scala b/sbt-coursier/src/sbt-test/sbt-coursier/credentials/src/main/scala/Main.scala similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/credentials/src/main/scala/Main.scala rename to sbt-coursier/src/sbt-test/sbt-coursier/credentials/src/main/scala/Main.scala diff --git a/plugin/src/sbt-test/sbt-coursier/credentials/test b/sbt-coursier/src/sbt-test/sbt-coursier/credentials/test similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/credentials/test rename to sbt-coursier/src/sbt-test/sbt-coursier/credentials/test diff --git a/plugin/src/sbt-test/sbt-coursier/exclude-dependencies/build.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/exclude-dependencies/build.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/exclude-dependencies/build.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/exclude-dependencies/build.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/exclude-dependencies/project/plugins.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/exclude-dependencies/project/plugins.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/exclude-dependencies/project/plugins.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/exclude-dependencies/project/plugins.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/exclude-dependencies/src/main/scala/Main.scala b/sbt-coursier/src/sbt-test/sbt-coursier/exclude-dependencies/src/main/scala/Main.scala similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/exclude-dependencies/src/main/scala/Main.scala rename to sbt-coursier/src/sbt-test/sbt-coursier/exclude-dependencies/src/main/scala/Main.scala diff --git a/plugin/src/sbt-test/sbt-coursier/exclude-dependencies/test b/sbt-coursier/src/sbt-test/sbt-coursier/exclude-dependencies/test similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/exclude-dependencies/test rename to sbt-coursier/src/sbt-test/sbt-coursier/exclude-dependencies/test diff --git a/plugin/src/sbt-test/sbt-coursier/fallback-dependencies-inter-project/a/src/main/scala/A.scala b/sbt-coursier/src/sbt-test/sbt-coursier/fallback-dependencies-inter-project/a/src/main/scala/A.scala similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/fallback-dependencies-inter-project/a/src/main/scala/A.scala rename to sbt-coursier/src/sbt-test/sbt-coursier/fallback-dependencies-inter-project/a/src/main/scala/A.scala diff --git a/plugin/src/sbt-test/sbt-coursier/fallback-dependencies-inter-project/b/src/main/scala/Main.scala b/sbt-coursier/src/sbt-test/sbt-coursier/fallback-dependencies-inter-project/b/src/main/scala/Main.scala similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/fallback-dependencies-inter-project/b/src/main/scala/Main.scala rename to sbt-coursier/src/sbt-test/sbt-coursier/fallback-dependencies-inter-project/b/src/main/scala/Main.scala diff --git a/plugin/src/sbt-test/sbt-coursier/fallback-dependencies-inter-project/build.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/fallback-dependencies-inter-project/build.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/fallback-dependencies-inter-project/build.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/fallback-dependencies-inter-project/build.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/fallback-dependencies-inter-project/project/plugins.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/fallback-dependencies-inter-project/project/plugins.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/fallback-dependencies-inter-project/project/plugins.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/fallback-dependencies-inter-project/project/plugins.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/fallback-dependencies-inter-project/test b/sbt-coursier/src/sbt-test/sbt-coursier/fallback-dependencies-inter-project/test similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/fallback-dependencies-inter-project/test rename to sbt-coursier/src/sbt-test/sbt-coursier/fallback-dependencies-inter-project/test diff --git a/plugin/src/sbt-test/sbt-coursier/from-no-head/build.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/from-no-head/build.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/from-no-head/build.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/from-no-head/build.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/from-no-head/project/plugins.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/from-no-head/project/plugins.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/from-no-head/project/plugins.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/from-no-head/project/plugins.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/from-no-head/src/main/scala/Main.scala b/sbt-coursier/src/sbt-test/sbt-coursier/from-no-head/src/main/scala/Main.scala similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/from-no-head/src/main/scala/Main.scala rename to sbt-coursier/src/sbt-test/sbt-coursier/from-no-head/src/main/scala/Main.scala diff --git a/plugin/src/sbt-test/sbt-coursier/from-no-head/test b/sbt-coursier/src/sbt-test/sbt-coursier/from-no-head/test similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/from-no-head/test rename to sbt-coursier/src/sbt-test/sbt-coursier/from-no-head/test diff --git a/plugin/src/sbt-test/sbt-coursier/from-wrong-url/build.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/from-wrong-url/build.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/from-wrong-url/build.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/from-wrong-url/build.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/from-wrong-url/project/plugins.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/from-wrong-url/project/plugins.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/from-wrong-url/project/plugins.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/from-wrong-url/project/plugins.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/from-wrong-url/src/main/scala/Main.scala b/sbt-coursier/src/sbt-test/sbt-coursier/from-wrong-url/src/main/scala/Main.scala similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/from-wrong-url/src/main/scala/Main.scala rename to sbt-coursier/src/sbt-test/sbt-coursier/from-wrong-url/src/main/scala/Main.scala diff --git a/plugin/src/sbt-test/sbt-coursier/from-wrong-url/test b/sbt-coursier/src/sbt-test/sbt-coursier/from-wrong-url/test similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/from-wrong-url/test rename to sbt-coursier/src/sbt-test/sbt-coursier/from-wrong-url/test diff --git a/plugin/src/sbt-test/sbt-coursier/from/build.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/from/build.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/from/build.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/from/build.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/from/project/plugins.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/from/project/plugins.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/from/project/plugins.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/from/project/plugins.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/from/src/main/scala/Main.scala b/sbt-coursier/src/sbt-test/sbt-coursier/from/src/main/scala/Main.scala similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/from/src/main/scala/Main.scala rename to sbt-coursier/src/sbt-test/sbt-coursier/from/src/main/scala/Main.scala diff --git a/plugin/src/sbt-test/sbt-coursier/from/test b/sbt-coursier/src/sbt-test/sbt-coursier/from/test similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/from/test rename to sbt-coursier/src/sbt-test/sbt-coursier/from/test diff --git a/plugin/src/sbt-test/sbt-coursier/hadoop-yarn-server-resourcemanager/build.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/hadoop-yarn-server-resourcemanager/build.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/hadoop-yarn-server-resourcemanager/build.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/hadoop-yarn-server-resourcemanager/build.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/hadoop-yarn-server-resourcemanager/project/plugins.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/hadoop-yarn-server-resourcemanager/project/plugins.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/hadoop-yarn-server-resourcemanager/project/plugins.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/hadoop-yarn-server-resourcemanager/project/plugins.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/hadoop-yarn-server-resourcemanager/src/main/scala/Main.scala b/sbt-coursier/src/sbt-test/sbt-coursier/hadoop-yarn-server-resourcemanager/src/main/scala/Main.scala similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/hadoop-yarn-server-resourcemanager/src/main/scala/Main.scala rename to sbt-coursier/src/sbt-test/sbt-coursier/hadoop-yarn-server-resourcemanager/src/main/scala/Main.scala diff --git a/plugin/src/sbt-test/sbt-coursier/hadoop-yarn-server-resourcemanager/test b/sbt-coursier/src/sbt-test/sbt-coursier/hadoop-yarn-server-resourcemanager/test similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/hadoop-yarn-server-resourcemanager/test rename to sbt-coursier/src/sbt-test/sbt-coursier/hadoop-yarn-server-resourcemanager/test diff --git a/plugin/src/sbt-test/sbt-coursier/inter-project-resolvers/a/src/main/scala/A.scala b/sbt-coursier/src/sbt-test/sbt-coursier/inter-project-resolvers/a/src/main/scala/A.scala similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/inter-project-resolvers/a/src/main/scala/A.scala rename to sbt-coursier/src/sbt-test/sbt-coursier/inter-project-resolvers/a/src/main/scala/A.scala diff --git a/plugin/src/sbt-test/sbt-coursier/inter-project-resolvers/b/src/main/scala/Main.scala b/sbt-coursier/src/sbt-test/sbt-coursier/inter-project-resolvers/b/src/main/scala/Main.scala similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/inter-project-resolvers/b/src/main/scala/Main.scala rename to sbt-coursier/src/sbt-test/sbt-coursier/inter-project-resolvers/b/src/main/scala/Main.scala diff --git a/plugin/src/sbt-test/sbt-coursier/inter-project-resolvers/build.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/inter-project-resolvers/build.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/inter-project-resolvers/build.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/inter-project-resolvers/build.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/inter-project-resolvers/project/plugins.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/inter-project-resolvers/project/plugins.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/inter-project-resolvers/project/plugins.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/inter-project-resolvers/project/plugins.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/inter-project-resolvers/test b/sbt-coursier/src/sbt-test/sbt-coursier/inter-project-resolvers/test similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/inter-project-resolvers/test rename to sbt-coursier/src/sbt-test/sbt-coursier/inter-project-resolvers/test diff --git a/plugin/src/sbt-test/sbt-coursier/inter-project/a/src/main/scala/A.scala b/sbt-coursier/src/sbt-test/sbt-coursier/inter-project/a/src/main/scala/A.scala similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/inter-project/a/src/main/scala/A.scala rename to sbt-coursier/src/sbt-test/sbt-coursier/inter-project/a/src/main/scala/A.scala diff --git a/plugin/src/sbt-test/sbt-coursier/inter-project/b/src/main/scala/Main.scala b/sbt-coursier/src/sbt-test/sbt-coursier/inter-project/b/src/main/scala/Main.scala similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/inter-project/b/src/main/scala/Main.scala rename to sbt-coursier/src/sbt-test/sbt-coursier/inter-project/b/src/main/scala/Main.scala diff --git a/plugin/src/sbt-test/sbt-coursier/inter-project/build.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/inter-project/build.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/inter-project/build.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/inter-project/build.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/inter-project/project/plugins.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/inter-project/project/plugins.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/inter-project/project/plugins.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/inter-project/project/plugins.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/inter-project/test b/sbt-coursier/src/sbt-test/sbt-coursier/inter-project/test similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/inter-project/test rename to sbt-coursier/src/sbt-test/sbt-coursier/inter-project/test diff --git a/plugin/src/sbt-test/sbt-coursier/maven-compatible/build.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/maven-compatible/build.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/maven-compatible/build.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/maven-compatible/build.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/maven-compatible/project/plugins.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/maven-compatible/project/plugins.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/maven-compatible/project/plugins.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/maven-compatible/project/plugins.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/maven-compatible/src/main/scala/Main.scala b/sbt-coursier/src/sbt-test/sbt-coursier/maven-compatible/src/main/scala/Main.scala similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/maven-compatible/src/main/scala/Main.scala rename to sbt-coursier/src/sbt-test/sbt-coursier/maven-compatible/src/main/scala/Main.scala diff --git a/plugin/src/sbt-test/sbt-coursier/maven-compatible/test b/sbt-coursier/src/sbt-test/sbt-coursier/maven-compatible/test similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/maven-compatible/test rename to sbt-coursier/src/sbt-test/sbt-coursier/maven-compatible/test diff --git a/plugin/src/sbt-test/sbt-coursier/profiles/build.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/profiles/build.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/profiles/build.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/profiles/build.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/profiles/output b/sbt-coursier/src/sbt-test/sbt-coursier/profiles/output similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/profiles/output rename to sbt-coursier/src/sbt-test/sbt-coursier/profiles/output diff --git a/plugin/src/sbt-test/sbt-coursier/profiles/project/plugins.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/profiles/project/plugins.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/profiles/project/plugins.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/profiles/project/plugins.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/profiles/src/main/scala/Main.scala b/sbt-coursier/src/sbt-test/sbt-coursier/profiles/src/main/scala/Main.scala similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/profiles/src/main/scala/Main.scala rename to sbt-coursier/src/sbt-test/sbt-coursier/profiles/src/main/scala/Main.scala diff --git a/plugin/src/sbt-test/sbt-coursier/profiles/test b/sbt-coursier/src/sbt-test/sbt-coursier/profiles/test similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/profiles/test rename to sbt-coursier/src/sbt-test/sbt-coursier/profiles/test diff --git a/plugin/src/sbt-test/sbt-coursier/scala-jars/build.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/scala-jars/build.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/scala-jars/build.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/scala-jars/build.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/scala-jars/project/plugins.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/scala-jars/project/plugins.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/scala-jars/project/plugins.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/scala-jars/project/plugins.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/scala-jars/src/main/scala/Main.scala b/sbt-coursier/src/sbt-test/sbt-coursier/scala-jars/src/main/scala/Main.scala similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/scala-jars/src/main/scala/Main.scala rename to sbt-coursier/src/sbt-test/sbt-coursier/scala-jars/src/main/scala/Main.scala diff --git a/plugin/src/sbt-test/sbt-coursier/scala-jars/test b/sbt-coursier/src/sbt-test/sbt-coursier/scala-jars/test similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/scala-jars/test rename to sbt-coursier/src/sbt-test/sbt-coursier/scala-jars/test diff --git a/plugin/src/sbt-test/sbt-coursier/scala-sources-javadoc-jars/build.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/scala-sources-javadoc-jars/build.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/scala-sources-javadoc-jars/build.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/scala-sources-javadoc-jars/build.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/scala-sources-javadoc-jars/project/plugins.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/scala-sources-javadoc-jars/project/plugins.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/scala-sources-javadoc-jars/project/plugins.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/scala-sources-javadoc-jars/project/plugins.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/scala-sources-javadoc-jars/src/main/scala/Main.scala b/sbt-coursier/src/sbt-test/sbt-coursier/scala-sources-javadoc-jars/src/main/scala/Main.scala similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/scala-sources-javadoc-jars/src/main/scala/Main.scala rename to sbt-coursier/src/sbt-test/sbt-coursier/scala-sources-javadoc-jars/src/main/scala/Main.scala diff --git a/plugin/src/sbt-test/sbt-coursier/scala-sources-javadoc-jars/test b/sbt-coursier/src/sbt-test/sbt-coursier/scala-sources-javadoc-jars/test similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/scala-sources-javadoc-jars/test rename to sbt-coursier/src/sbt-test/sbt-coursier/scala-sources-javadoc-jars/test diff --git a/plugin/src/sbt-test/sbt-coursier/simple/build.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/simple/build.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/simple/build.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/simple/build.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/simple/project/plugins.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/simple/project/plugins.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/simple/project/plugins.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/simple/project/plugins.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/simple/src/main/scala/Main.scala b/sbt-coursier/src/sbt-test/sbt-coursier/simple/src/main/scala/Main.scala similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/simple/src/main/scala/Main.scala rename to sbt-coursier/src/sbt-test/sbt-coursier/simple/src/main/scala/Main.scala diff --git a/plugin/src/sbt-test/sbt-coursier/simple/test b/sbt-coursier/src/sbt-test/sbt-coursier/simple/test similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/simple/test rename to sbt-coursier/src/sbt-test/sbt-coursier/simple/test diff --git a/plugin/src/sbt-test/sbt-coursier/typelevel-force-version-stdlib/build.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/typelevel-force-version-stdlib/build.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/typelevel-force-version-stdlib/build.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/typelevel-force-version-stdlib/build.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/typelevel-force-version-stdlib/project/plugins.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/typelevel-force-version-stdlib/project/plugins.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/typelevel-force-version-stdlib/project/plugins.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/typelevel-force-version-stdlib/project/plugins.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/typelevel-force-version-stdlib/src/main/scala/Main.scala b/sbt-coursier/src/sbt-test/sbt-coursier/typelevel-force-version-stdlib/src/main/scala/Main.scala similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/typelevel-force-version-stdlib/src/main/scala/Main.scala rename to sbt-coursier/src/sbt-test/sbt-coursier/typelevel-force-version-stdlib/src/main/scala/Main.scala diff --git a/plugin/src/sbt-test/sbt-coursier/typelevel-force-version-stdlib/test b/sbt-coursier/src/sbt-test/sbt-coursier/typelevel-force-version-stdlib/test similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/typelevel-force-version-stdlib/test rename to sbt-coursier/src/sbt-test/sbt-coursier/typelevel-force-version-stdlib/test diff --git a/plugin/src/sbt-test/sbt-coursier/typelevel/build.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/typelevel/build.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/typelevel/build.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/typelevel/build.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/typelevel/project/plugins.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/typelevel/project/plugins.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/typelevel/project/plugins.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/typelevel/project/plugins.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/typelevel/src/main/scala/Main.scala b/sbt-coursier/src/sbt-test/sbt-coursier/typelevel/src/main/scala/Main.scala similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/typelevel/src/main/scala/Main.scala rename to sbt-coursier/src/sbt-test/sbt-coursier/typelevel/src/main/scala/Main.scala diff --git a/plugin/src/sbt-test/sbt-coursier/typelevel/test b/sbt-coursier/src/sbt-test/sbt-coursier/typelevel/test similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/typelevel/test rename to sbt-coursier/src/sbt-test/sbt-coursier/typelevel/test diff --git a/plugin/src/sbt-test/sbt-coursier/zookeeper/build.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/zookeeper/build.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/zookeeper/build.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/zookeeper/build.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/zookeeper/project/plugins.sbt b/sbt-coursier/src/sbt-test/sbt-coursier/zookeeper/project/plugins.sbt similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/zookeeper/project/plugins.sbt rename to sbt-coursier/src/sbt-test/sbt-coursier/zookeeper/project/plugins.sbt diff --git a/plugin/src/sbt-test/sbt-coursier/zookeeper/src/main/scala/Main.scala b/sbt-coursier/src/sbt-test/sbt-coursier/zookeeper/src/main/scala/Main.scala similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/zookeeper/src/main/scala/Main.scala rename to sbt-coursier/src/sbt-test/sbt-coursier/zookeeper/src/main/scala/Main.scala diff --git a/plugin/src/sbt-test/sbt-coursier/zookeeper/test b/sbt-coursier/src/sbt-test/sbt-coursier/zookeeper/test similarity index 100% rename from plugin/src/sbt-test/sbt-coursier/zookeeper/test rename to sbt-coursier/src/sbt-test/sbt-coursier/zookeeper/test From 5559c5ce0156d6f2d749f6cfc64b606cb5fdf919 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Thu, 2 Feb 2017 02:06:38 +0100 Subject: [PATCH 05/10] Minor refacto --- .../coursier/maven/MavenRepository.scala | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/core/shared/src/main/scala/coursier/maven/MavenRepository.scala b/core/shared/src/main/scala/coursier/maven/MavenRepository.scala index eaee02d20..71322222c 100644 --- a/core/shared/src/main/scala/coursier/maven/MavenRepository.scala +++ b/core/shared/src/main/scala/coursier/maven/MavenRepository.scala @@ -90,20 +90,29 @@ final case class MavenRepository( val root0 = if (root.endsWith("/")) root else root + "/" val source = MavenSource(root0, changing, sbtAttrStub, authentication) + private def modulePath( + module: Module, + version: String + ): Seq[String] = + module.organization.split('.').toSeq ++ Seq( + dirModuleName(module, sbtAttrStub), + version + ) + + private def urlFor(path: Seq[String]): String = + root0 + path.map(encodeURIComponent).mkString("/") + def projectArtifact( module: Module, version: String, versioningValue: Option[String] ): Artifact = { - val path = module.organization.split('.').toSeq ++ Seq( - dirModuleName(module, sbtAttrStub), - version, + val path = modulePath(module, version) :+ s"${module.name}-${versioningValue getOrElse version}.pom" - ) Artifact( - root0 + path.map(encodeURIComponent).mkString("/"), + urlFor(path), Map.empty, Map.empty, Attributes("pom", ""), @@ -123,7 +132,7 @@ final case class MavenRepository( val artifact = Artifact( - root0 + path.map(encodeURIComponent).mkString("/"), + urlFor(path), Map.empty, Map.empty, Attributes("pom", ""), @@ -141,15 +150,11 @@ final case class MavenRepository( version: String ): Option[Artifact] = { - val path = module.organization.split('.').toSeq ++ Seq( - dirModuleName(module, sbtAttrStub), - version, - "maven-metadata.xml" - ) + val path = modulePath(module, version) :+ "maven-metadata.xml" val artifact = Artifact( - root0 + path.map(encodeURIComponent).mkString("/"), + urlFor(path), Map.empty, Map.empty, Attributes("pom", ""), From 6b89af392447187a77661b6b82e0313e24581bdb Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Fri, 3 Feb 2017 00:57:01 +0100 Subject: [PATCH 06/10] Better handling of artifacts from Maven repos Doesn't seem to break things --- .ci/travis.sh | 1 + appveyor.yml | 2 +- build.sbt | 17 +++ .../scala/coursier/core/Definitions.scala | 2 + .../main/scala/coursier/core/Resolution.scala | 2 +- .../src/main/scala/coursier/ivy/IvyXml.scala | 3 +- .../coursier/maven/MavenRepository.scala | 123 +++++++++++------ .../scala/coursier/maven/MavenSource.scala | 129 ++++++------------ .../src/main/scala/coursier/maven/Pom.scala | 6 +- .../src/main/scala/coursier/package.scala | 2 +- .../main/scala-2.11/coursier/HttpServer.scala | 68 +++++++-- .../scala-2.10/coursier/CoursierPlugin.scala | 2 - .../FallbackDependenciesRepository.scala | 5 +- .../main/scala-2.10/coursier/FromSbt.scala | 13 +- .../src/main/scala-2.10/coursier/Keys.scala | 1 - .../src/main/scala-2.10/coursier/Tasks.scala | 16 +-- .../main/scala-2.10/coursier/Shading.scala | 9 +- .../scala-2.10/coursier/ShadingPlugin.scala | 1 + .../scala/coursier/test/CentralTests.scala | 36 +++-- .../scala/coursier/test/PomParsingTests.scala | 6 +- .../test/scala/coursier/test/package.scala | 3 +- 21 files changed, 266 insertions(+), 181 deletions(-) diff --git a/.ci/travis.sh b/.ci/travis.sh index 6a853d75e..f28ce63b3 100755 --- a/.ci/travis.sh +++ b/.ci/travis.sh @@ -37,6 +37,7 @@ function isMasterOrDevelop() { -- \ -d tests/jvm/src/test/resources/test-repo/http/abc.com \ -u user -P pass -r realm \ + --list-pages \ -v & # TODO Add coverage once https://github.com/scoverage/sbt-scoverage/issues/111 is fixed diff --git a/appveyor.yml b/appveyor.yml index 88b57bc96..35c89eb68 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -27,7 +27,7 @@ build_script: - sbt ++2.10.6 clean compile - sbt ++2.10.6 coreJVM/publishLocal cache/publishLocal # to make the scripted tests happy test_script: - - ps: Start-Job { & java -jar -noverify C:\projects\coursier\coursier launch -r http://dl.bintray.com/scalaz/releases io.get-coursier:http-server-java7_2.11:1.0.0-SNAPSHOT -- -d /C:/projects/coursier/tests/jvm/src/test/resources/test-repo/http/abc.com -u user -P pass -r realm -v } + - ps: Start-Job { & java -jar -noverify C:\projects\coursier\coursier launch -r http://dl.bintray.com/scalaz/releases io.get-coursier:http-server-java7_2.11:1.0.0-SNAPSHOT -- -d /C:/projects/coursier/tests/jvm/src/test/resources/test-repo/http/abc.com -u user -P pass -r realm --list-pages -v } - sbt ++2.12.1 testsJVM/test testsJVM/it:test # Would node be around for testsJS/test? - sbt ++2.11.8 testsJVM/test testsJVM/it:test - sbt ++2.10.6 testsJVM/test testsJVM/it:test sbt-coursier/scripted sbt-coursier/publishLocal sbt-shading/scripted diff --git a/build.sbt b/build.sbt index 55eed0e38..3cf0bd8f0 100644 --- a/build.sbt +++ b/build.sbt @@ -20,6 +20,23 @@ lazy val core = crossProject import com.typesafe.tools.mima.core._ Seq( + ProblemFilters.exclude[DirectMissingMethodProblem]("coursier.maven.MavenRepository.defaultPublications"), + ProblemFilters.exclude[DirectMissingMethodProblem]("coursier.maven.MavenRepository.defaultPackaging"), + ProblemFilters.exclude[MissingClassProblem]("coursier.maven.MavenSource$DocSourcesArtifactExtensions"), + ProblemFilters.exclude[MissingTypesProblem]("coursier.core.Project$"), + ProblemFilters.exclude[DirectMissingMethodProblem]("coursier.core.Project.apply"), + ProblemFilters.exclude[IncompatibleResultTypeProblem]("coursier.core.Project.copy$default$13"), + ProblemFilters.exclude[IncompatibleResultTypeProblem]("coursier.core.Project.copy$default$12"), + ProblemFilters.exclude[DirectMissingMethodProblem]("coursier.core.Project.copy"), + ProblemFilters.exclude[DirectMissingMethodProblem]("coursier.core.Project.this"), + ProblemFilters.exclude[DirectMissingMethodProblem]("coursier.maven.MavenRepository.copy$default$5"), + ProblemFilters.exclude[DirectMissingMethodProblem]("coursier.maven.MavenRepository.packagingBlacklist"), + ProblemFilters.exclude[DirectMissingMethodProblem]("coursier.maven.MavenRepository.copy"), + ProblemFilters.exclude[DirectMissingMethodProblem]("coursier.maven.MavenRepository.this"), + ProblemFilters.exclude[DirectMissingMethodProblem]("coursier.maven.MavenRepository.apply$default$5"), + ProblemFilters.exclude[DirectMissingMethodProblem]("coursier.maven.MavenRepository.ignorePackaging"), + ProblemFilters.exclude[DirectMissingMethodProblem]("coursier.maven.MavenRepository.$default$5"), + ProblemFilters.exclude[DirectMissingMethodProblem]("coursier.maven.MavenRepository.apply"), ProblemFilters.exclude[FinalClassProblem]("coursier.core.Activation$Os"), ProblemFilters.exclude[FinalClassProblem]("coursier.core.Version"), ProblemFilters.exclude[FinalClassProblem]("coursier.core.Authentication"), diff --git a/core/shared/src/main/scala/coursier/core/Definitions.scala b/core/shared/src/main/scala/coursier/core/Definitions.scala index 3331b8fc2..eb842b623 100644 --- a/core/shared/src/main/scala/coursier/core/Definitions.scala +++ b/core/shared/src/main/scala/coursier/core/Definitions.scala @@ -81,6 +81,8 @@ final case class Project( profiles: Seq[Profile], versions: Option[Versions], snapshotVersioning: Option[SnapshotVersioning], + packagingOpt: Option[String], + /** * Optional exact version used to get this project metadata. * May not match `version` for projects having a wrong version in their metadata. diff --git a/core/shared/src/main/scala/coursier/core/Resolution.scala b/core/shared/src/main/scala/coursier/core/Resolution.scala index 50de8d699..6a1beb59f 100644 --- a/core/shared/src/main/scala/coursier/core/Resolution.scala +++ b/core/shared/src/main/scala/coursier/core/Resolution.scala @@ -63,7 +63,7 @@ object Resolution { type Key = (String, String, String) def key(dep: Dependency): Key = - (dep.module.organization, dep.module.name, dep.attributes.`type`) + (dep.module.organization, dep.module.name, if (dep.attributes.`type`.isEmpty) "jar" else dep.attributes.`type`) def add( dict: Map[Key, (String, Dependency)], diff --git a/core/shared/src/main/scala/coursier/ivy/IvyXml.scala b/core/shared/src/main/scala/coursier/ivy/IvyXml.scala index 464d3a5ab..19e941f4a 100644 --- a/core/shared/src/main/scala/coursier/ivy/IvyXml.scala +++ b/core/shared/src/main/scala/coursier/ivy/IvyXml.scala @@ -80,7 +80,7 @@ object IvyXml { version, toConf, allConfsExcludes ++ excludes.getOrElse(fromConf, Set.empty), - Attributes("jar", ""), // should come from possible artifact nodes + Attributes("", ""), // should come from possible artifact nodes optional = false, transitive = transitive ) @@ -158,6 +158,7 @@ object IvyXml { None, None, None, + None, if (publicationsOpt.isEmpty) // no publications node -> default JAR artifact Seq("*" -> Publication(module.name, "jar", "jar", "")) diff --git a/core/shared/src/main/scala/coursier/maven/MavenRepository.scala b/core/shared/src/main/scala/coursier/maven/MavenRepository.scala index 71322222c..23559f5a8 100644 --- a/core/shared/src/main/scala/coursier/maven/MavenRepository.scala +++ b/core/shared/src/main/scala/coursier/maven/MavenRepository.scala @@ -45,19 +45,6 @@ object MavenRepository { "test" -> Seq("runtime") ) - val defaultPackaging = "jar" - - def defaultPublications(moduleName: String, packaging: String) = Seq( - "compile" -> Publication( - moduleName, - packaging, - MavenSource.typeExtension(packaging), - MavenSource.typeDefaultClassifier(packaging) - ), - "docs" -> Publication(moduleName, "doc", "jar", "javadoc"), - "sources" -> Publication(moduleName, "src", "jar", "sources") - ) - def dirModuleName(module: Module, sbtAttrStub: Boolean): String = if (sbtAttrStub) { var name = module.name @@ -69,10 +56,6 @@ object MavenRepository { } else module.name - val ignorePackaging = Set( - Module("org.apache.zookeeper", "zookeeper", Map.empty) - ) - } final case class MavenRepository( @@ -80,8 +63,7 @@ final case class MavenRepository( changing: Option[Boolean] = None, /** Hackish hack for sbt plugins mainly - what this does really sucks */ sbtAttrStub: Boolean = false, - authentication: Option[Authentication] = None, - packagingBlacklist: Set[Module] = MavenRepository.ignorePackaging + authentication: Option[Authentication] = None ) extends Repository { import Repository._ @@ -262,30 +244,89 @@ final case class MavenRepository( F: Monad[F] ): EitherT[F, String, Project] = { - fetch(projectArtifact(module, version, versioningValue)).flatMap { str => - EitherT { - F.point[String \/ Project] { - for { - xml <- \/.fromEither(compatibility.xmlParse(str)) - _ <- if (xml.label == "project") \/-(()) else -\/("Project definition not found") - proj <- Pom.project(xml) - } yield { - val packagingOpt = - if (packagingBlacklist(module)) - None - else - Pom.packagingOpt(xml) + def parseRawPom(str: String) = + for { + xml <- \/.fromEither(compatibility.xmlParse(str)) + _ <- if (xml.label == "project") \/-(()) else -\/("Project definition not found") + proj <- Pom.project(xml) + } yield proj - proj.copy( - configurations = defaultConfigurations, - publications = defaultPublications( - module.name, - packagingOpt.getOrElse(defaultPackaging) - ) - ) - } + def artifactFor(url: String) = + Artifact( + url, + Map.empty, + Map.empty, + Attributes("", ""), + changing = true, + authentication + ) + + def isArtifact(fileName: String, prefix: String): Option[(String, String)] = + // TODO There should be a regex for that... + if (fileName.startsWith(prefix)) { + val end = fileName.stripPrefix(prefix) + val idx = end.lastIndexOf('.') + if (idx >= 0) { + val ext = end.drop(idx + 1) + val rem = end.take(idx) + if (rem.isEmpty) + Some(("", ext)) + else if (rem.startsWith("-")) + Some((rem.drop(1), ext)) + else + None + } else + None + } else + None + + + val listFilesUrl = urlFor(modulePath(module, version)) + "/" + + for { + str <- fetch(projectArtifact(module, version, versioningValue)) + rawListFilesPage <- fetch(artifactFor(listFilesUrl)) + proj <- EitherT(F.point[String \/ Project](parseRawPom(str))) + } yield { + + val files = coursier.core.compatibility.listWebPageFiles(listFilesUrl, rawListFilesPage) + + val versioning = proj + .snapshotVersioning + .flatMap(versioning => + mavenVersioning(versioning, "", "") + ) + + val prefix = s"${module.name}-${versioning.getOrElse(version)}" + + val packagingTpeMap = proj.packagingOpt + .map { packaging => + (MavenSource.typeDefaultClassifier(packaging), MavenSource.typeExtension(packaging)) -> packaging } - } + .toMap + + val foundPublications = files + .flatMap(isArtifact(_, prefix)) + .map { + case (classifier, ext) => + val tpe = packagingTpeMap.getOrElse( + (classifier, ext), + MavenSource.classifierExtensionDefaultTypeOpt(classifier, ext).getOrElse(ext) + ) + val config = MavenSource.typeDefaultConfig(tpe).getOrElse("compile") + config -> Publication( + module.name, + tpe, + ext, + classifier + ) + } + + proj.copy( + actualVersionOpt = Some(version), + configurations = defaultConfigurations, + publications = foundPublications + ) } } diff --git a/core/shared/src/main/scala/coursier/maven/MavenSource.scala b/core/shared/src/main/scala/coursier/maven/MavenSource.scala index 6bdec3c94..931fb9a62 100644 --- a/core/shared/src/main/scala/coursier/maven/MavenSource.scala +++ b/core/shared/src/main/scala/coursier/maven/MavenSource.scala @@ -13,34 +13,6 @@ final case class MavenSource( import Repository._ import MavenRepository._ - private implicit class DocSourcesArtifactExtensions(val underlying: Artifact) { - def withJavadocSources: Artifact = { - val base = underlying.url.stripSuffix(".jar") - underlying.copy(extra = underlying.extra ++ Seq( - "sources" -> Artifact( - base + "-sources.jar", - Map.empty, - Map.empty, - Attributes("jar", "src"), // Are these the right attributes? - changing = underlying.changing, - authentication = authentication - ) - .withDefaultChecksums - .withDefaultSignature, - "javadoc" -> Artifact( - base + "-javadoc.jar", - Map.empty, - Map.empty, - Attributes("jar", "javadoc"), // Same comment as above - changing = underlying.changing, - authentication = authentication - ) - .withDefaultChecksums - .withDefaultSignature - )) - } - } - def artifacts( dependency: Dependency, project: Project, @@ -73,9 +45,9 @@ final case class MavenSource( ) .withDefaultChecksums - if (publication.ext == "jar") { + if (publication.ext == "jar") + // TODO Get available signature / checksums from directory listing artifact = artifact.withDefaultSignature - } artifact } @@ -92,68 +64,33 @@ final case class MavenSource( val publications0 = overrideClassifiers match { case Some(classifiers) => val classifiersSet = classifiers.toSet - val publications = project.publications.collect { + + project.publications.collect { case (_, p) if classifiersSet(p.classifier) => p } - // Unlike with Ivy metadata, Maven POMs don't list the available publications (~artifacts) - // so we give a chance to any classifier we're given by returning some publications - // no matter what, even if we're unsure they're available. - if (publications.isEmpty) - classifiers.map { classifier => - Publication( - dependency.module.name, - "jar", - "jar", - classifier - ) - } - else - publications - case None => - val publications = - if (dependency.attributes.classifier.nonEmpty) - // FIXME We're ignoring dependency.attributes.`type` in this case - project.publications.collect { - case (_, p) if p.classifier == dependency.attributes.classifier => - p - } - else if (dependency.attributes.`type`.nonEmpty) - project.publications.collect { - case (_, p) if p.`type` == dependency.attributes.`type` => - p - } - else - project.publications.collect { - case (_, p) if p.classifier.isEmpty => - p - } - - // See comment above - if (publications.isEmpty) { - val type0 = if (dependency.attributes.`type`.isEmpty) "jar" else dependency.attributes.`type` - - val extension = MavenSource.typeExtension(type0) - - val classifier = - if (dependency.attributes.classifier.isEmpty) - MavenSource.typeDefaultClassifier(type0) - else - dependency.attributes.classifier - - Seq( - Publication( - dependency.module.name, - type0, - extension, - classifier - ) - ) - } else - publications + if (dependency.attributes.classifier.nonEmpty) + // FIXME We're ignoring dependency.attributes.`type` in this case + project.publications.collect { + case (_, p) if p.classifier == dependency.attributes.classifier => + p + } + else if (dependency.attributes.`type`.nonEmpty) + project.publications.collect { + case (_, p) + if p.`type` == dependency.attributes.`type` || + p.ext == dependency.attributes.`type` // wow + => + p + } + else + project.publications.collect { + case (_, p) if p.classifier.isEmpty => + p + } } publications0.map(artifactWithExtra) @@ -194,4 +131,22 @@ object MavenSource { def typeDefaultClassifier(`type`: String): String = typeDefaultClassifierOpt(`type`).getOrElse("") -} \ No newline at end of file + val classifierExtensionDefaultTypes: Map[(String, String), String] = Map( + ("tests", "jar") -> "test-jar", + ("javadoc", "jar") -> "doc", + ("sources", "jar") -> "src" + // don't know much about "client" classifier, not including it here + ) + + def classifierExtensionDefaultTypeOpt(classifier: String, ext: String): Option[String] = + classifierExtensionDefaultTypes.get((classifier, ext)) + + val typeDefaultConfigs: Map[String, String] = Map( + "doc" -> "docs", + "src" -> "sources" + ) + + def typeDefaultConfig(`type`: String): Option[String] = + typeDefaultConfigs.get(`type`) + +} diff --git a/core/shared/src/main/scala/coursier/maven/Pom.scala b/core/shared/src/main/scala/coursier/maven/Pom.scala index f24d85923..b799113d7 100644 --- a/core/shared/src/main/scala/coursier/maven/Pom.scala +++ b/core/shared/src/main/scala/coursier/maven/Pom.scala @@ -28,9 +28,6 @@ object Pom { private def readVersion(node: Node) = text(node, "version", "Version").getOrElse("").trim - private val defaultType = "jar" - private val defaultClassifier = "" - def dependency(node: Node): String \/ (String, Dependency) = { for { mod <- module(node) @@ -52,7 +49,7 @@ object Pom { version0, "", exclusions.map(mod => (mod.organization, mod.name)).toSet, - Attributes(typeOpt getOrElse defaultType, classifierOpt getOrElse defaultClassifier), + Attributes(typeOpt.getOrElse(""), classifierOpt.getOrElse("")), optional, transitive = true ) @@ -253,6 +250,7 @@ object Pom { profiles, None, None, + packagingOpt(pom), None, Nil, Info( diff --git a/core/shared/src/main/scala/coursier/package.scala b/core/shared/src/main/scala/coursier/package.scala index 0105f7853..c8d5ee792 100644 --- a/core/shared/src/main/scala/coursier/package.scala +++ b/core/shared/src/main/scala/coursier/package.scala @@ -12,7 +12,7 @@ package object coursier { version: String, // Substituted by Resolver with its own default configuration (compile) configuration: String = "", - attributes: Attributes = Attributes("jar"), + attributes: Attributes = Attributes(), exclusions: Set[(String, String)] = Set.empty, optional: Boolean = false, transitive: Boolean = true diff --git a/http-server/src/main/scala-2.11/coursier/HttpServer.scala b/http-server/src/main/scala-2.11/coursier/HttpServer.scala index 11e3b732b..283cbedb4 100644 --- a/http-server/src/main/scala-2.11/coursier/HttpServer.scala +++ b/http-server/src/main/scala-2.11/coursier/HttpServer.scala @@ -5,10 +5,10 @@ import java.net.NetworkInterface import java.nio.channels.{ FileLock, OverlappingFileLockException } import org.http4s.dsl._ -import org.http4s.headers.Authorization +import org.http4s.headers.{ Authorization, `Content-Type` } import org.http4s.server.HttpService import org.http4s.server.blaze.BlazeBuilder -import org.http4s.{ BasicCredentials, Challenge, EmptyBody, Request, Response } +import org.http4s.{ BasicCredentials, Challenge, EmptyBody, MediaType, Request, Response } import caseapp._ @@ -45,7 +45,10 @@ final case class HttpServerApp( password: String, @ExtraName("r") @ValueDescription("realm") - realm: String + realm: String, + @ExtraName("l") + @HelpMessage("Generate content listing pages for directories") + listPages: Boolean ) extends App { val baseDir = new File(if (directory.isEmpty) "." else directory) @@ -171,16 +174,65 @@ final case class HttpServerApp( Locked() } + def isDirectory(f: File): Task[Option[Boolean]] = + Task { + if (f.isDirectory) + Some(true) + else if (f.isFile) + Some(false) + else + None + } + + def directoryListingPage(dir: File, title: String): Task[String] = + Task { + val entries = dir + .listFiles() + .flatMap { f => + def name = f.getName + if (f.isDirectory) + Seq(name + "/") + else if (f.isFile) + Seq(name) + else + Nil + } + + // meh escaping + // TODO Use to scalatags to generate that + s""" + | + | + |$title + | + | + |
    + |${entries.map(e => "
  • " + e + "
  • ").mkString("\n")} + |
+ | + | + """.stripMargin + } + def getService = authenticated { case (method @ (GET | HEAD)) -> path => if (verbosityLevel >= 1) Console.err.println(s"${method.name} $path") - val f = new File(baseDir, path.toList.mkString("/")) - val resp = if (f.exists()) - Ok(f) - else - NotFound() + val relPath = path.toList.mkString("/") + val f = new File(baseDir, relPath) + val resp = + for { + isDirOpt <- isDirectory(f) + resp <- isDirOpt match { + case Some(true) if listPages => + directoryListingPage(f, relPath).flatMap(page => + Ok(page).withContentType(Some(`Content-Type`(MediaType.`text/html`))) + ) + case Some(false) => Ok(f) + case _ => NotFound() + } + } yield resp method match { case HEAD => diff --git a/sbt-coursier/src/main/scala-2.10/coursier/CoursierPlugin.scala b/sbt-coursier/src/main/scala-2.10/coursier/CoursierPlugin.scala index c2c04c982..3fbe81270 100644 --- a/sbt-coursier/src/main/scala-2.10/coursier/CoursierPlugin.scala +++ b/sbt-coursier/src/main/scala-2.10/coursier/CoursierPlugin.scala @@ -12,7 +12,6 @@ object CoursierPlugin extends AutoPlugin { object autoImport { val coursierParallelDownloads = Keys.coursierParallelDownloads val coursierMaxIterations = Keys.coursierMaxIterations - val coursierDefaultArtifactType = Keys.coursierDefaultArtifactType val coursierChecksums = Keys.coursierChecksums val coursierArtifactsChecksums = Keys.coursierArtifactsChecksums val coursierCachePolicies = Keys.coursierCachePolicies @@ -76,7 +75,6 @@ object CoursierPlugin extends AutoPlugin { ) = Seq( coursierParallelDownloads := 6, coursierMaxIterations := 50, - coursierDefaultArtifactType := "", coursierChecksums := Seq(Some("SHA-1"), None), coursierArtifactsChecksums := Seq(None), coursierCachePolicies := CachePolicy.default, diff --git a/sbt-coursier/src/main/scala-2.10/coursier/FallbackDependenciesRepository.scala b/sbt-coursier/src/main/scala-2.10/coursier/FallbackDependenciesRepository.scala index 43ea07d77..172baa4a8 100644 --- a/sbt-coursier/src/main/scala-2.10/coursier/FallbackDependenciesRepository.scala +++ b/sbt-coursier/src/main/scala-2.10/coursier/FallbackDependenciesRepository.scala @@ -78,8 +78,10 @@ final case class FallbackDependenciesRepository( fallbacks.get(dependency.moduleVersion) match { case None => Nil case Some((url, changing)) => + val url0 = url.toString + val ext = url0.substring(url0.lastIndexOf('.') + 1) Seq( - Artifact(url.toString, Map.empty, Map.empty, Attributes("jar", ""), changing, None) + Artifact(url0, Map.empty, Map.empty, Attributes(ext, ""), changing, None) ) } } @@ -121,6 +123,7 @@ final case class FallbackDependenciesRepository( None, None, None, + None, Nil, Info.empty ) diff --git a/sbt-coursier/src/main/scala-2.10/coursier/FromSbt.scala b/sbt-coursier/src/main/scala-2.10/coursier/FromSbt.scala index befd22c47..262bb3c52 100644 --- a/sbt-coursier/src/main/scala-2.10/coursier/FromSbt.scala +++ b/sbt-coursier/src/main/scala-2.10/coursier/FromSbt.scala @@ -53,8 +53,7 @@ object FromSbt { def dependencies( module: ModuleID, scalaVersion: String, - scalaBinaryVersion: String, - defaultArtifactType: String + scalaBinaryVersion: String ): Seq[(String, Dependency)] = { // TODO Warn about unsupported properties in `module` @@ -76,10 +75,10 @@ object FromSbt { val attributes = if (module.explicitArtifacts.isEmpty) - Seq(Attributes(defaultArtifactType, "")) + Seq(Attributes("", "")) else module.explicitArtifacts.map { a => - Attributes(`type` = a.extension, classifier = a.classifier.getOrElse("")) + Attributes(`type` = a.`type`, classifier = a.classifier.getOrElse("")) } for { @@ -107,15 +106,14 @@ object FromSbt { allDependencies: Seq[ModuleID], ivyConfigurations: Map[String, Seq[String]], scalaVersion: String, - scalaBinaryVersion: String, - defaultArtifactType: String + scalaBinaryVersion: String ): Project = { // FIXME Ignored for now - easy to support though // val sbtDepOverrides = dependencyOverrides.value // val sbtExclusions = excludeDependencies.value - val deps = allDependencies.flatMap(dependencies(_, scalaVersion, scalaBinaryVersion, defaultArtifactType)) + val deps = allDependencies.flatMap(dependencies(_, scalaVersion, scalaBinaryVersion)) Project( Module( @@ -133,6 +131,7 @@ object FromSbt { None, None, None, + None, Nil, Info.empty ) diff --git a/sbt-coursier/src/main/scala-2.10/coursier/Keys.scala b/sbt-coursier/src/main/scala-2.10/coursier/Keys.scala index f2c894163..155ff3b1f 100644 --- a/sbt-coursier/src/main/scala-2.10/coursier/Keys.scala +++ b/sbt-coursier/src/main/scala-2.10/coursier/Keys.scala @@ -13,7 +13,6 @@ import scalaz.\/ object Keys { val coursierParallelDownloads = SettingKey[Int]("coursier-parallel-downloads") val coursierMaxIterations = SettingKey[Int]("coursier-max-iterations") - val coursierDefaultArtifactType = SettingKey[String]("coursier-default-artifact-type") val coursierChecksums = SettingKey[Seq[Option[String]]]("coursier-checksums") val coursierArtifactsChecksums = SettingKey[Seq[Option[String]]]("coursier-artifacts-checksums") val coursierCachePolicies = SettingKey[Seq[CachePolicy]]("coursier-cache-policies") diff --git a/sbt-coursier/src/main/scala-2.10/coursier/Tasks.scala b/sbt-coursier/src/main/scala-2.10/coursier/Tasks.scala index ebd28996c..34768533d 100644 --- a/sbt-coursier/src/main/scala-2.10/coursier/Tasks.scala +++ b/sbt-coursier/src/main/scala-2.10/coursier/Tasks.scala @@ -118,7 +118,6 @@ object Tasks { lazy val projId = projectID.in(projectRef).get(state) lazy val sv = scalaVersion.in(projectRef).get(state) lazy val sbv = scalaBinaryVersion.in(projectRef).get(state) - lazy val defaultArtifactType = coursierDefaultArtifactType.in(projectRef).get(state) for { allDependencies <- allDependenciesTask @@ -129,8 +128,7 @@ object Tasks { allDependencies, configurations.map { cfg => cfg.name -> cfg.extendsConfigs.map(_.name) }.toMap, sv, - sbv, - defaultArtifactType + sbv ) } } @@ -333,15 +331,13 @@ object Tasks { if (sbtClassifiers) { val sv = scalaVersion.value val sbv = scalaBinaryVersion.value - val defaultArtifactType = coursierDefaultArtifactType.value val proj = FromSbt.project( cm.id, cm.modules, cm.configurations.map(cfg => cfg.name -> cfg.extendsConfigs.map(_.name)).toMap, sv, - sbv, - defaultArtifactType + sbv ) val fallbackDeps = FromSbt.fallbackDependencies( @@ -828,15 +824,13 @@ object Tasks { if (sbtClassifiers) { val sv = scalaVersion.value val sbv = scalaBinaryVersion.value - val defaultArtifactType = coursierDefaultArtifactType.value FromSbt.project( cm.id, cm.modules, cm.configurations.map(cfg => cfg.name -> cfg.extendsConfigs.map(_.name)).toMap, sv, - sbv, - defaultArtifactType + sbv ) } else { val proj = coursierProject.value @@ -977,15 +971,13 @@ object Tasks { val cm = coursierSbtClassifiersModule.value val sv = scalaVersion.value val sbv = scalaBinaryVersion.value - val defaultArtifactType = coursierDefaultArtifactType.value FromSbt.project( cm.id, cm.modules, cm.configurations.map(cfg => cfg.name -> cfg.extendsConfigs.map(_.name)).toMap, sv, - sbv, - defaultArtifactType + sbv ) } else { val proj = coursierProject.value diff --git a/sbt-shading/src/main/scala-2.10/coursier/Shading.scala b/sbt-shading/src/main/scala-2.10/coursier/Shading.scala index 510c479fa..0d878728f 100644 --- a/sbt-shading/src/main/scala-2.10/coursier/Shading.scala +++ b/sbt-shading/src/main/scala-2.10/coursier/Shading.scala @@ -60,6 +60,7 @@ object Shading { res: Resolution, configs: Map[String, Set[String]], artifactFilesOrErrors: Map[Artifact, FileError \/ File], + classpathTypes: Set[String], shadingNamespace: String, baseConfig: String, shadedConf: String, @@ -97,7 +98,12 @@ object Shading { ) } - val dependencyArtifacts = res.dependencyArtifacts.toMap + val dependencyArtifacts = res.dependencyArtifacts + .filter { case (_, a) => classpathTypes(a.`type`) } + .groupBy(_._1) + .mapValues(_.map(_._2)) + .iterator + .toMap val artifactFilesOrErrors0 = artifactFilesOrErrors .collect { @@ -121,6 +127,7 @@ object Shading { .dependencies .toSeq .flatMap(dependencyArtifacts.get) + .flatten .map(_.url) .flatMap(artifactFilesOrErrors0.get) diff --git a/sbt-shading/src/main/scala-2.10/coursier/ShadingPlugin.scala b/sbt-shading/src/main/scala-2.10/coursier/ShadingPlugin.scala index 9b262a61a..93763f25e 100644 --- a/sbt-shading/src/main/scala-2.10/coursier/ShadingPlugin.scala +++ b/sbt-shading/src/main/scala-2.10/coursier/ShadingPlugin.scala @@ -83,6 +83,7 @@ object ShadingPlugin extends AutoPlugin { coursierResolution.in(baseSbtConfiguration).value, coursierConfigurations.in(baseSbtConfiguration).value, Keys.coursierArtifacts.in(baseSbtConfiguration).value, + classpathTypes.value, shadingNamespace.?.value.getOrElse { throw new NoSuchElementException("shadingNamespace key not set") }, diff --git a/tests/shared/src/test/scala/coursier/test/CentralTests.scala b/tests/shared/src/test/scala/coursier/test/CentralTests.scala index 3c6030e7e..8e84ed1bd 100644 --- a/tests/shared/src/test/scala/coursier/test/CentralTests.scala +++ b/tests/shared/src/test/scala/coursier/test/CentralTests.scala @@ -99,11 +99,12 @@ object CentralTests extends TestSuite { module: Module, version: String, artifactType: String, + attributes: Attributes = Attributes(), extraRepo: Option[Repository] = None )( f: Artifact => T ): Future[T] = - withArtifacts(module, version, artifactType, extraRepo) { + withArtifacts(module, version, artifactType, attributes, extraRepo) { case Seq(artifact) => f(artifact) case other => @@ -117,11 +118,12 @@ object CentralTests extends TestSuite { module: Module, version: String, artifactType: String, + attributes: Attributes = Attributes(), extraRepo: Option[Repository] = None )( f: Seq[Artifact] => T ): Future[T] = { - val dep = Dependency(module, version, transitive = false, attributes = Attributes()) + val dep = Dependency(module, version, transitive = false, attributes = attributes) withArtifacts(dep, artifactType, extraRepo)(f) } @@ -145,8 +147,14 @@ object CentralTests extends TestSuite { f(artifacts) } - def ensureHasArtifactWithExtension(module: Module, version: String, artifactType: String, extension: String): Future[Unit] = - withArtifact(module, version, artifactType) { artifact => + def ensureHasArtifactWithExtension( + module: Module, + version: String, + artifactType: String, + extension: String, + attributes: Attributes = Attributes() + ): Future[Unit] = + withArtifact(module, version, artifactType, attributes = attributes) { artifact => assert(artifact.url.endsWith("." + extension)) } @@ -161,8 +169,8 @@ object CentralTests extends TestSuite { rootDependencies = Set(dep), dependencies = Set( dep.withCompileScope, - Dependency(Module("ch.qos.logback", "logback-core"), "1.1.3").withCompileScope.withJarAttributeType, - Dependency(Module("org.slf4j", "slf4j-api"), "1.7.7").withCompileScope.withJarAttributeType)) + Dependency(Module("ch.qos.logback", "logback-core"), "1.1.3").withCompileScope, + Dependency(Module("org.slf4j", "slf4j-api"), "1.7.7").withCompileScope)) assert(res == expected) } @@ -177,8 +185,8 @@ object CentralTests extends TestSuite { rootDependencies = Set(dep), dependencies = Set( dep.withCompileScope, - Dependency(Module("org.ow2.asm", "asm-tree"), "5.0.2").withCompileScope.withJarAttributeType, - Dependency(Module("org.ow2.asm", "asm"), "5.0.2").withCompileScope.withJarAttributeType)) + Dependency(Module("org.ow2.asm", "asm-tree"), "5.0.2").withCompileScope, + Dependency(Module("org.ow2.asm", "asm"), "5.0.2").withCompileScope)) assert(res == expected) } @@ -338,12 +346,22 @@ object CentralTests extends TestSuite { 'bundle - { // has packaging bundle - ensuring coursier gives its artifact the .jar extension - ensureHasArtifactWithExtension( + * - ensureHasArtifactWithExtension( Module("com.google.guava", "guava"), "17.0", "bundle", "jar" ) + + // even though packaging is bundle, depending on attribute type "jar" should still find + // an artifact + * - ensureHasArtifactWithExtension( + Module("com.google.guava", "guava"), + "17.0", + "bundle", + "jar", + attributes = Attributes("jar") + ) } 'mavenPlugin - { diff --git a/tests/shared/src/test/scala/coursier/test/PomParsingTests.scala b/tests/shared/src/test/scala/coursier/test/PomParsingTests.scala index f4193b86b..b443d309e 100644 --- a/tests/shared/src/test/scala/coursier/test/PomParsingTests.scala +++ b/tests/shared/src/test/scala/coursier/test/PomParsingTests.scala @@ -26,7 +26,7 @@ object PomParsingTests extends TestSuite { Module("comp", "lib"), "2.1", attributes = Attributes(classifier = "extra") - ).withJarAttributeType + ) ) val result = Pom.dependency(xmlParse(depNode).right.get) @@ -131,7 +131,7 @@ object PomParsingTests extends TestSuite { None, Profile.Activation(Nil), Seq( - "" -> Dependency(Module("comp", "lib"), "0.2").withJarAttributeType), + "" -> Dependency(Module("comp", "lib"), "0.2")), Nil, Map.empty )) @@ -163,7 +163,7 @@ object PomParsingTests extends TestSuite { Profile.Activation(Nil), Nil, Seq( - "test" -> Dependency(Module("comp", "lib"), "0.2").withJarAttributeType), + "test" -> Dependency(Module("comp", "lib"), "0.2")), Map.empty )) diff --git a/tests/shared/src/test/scala/coursier/test/package.scala b/tests/shared/src/test/scala/coursier/test/package.scala index 2ed9fbb30..75c32ae88 100644 --- a/tests/shared/src/test/scala/coursier/test/package.scala +++ b/tests/shared/src/test/scala/coursier/test/package.scala @@ -4,7 +4,6 @@ package object test { implicit class DependencyOps(val underlying: Dependency) extends AnyVal { def withCompileScope: Dependency = underlying.copy(configuration = "compile") - def withJarAttributeType: Dependency = underlying.copy(attributes = underlying.attributes.copy(`type` = "jar")) } implicit class ResolutionOps(val underlying: Resolution) extends AnyVal { @@ -62,6 +61,7 @@ package object test { profiles: Seq[Profile] = Seq.empty, versions: Option[core.Versions] = None, snapshotVersioning: Option[core.SnapshotVersioning] = None, + packaging: Option[String] = None, publications: Seq[(String, core.Publication)] = Nil ): Project = core.Project( @@ -76,6 +76,7 @@ package object test { versions, snapshotVersioning, None, + packaging, publications, Info.empty ) From e59dd7d5b00159dba540f828d4b5c8740b4d1654 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Fri, 3 Feb 2017 14:03:15 +0100 Subject: [PATCH 07/10] Manually set nodejs dependency versions, tweak package.json format --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index e43422e8d..e8281dcdc 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "repository": "https://github.com/alexarchambault/coursier.git", "license": "Apache-2.0", "devDependencies": { - "xmldom": "latest", - "xhr2": "latest" + "xmldom": "0.1.27", + "xhr2": "0.1.4" } } From cce332eb552fc8304ba3b4eee36e9cc59b511057 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Sat, 4 Feb 2017 16:25:41 +0100 Subject: [PATCH 08/10] Refactor web page link listing logic, implement it on the scalajs side --- build.sbt | 3 +++ .../coursier/core/compatibility/package.scala | 26 +++++++++++++------ .../coursier/core/compatibility/package.scala | 16 +----------- .../scala/coursier/ivy/IvyRepository.scala | 3 ++- .../coursier/maven/MavenRepository.scala | 3 ++- .../main/scala/coursier/util/WebPage.scala | 22 ++++++++++++++++ package.json | 1 + 7 files changed, 49 insertions(+), 25 deletions(-) create mode 100644 core/shared/src/main/scala/coursier/util/WebPage.scala diff --git a/build.sbt b/build.sbt index 3cf0bd8f0..32f31df24 100644 --- a/build.sbt +++ b/build.sbt @@ -23,6 +23,9 @@ lazy val core = crossProject ProblemFilters.exclude[DirectMissingMethodProblem]("coursier.maven.MavenRepository.defaultPublications"), ProblemFilters.exclude[DirectMissingMethodProblem]("coursier.maven.MavenRepository.defaultPackaging"), ProblemFilters.exclude[MissingClassProblem]("coursier.maven.MavenSource$DocSourcesArtifactExtensions"), + ProblemFilters.exclude[DirectMissingMethodProblem]("coursier.core.compatibility.package.listWebPageDirectoryElements"), + ProblemFilters.exclude[DirectMissingMethodProblem]("coursier.core.compatibility.package.listWebPageSubDirectories"), + ProblemFilters.exclude[DirectMissingMethodProblem]("coursier.core.compatibility.package.listWebPageFiles"), ProblemFilters.exclude[MissingTypesProblem]("coursier.core.Project$"), ProblemFilters.exclude[DirectMissingMethodProblem]("coursier.core.Project.apply"), ProblemFilters.exclude[IncompatibleResultTypeProblem]("coursier.core.Project.copy$default$13"), diff --git a/core/js/src/main/scala/coursier/core/compatibility/package.scala b/core/js/src/main/scala/coursier/core/compatibility/package.scala index 3b8659b5b..18c848656 100644 --- a/core/js/src/main/scala/coursier/core/compatibility/package.scala +++ b/core/js/src/main/scala/coursier/core/compatibility/package.scala @@ -6,6 +6,8 @@ import org.scalajs.dom.raw.NodeList import coursier.util.Xml +import scala.collection.mutable.ListBuffer + package object compatibility { def option[A](a: js.Dynamic): Option[A] = if (js.isUndefined(a)) None @@ -93,14 +95,22 @@ package object compatibility { def encodeURIComponent(s: String): String = g.encodeURIComponent(s).asInstanceOf[String] - def listWebPageSubDirectories(url: String, page: String): Seq[String] = { - // TODO - ??? - } + // FIXME Won't work in the browser + lazy val cheerio = g.require("cheerio") - def listWebPageFiles(url: String, page: String): Seq[String] = { - // TODO - ??? - } + def listWebPageRawElements(page: String): Seq[String] = { + val jquery = cheerio.load(page) + + val links = new ListBuffer[String] + + jquery("a").each({ self: js.Dynamic => + val href = jquery(self).attr("href") + if (!js.isUndefined(href)) + links += href.asInstanceOf[String] + () + }: js.ThisFunction0[js.Dynamic, Unit]) + + links.result() + } } diff --git a/core/jvm/src/main/scala/coursier/core/compatibility/package.scala b/core/jvm/src/main/scala/coursier/core/compatibility/package.scala index d4fbbd74c..124266ae2 100644 --- a/core/jvm/src/main/scala/coursier/core/compatibility/package.scala +++ b/core/jvm/src/main/scala/coursier/core/compatibility/package.scala @@ -56,25 +56,11 @@ package object compatibility { def encodeURIComponent(s: String): String = new java.net.URI(null, null, null, -1, s, null, null) .toASCIIString - def listWebPageDirectoryElements(url: String, page: String, directories: Boolean): Seq[String] = + def listWebPageRawElements(page: String): Seq[String] = Jsoup.parse(page) .select("a") .asScala .toVector .map(_.attr("href")) - .collect { - case elem if elem.nonEmpty && elem.endsWith("/") == directories => - elem - .stripSuffix("/") - .stripPrefix(url) - .stripPrefix(":") // bintray typically prepends these - } - .filter(n => !n.contains("/") && n != "." && n != "..") - - def listWebPageSubDirectories(url: String, page: String): Seq[String] = - listWebPageDirectoryElements(url, page, directories = true) - - def listWebPageFiles(url: String, page: String): Seq[String] = - listWebPageDirectoryElements(url, page, directories = false) } diff --git a/core/shared/src/main/scala/coursier/ivy/IvyRepository.scala b/core/shared/src/main/scala/coursier/ivy/IvyRepository.scala index 8956db9f2..f1bf448b2 100644 --- a/core/shared/src/main/scala/coursier/ivy/IvyRepository.scala +++ b/core/shared/src/main/scala/coursier/ivy/IvyRepository.scala @@ -2,6 +2,7 @@ package coursier.ivy import coursier.Fetch import coursier.core._ +import coursier.util.WebPage import scala.language.higherKinds @@ -149,7 +150,7 @@ final case class IvyRepository( } def fromWebPage(url: String, s: String) = { - val subDirs = coursier.core.compatibility.listWebPageSubDirectories(url, s) + val subDirs = WebPage.listDirectories(url, s) val versions = subDirs.map(Parse.version).collect { case Some(v) => v } val versionsInItv = versions.filter(itv.contains) diff --git a/core/shared/src/main/scala/coursier/maven/MavenRepository.scala b/core/shared/src/main/scala/coursier/maven/MavenRepository.scala index 23559f5a8..5eb816d5f 100644 --- a/core/shared/src/main/scala/coursier/maven/MavenRepository.scala +++ b/core/shared/src/main/scala/coursier/maven/MavenRepository.scala @@ -3,6 +3,7 @@ package coursier.maven import coursier.Fetch import coursier.core._ import coursier.core.compatibility.encodeURIComponent +import coursier.util.WebPage import scala.language.higherKinds import scalaz._ @@ -289,7 +290,7 @@ final case class MavenRepository( proj <- EitherT(F.point[String \/ Project](parseRawPom(str))) } yield { - val files = coursier.core.compatibility.listWebPageFiles(listFilesUrl, rawListFilesPage) + val files = WebPage.listFiles(listFilesUrl, rawListFilesPage) val versioning = proj .snapshotVersioning diff --git a/core/shared/src/main/scala/coursier/util/WebPage.scala b/core/shared/src/main/scala/coursier/util/WebPage.scala new file mode 100644 index 000000000..ec2c6eedc --- /dev/null +++ b/core/shared/src/main/scala/coursier/util/WebPage.scala @@ -0,0 +1,22 @@ +package coursier.util + +object WebPage { + + def listElements(url: String, page: String, directories: Boolean): Seq[String] = + coursier.core.compatibility.listWebPageRawElements(page) + .collect { + case elem if elem.nonEmpty && elem.endsWith("/") == directories => + elem + .stripSuffix("/") + .stripPrefix(url) + .stripPrefix(":") // bintray typically prepends these + } + .filter(n => !n.contains("/") && n != "." && n != "..") + + def listDirectories(url: String, page: String): Seq[String] = + listElements(url, page, directories = true) + + def listFiles(url: String, page: String): Seq[String] = + listElements(url, page, directories = false) + +} \ No newline at end of file diff --git a/package.json b/package.json index e8281dcdc..262efc4b4 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "repository": "https://github.com/alexarchambault/coursier.git", "license": "Apache-2.0", "devDependencies": { + "cheerio": "0.22.0", "xmldom": "0.1.27", "xhr2": "0.1.4" } From 766ccbf5a914ad9f34b65f947871c588e61af2b2 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Sat, 4 Feb 2017 16:25:42 +0100 Subject: [PATCH 09/10] Better handling of optional dependencies --- .../main/scala/coursier/core/Resolution.scala | 15 ++++++++++---- .../coursier/maven/MavenRepository.scala | 13 ++++++++---- .../src/main/scala/coursier/maven/Pom.scala | 20 +++++++++++++++++++ .../src/main/scala-2.10/coursier/Tasks.scala | 8 ++++++-- .../org.scala-lang/scala-compiler/2.11.8 | 5 +++++ .../scala-compiler/2.11.8_optional | 6 ++++++ .../scala/coursier/test/CentralTests.scala | 16 +++++++++++++++ 7 files changed, 73 insertions(+), 10 deletions(-) create mode 100644 tests/shared/src/test/resources/resolutions/org.scala-lang/scala-compiler/2.11.8 create mode 100644 tests/shared/src/test/resources/resolutions/org.scala-lang/scala-compiler/2.11.8_optional diff --git a/core/shared/src/main/scala/coursier/core/Resolution.scala b/core/shared/src/main/scala/coursier/core/Resolution.scala index 6a1beb59f..ac4a4661a 100644 --- a/core/shared/src/main/scala/coursier/core/Resolution.scala +++ b/core/shared/src/main/scala/coursier/core/Resolution.scala @@ -351,6 +351,7 @@ object Resolution { private val mavenScopes = { val base = Map[String, Set[String]]( "compile" -> Set("compile"), + "optional" -> Set("compile", "optional"), "provided" -> Set(), "runtime" -> Set("compile", "runtime"), "test" -> Set() @@ -463,10 +464,16 @@ object Resolution { default else keepOpt.fold(default) { keep => - if (keep(config)) - // really keeping the from.configuration, with its fallback config part - Seq(dep.copy(configuration = from.configuration)) - else + if (keep(config)) { + val depConfig = + if (actualConfig == "optional") + defaultConfiguration + else + // really keeping the from.configuration, with its fallback config part + from.configuration + + Seq(dep.copy(configuration = depConfig)) + } else Nil } } diff --git a/core/shared/src/main/scala/coursier/maven/MavenRepository.scala b/core/shared/src/main/scala/coursier/maven/MavenRepository.scala index 5eb816d5f..0be04d393 100644 --- a/core/shared/src/main/scala/coursier/maven/MavenRepository.scala +++ b/core/shared/src/main/scala/coursier/maven/MavenRepository.scala @@ -287,12 +287,12 @@ final case class MavenRepository( for { str <- fetch(projectArtifact(module, version, versioningValue)) rawListFilesPage <- fetch(artifactFor(listFilesUrl)) - proj <- EitherT(F.point[String \/ Project](parseRawPom(str))) + proj0 <- EitherT(F.point[String \/ Project](parseRawPom(str))) } yield { val files = WebPage.listFiles(listFilesUrl, rawListFilesPage) - val versioning = proj + val versioning = proj0 .snapshotVersioning .flatMap(versioning => mavenVersioning(versioning, "", "") @@ -300,7 +300,7 @@ final case class MavenRepository( val prefix = s"${module.name}-${versioning.getOrElse(version)}" - val packagingTpeMap = proj.packagingOpt + val packagingTpeMap = proj0.packagingOpt .map { packaging => (MavenSource.typeDefaultClassifier(packaging), MavenSource.typeExtension(packaging)) -> packaging } @@ -323,9 +323,14 @@ final case class MavenRepository( ) } + val proj = Pom.addOptionalDependenciesInConfig( + proj0.copy(configurations = defaultConfigurations), + Set("", "compile"), + "optional" + ) + proj.copy( actualVersionOpt = Some(version), - configurations = defaultConfigurations, publications = foundPublications ) } diff --git a/core/shared/src/main/scala/coursier/maven/Pom.scala b/core/shared/src/main/scala/coursier/maven/Pom.scala index b799113d7..cfadb7664 100644 --- a/core/shared/src/main/scala/coursier/maven/Pom.scala +++ b/core/shared/src/main/scala/coursier/maven/Pom.scala @@ -451,4 +451,24 @@ object Pom { } yield modVers :+ modVer } } + + def addOptionalDependenciesInConfig( + proj: Project, + fromConfigs: Set[String], + optionalConfig: String + ): Project = { + + val optionalDeps = proj.dependencies.collect { + case (conf, dep) if dep.optional && fromConfigs(conf) => + optionalConfig -> dep.copy(optional = false) + } + + val configurations = proj.configurations + + (optionalConfig -> (proj.configurations.getOrElse(optionalConfig, Nil) ++ fromConfigs.filter(_.nonEmpty)).distinct) + + proj.copy( + configurations = configurations, + dependencies = proj.dependencies ++ optionalDeps + ) + } } diff --git a/sbt-coursier/src/main/scala-2.10/coursier/Tasks.scala b/sbt-coursier/src/main/scala-2.10/coursier/Tasks.scala index 34768533d..547fa8c70 100644 --- a/sbt-coursier/src/main/scala-2.10/coursier/Tasks.scala +++ b/sbt-coursier/src/main/scala-2.10/coursier/Tasks.scala @@ -1,6 +1,6 @@ package coursier -import java.io.{ OutputStreamWriter, File } +import java.io.{ File, InputStream, OutputStreamWriter } import java.net.URL import java.util.concurrent.{ ExecutorService, Executors } @@ -123,10 +123,14 @@ object Tasks { allDependencies <- allDependenciesTask } yield { + val configMap = configurations + .map { cfg => cfg.name -> cfg.extendsConfigs.map(_.name) } + .toMap + FromSbt.project( projId, allDependencies, - configurations.map { cfg => cfg.name -> cfg.extendsConfigs.map(_.name) }.toMap, + configMap, sv, sbv ) diff --git a/tests/shared/src/test/resources/resolutions/org.scala-lang/scala-compiler/2.11.8 b/tests/shared/src/test/resources/resolutions/org.scala-lang/scala-compiler/2.11.8 new file mode 100644 index 000000000..6de933dc3 --- /dev/null +++ b/tests/shared/src/test/resources/resolutions/org.scala-lang/scala-compiler/2.11.8 @@ -0,0 +1,5 @@ +org.scala-lang:scala-compiler:2.11.8:compile +org.scala-lang:scala-library:2.11.8:compile +org.scala-lang:scala-reflect:2.11.8:compile +org.scala-lang.modules:scala-parser-combinators_2.11:1.0.4:compile +org.scala-lang.modules:scala-xml_2.11:1.0.4:compile \ No newline at end of file diff --git a/tests/shared/src/test/resources/resolutions/org.scala-lang/scala-compiler/2.11.8_optional b/tests/shared/src/test/resources/resolutions/org.scala-lang/scala-compiler/2.11.8_optional new file mode 100644 index 000000000..b73be2e92 --- /dev/null +++ b/tests/shared/src/test/resources/resolutions/org.scala-lang/scala-compiler/2.11.8_optional @@ -0,0 +1,6 @@ +jline:jline:2.12.1:compile +org.scala-lang:scala-compiler:2.11.8:optional +org.scala-lang:scala-library:2.11.8:compile +org.scala-lang:scala-reflect:2.11.8:compile +org.scala-lang.modules:scala-parser-combinators_2.11:1.0.4:compile +org.scala-lang.modules:scala-xml_2.11:1.0.4:compile \ No newline at end of file diff --git a/tests/shared/src/test/scala/coursier/test/CentralTests.scala b/tests/shared/src/test/scala/coursier/test/CentralTests.scala index 8e84ed1bd..49f51f127 100644 --- a/tests/shared/src/test/scala/coursier/test/CentralTests.scala +++ b/tests/shared/src/test/scala/coursier/test/CentralTests.scala @@ -465,6 +465,22 @@ object CentralTests extends TestSuite { "0.5.0" ) } + + 'scalaCompilerJLine - { + + // optional should bring jline + + * - resolutionCheck( + Module("org.scala-lang", "scala-compiler"), + "2.11.8" + ) + + * - resolutionCheck( + Module("org.scala-lang", "scala-compiler"), + "2.11.8", + configuration = "optional" + ) + } } } From 643c6d220105f72471a97760eb3253110fb6e89e Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Sun, 5 Feb 2017 15:04:57 +0100 Subject: [PATCH 10/10] Don't keep directory listing downloads in sight --- cache/src/main/scala/coursier/TermDisplay.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cache/src/main/scala/coursier/TermDisplay.scala b/cache/src/main/scala/coursier/TermDisplay.scala index 72b1f56f6..f611a912e 100644 --- a/cache/src/main/scala/coursier/TermDisplay.scala +++ b/cache/src/main/scala/coursier/TermDisplay.scala @@ -292,7 +292,7 @@ object TermDisplay { .toVector .filter { case (url, _) => - !url.endsWith(".sha1") && !url.endsWith(".md5") + !url.endsWith(".sha1") && !url.endsWith(".md5") && !url.endsWith("/") } .sortBy { case (url, _) => url }