diff --git a/main/src/main/scala/sbt/internal/GlobLister.scala b/main/src/main/scala/sbt/internal/GlobLister.scala index 050d3affb..20970778a 100644 --- a/main/src/main/scala/sbt/internal/GlobLister.scala +++ b/main/src/main/scala/sbt/internal/GlobLister.scala @@ -74,8 +74,8 @@ private[internal] object GlobListers { private def covers(left: Glob, right: Glob): Boolean = { right.base.startsWith(left.base) && { left.depth == Int.MaxValue || { - val depth = left.base.relativize(right.base).getNameCount - depth < left.depth - right.depth + val depth = left.base.relativize(right.base).getNameCount - 1 + depth <= left.depth - right.depth } } } diff --git a/sbt/src/sbt-test/tests/glob-dsl/build.sbt b/sbt/src/sbt-test/tests/glob-dsl/build.sbt index c6452cd51..b2f8c1c76 100644 --- a/sbt/src/sbt-test/tests/glob-dsl/build.sbt +++ b/sbt/src/sbt-test/tests/glob-dsl/build.sbt @@ -52,3 +52,20 @@ checkSet := { val expected = Seq("Bar.md", "Foo.txt").map(baseDirectory.value / "base/subdir/nested-subdir" / _) assert(deduped.sorted == expected) } + +val depth = taskKey[Seq[File]]("Specify redundant sources with limited depth") +val checkDepth = taskKey[Unit]("Check that the Bar.md file is retrieved") + +depth / fileInputs ++= Seq( + sbt.io.Glob(baseDirectory.value / "base", -DirectoryFilter, 2), + sbt.io.Glob(baseDirectory.value / "base" / "subdir", -DirectoryFilter, 1) +) + +checkDepth := { + val redundant = (depth / fileInputs).value.all.map(_._1.toFile) + assert(redundant.size == 2) + + val deduped = (depth / fileInputs).value.toSet[Glob].all.map(_._1.toFile) + val expected = Seq("Bar.md", "Foo.txt").map(baseDirectory.value / "base/subdir/nested-subdir" / _) + assert(deduped.sorted == expected) +} diff --git a/sbt/src/sbt-test/tests/glob-dsl/test b/sbt/src/sbt-test/tests/glob-dsl/test index 29af3c03d..2a197fb99 100644 --- a/sbt/src/sbt-test/tests/glob-dsl/test +++ b/sbt/src/sbt-test/tests/glob-dsl/test @@ -4,4 +4,6 @@ > checkAll -> checkSet \ No newline at end of file +> checkSet + +> checkDepth \ No newline at end of file