From 72b8fd102527e2344660503e4c8e86b97c57f880 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sat, 25 Jul 2015 17:37:52 -0400 Subject: [PATCH] Reproduce stack overflow using cached resolution with circular dependency --- .../changes/multi.sbt | 48 +++++++++++++++++++ .../cached-resolution-circular/multi.sbt | 45 +++++++++++++++++ .../cached-resolution-circular/test | 13 +++++ .../circular-dependency/changes/multi.sbt | 1 + .../circular-dependency/multi.sbt | 3 +- 5 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 sbt/src/sbt-test/dependency-management/cached-resolution-circular/changes/multi.sbt create mode 100644 sbt/src/sbt-test/dependency-management/cached-resolution-circular/multi.sbt create mode 100644 sbt/src/sbt-test/dependency-management/cached-resolution-circular/test diff --git a/sbt/src/sbt-test/dependency-management/cached-resolution-circular/changes/multi.sbt b/sbt/src/sbt-test/dependency-management/cached-resolution-circular/changes/multi.sbt new file mode 100644 index 000000000..beea32492 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/cached-resolution-circular/changes/multi.sbt @@ -0,0 +1,48 @@ +lazy val check = taskKey[Unit]("Runs the check") + +val sprayV = "1.1.1" +val playVersion = "2.2.0" +val summingbirdVersion = "0.4.0" +val luceneVersion = "4.0.0" +val akkaVersion = "2.3.1" + +def commonSettings: Seq[Def.Setting[_]] = + Seq( + ivyPaths := new IvyPaths( (baseDirectory in ThisBuild).value, Some((target in LocalRootProject).value / "ivy-cache")), + scalaVersion := "2.10.4", + fullResolvers := fullResolvers.value.filterNot(_.name == "inter-project"), + updateOptions := updateOptions.value.withCachedResolution(true) + ) + +lazy val a = project. + settings(commonSettings: _*). + settings( + name := "a", + libraryDependencies := Seq( + organization.value %% "c" % version.value, + "commons-io" % "commons-io" % "1.3", + "org.apache.spark" %% "spark-core" % "0.9.0-incubating" + ) + ) + +lazy val b = project. + settings(commonSettings: _*). + settings( + name := "b", + // this adds circular dependency + libraryDependencies := Seq(organization.value %% "c" % version.value) + ) + +lazy val c = project. + settings(commonSettings: _*). + settings( + name := "c", + libraryDependencies := Seq(organization.value %% "b" % version.value) + ) + +lazy val root = (project in file(".")). + settings(commonSettings: _*). + settings( + organization in ThisBuild := "org.example", + version in ThisBuild := "1.0-SNAPSHOT" + ) diff --git a/sbt/src/sbt-test/dependency-management/cached-resolution-circular/multi.sbt b/sbt/src/sbt-test/dependency-management/cached-resolution-circular/multi.sbt new file mode 100644 index 000000000..908893a4c --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/cached-resolution-circular/multi.sbt @@ -0,0 +1,45 @@ +lazy val check = taskKey[Unit]("Runs the check") + +val sprayV = "1.1.1" +val playVersion = "2.2.0" +val summingbirdVersion = "0.4.0" +val luceneVersion = "4.0.0" +val akkaVersion = "2.3.1" + +def commonSettings: Seq[Def.Setting[_]] = + Seq( + ivyPaths := new IvyPaths( (baseDirectory in ThisBuild).value, Some((target in LocalRootProject).value / "ivy-cache")), + scalaVersion := "2.10.4", + fullResolvers := fullResolvers.value.filterNot(_.name == "inter-project"), + updateOptions := updateOptions.value.withCachedResolution(true) + ) + +lazy val a = project. + settings(commonSettings: _*). + settings( + name := "a", + libraryDependencies := Seq( + "commons-io" % "commons-io" % "1.3", + "org.apache.spark" %% "spark-core" % "0.9.0-incubating" + ) + ) + +lazy val b = project. + settings(commonSettings: _*). + settings( + name := "b" + ) + +lazy val c = project. + settings(commonSettings: _*). + settings( + name := "c", + libraryDependencies := Seq(organization.value %% "b" % version.value) + ) + +lazy val root = (project in file(".")). + settings(commonSettings: _*). + settings( + organization in ThisBuild := "org.example", + version in ThisBuild := "1.0-SNAPSHOT" + ) diff --git a/sbt/src/sbt-test/dependency-management/cached-resolution-circular/test b/sbt/src/sbt-test/dependency-management/cached-resolution-circular/test new file mode 100644 index 000000000..f02099d70 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/cached-resolution-circular/test @@ -0,0 +1,13 @@ +> a/publishLocal + +> b/publishLocal + +> c/publishLocal + +$ copy-file changes/multi.sbt multi.sbt + +> reload + +> b/publishLocal + +> a/update diff --git a/sbt/src/sbt-test/dependency-management/circular-dependency/changes/multi.sbt b/sbt/src/sbt-test/dependency-management/circular-dependency/changes/multi.sbt index e2a312aa6..68ccf8107 100644 --- a/sbt/src/sbt-test/dependency-management/circular-dependency/changes/multi.sbt +++ b/sbt/src/sbt-test/dependency-management/circular-dependency/changes/multi.sbt @@ -4,6 +4,7 @@ def commonSettings: Seq[Def.Setting[_]] = Seq( ivyPaths := new IvyPaths( (baseDirectory in ThisBuild).value, Some((target in LocalRootProject).value / "ivy-cache")), scalaVersion := "2.10.4", + fullResolvers := fullResolvers.value.filterNot(_.name == "inter-project"), updateOptions := updateOptions.value.withCircularDependencyLevel(CircularDependencyLevel.Error) ) diff --git a/sbt/src/sbt-test/dependency-management/circular-dependency/multi.sbt b/sbt/src/sbt-test/dependency-management/circular-dependency/multi.sbt index 947217506..0a6454d57 100644 --- a/sbt/src/sbt-test/dependency-management/circular-dependency/multi.sbt +++ b/sbt/src/sbt-test/dependency-management/circular-dependency/multi.sbt @@ -3,7 +3,8 @@ lazy val check = taskKey[Unit]("Runs the check") def commonSettings: Seq[Def.Setting[_]] = Seq( ivyPaths := new IvyPaths( (baseDirectory in ThisBuild).value, Some((target in LocalRootProject).value / "ivy-cache")), - scalaVersion := "2.10.4" + scalaVersion := "2.10.4", + fullResolvers := fullResolvers.value.filterNot(_.name == "inter-project") ) lazy val a = project.