From 04d8d568ef8cb2a9e44ddc2c1c7a55c8d0c3ac81 Mon Sep 17 00:00:00 2001 From: Dale Wijnand Date: Mon, 11 Jan 2021 18:52:09 +0000 Subject: [PATCH] Split into library and sbt plugin --- build.sbt | 103 ++++++++++-------- .../src/main/scala/sbtdynver/DynVer.scala | 79 +------------- .../test/scala/sbtdynver/DynVerSpec.scala | 0 .../sbtdynver/GitDescribeOutputSpec.scala | 0 .../test/scala/sbtdynver/RepoStates.scala | 0 .../test/scala/sbtdynver/TagPatternSpec.scala | 0 .../src}/test/scala/sbtdynver/testkit.scala | 0 .../main/scala/sbtdynver/DynVerPlugin.scala | 81 ++++++++++++++ .../dynver/assert-tag-version/build.sbt | 0 .../assert-tag-version/project/plugins.sbt | 0 .../sbt-test/dynver/assert-tag-version/test | 0 .../dynver/custom-version-string-0/build.sbt | 0 .../project/plugins.sbt | 0 .../dynver/custom-version-string-0/test | 0 .../dynver/custom-version-string/build.sbt | 0 .../custom-version-string/project/plugins.sbt | 0 .../dynver/custom-version-string/test | 0 .../dynver/distance-separator/build.sbt | 0 .../distance-separator/project/plugins.sbt | 0 .../sbt-test/dynver/distance-separator/test | 0 .../multi-build/bar/project/plugins.sbt | 0 .../sbt-test/dynver/multi-build/build.sbt | 0 .../dynver/multi-build/project/plugins.sbt | 0 .../src}/sbt-test/dynver/multi-build/test | 0 .../sbt-test/dynver/multi-project/build.sbt | 0 .../dynver/multi-project/project/plugins.sbt | 0 .../src}/sbt-test/dynver/multi-project/test | 0 .../sbt-test/dynver/no-v-tag-prefix/build.sbt | 0 .../no-v-tag-prefix/project/plugins.sbt | 0 .../src}/sbt-test/dynver/no-v-tag-prefix/test | 0 .../src}/sbt-test/dynver/versions/build.sbt | 0 .../dynver/versions/project/plugins.sbt | 0 .../src}/sbt-test/dynver/versions/test | 0 33 files changed, 140 insertions(+), 123 deletions(-) rename src/main/scala/sbtdynver/DynVerPlugin.scala => dynver/src/main/scala/sbtdynver/DynVer.scala (71%) rename {src => dynver/src}/test/scala/sbtdynver/DynVerSpec.scala (100%) rename {src => dynver/src}/test/scala/sbtdynver/GitDescribeOutputSpec.scala (100%) rename {src => dynver/src}/test/scala/sbtdynver/RepoStates.scala (100%) rename {src => dynver/src}/test/scala/sbtdynver/TagPatternSpec.scala (100%) rename {src => dynver/src}/test/scala/sbtdynver/testkit.scala (100%) create mode 100644 sbtdynver/src/main/scala/sbtdynver/DynVerPlugin.scala rename {src => sbtdynver/src}/sbt-test/dynver/assert-tag-version/build.sbt (100%) rename {src => sbtdynver/src}/sbt-test/dynver/assert-tag-version/project/plugins.sbt (100%) rename {src => sbtdynver/src}/sbt-test/dynver/assert-tag-version/test (100%) rename {src => sbtdynver/src}/sbt-test/dynver/custom-version-string-0/build.sbt (100%) rename {src => sbtdynver/src}/sbt-test/dynver/custom-version-string-0/project/plugins.sbt (100%) rename {src => sbtdynver/src}/sbt-test/dynver/custom-version-string-0/test (100%) rename {src => sbtdynver/src}/sbt-test/dynver/custom-version-string/build.sbt (100%) rename {src => sbtdynver/src}/sbt-test/dynver/custom-version-string/project/plugins.sbt (100%) rename {src => sbtdynver/src}/sbt-test/dynver/custom-version-string/test (100%) rename {src => sbtdynver/src}/sbt-test/dynver/distance-separator/build.sbt (100%) rename {src => sbtdynver/src}/sbt-test/dynver/distance-separator/project/plugins.sbt (100%) rename {src => sbtdynver/src}/sbt-test/dynver/distance-separator/test (100%) rename {src => sbtdynver/src}/sbt-test/dynver/multi-build/bar/project/plugins.sbt (100%) rename {src => sbtdynver/src}/sbt-test/dynver/multi-build/build.sbt (100%) rename {src => sbtdynver/src}/sbt-test/dynver/multi-build/project/plugins.sbt (100%) rename {src => sbtdynver/src}/sbt-test/dynver/multi-build/test (100%) rename {src => sbtdynver/src}/sbt-test/dynver/multi-project/build.sbt (100%) rename {src => sbtdynver/src}/sbt-test/dynver/multi-project/project/plugins.sbt (100%) rename {src => sbtdynver/src}/sbt-test/dynver/multi-project/test (100%) rename {src => sbtdynver/src}/sbt-test/dynver/no-v-tag-prefix/build.sbt (100%) rename {src => sbtdynver/src}/sbt-test/dynver/no-v-tag-prefix/project/plugins.sbt (100%) rename {src => sbtdynver/src}/sbt-test/dynver/no-v-tag-prefix/test (100%) rename {src => sbtdynver/src}/sbt-test/dynver/versions/build.sbt (100%) rename {src => sbtdynver/src}/sbt-test/dynver/versions/project/plugins.sbt (100%) rename {src => sbtdynver/src}/sbt-test/dynver/versions/test (100%) diff --git a/build.sbt b/build.sbt index fb8f644..a392a31 100644 --- a/build.sbt +++ b/build.sbt @@ -1,59 +1,72 @@ -val sbtdynver = project.in(file(".")).settings(name := "sbt-dynver") +val dynverRoot = project.in(file(".")) +val dynverP = LocalProject("dynver") +aggregateProjects(dynverP, sbtdynver) -organization := "com.dwijnand" - licenses := Seq("Apache-2.0" -> url("https://www.apache.org/licenses/LICENSE-2.0")) - description := "An sbt plugin to dynamically set your version from git" - developers := List(Developer("dwijnand", "Dale Wijnand", "dale wijnand gmail com", url("https://dwijnand.com"))) - startYear := Some(2016) - homepage := scmInfo.value map (_.browseUrl) - scmInfo := Some(ScmInfo(url("https://github.com/dwijnand/sbt-dynver"), "scm:git:git@github.com:dwijnand/sbt-dynver.git")) +inThisBuild(List( + organization := "com.dwijnand", + licenses := Seq("Apache-2.0" -> url("https://www.apache.org/licenses/LICENSE-2.0")), + description := "An sbt plugin to dynamically set your version from git", + developers := List(Developer("dwijnand", "Dale Wijnand", "dale wijnand gmail com", url("https://dwijnand.com"))), + startYear := Some(2016), + homepage := scmInfo.value map (_.browseUrl), + scmInfo := Some(ScmInfo(url("https://github.com/dwijnand/sbt-dynver"), "scm:git:git@github.com:dwijnand/sbt-dynver.git")), -enablePlugins(SbtPlugin) -Global / sbtVersion := "1.0.0" // must be Global, otherwise ^^ won't change anything - crossSbtVersions := List("1.0.0") + Global / sbtVersion := "1.0.0", // must be Global, otherwise ^^ won't change anything + LocalRootProject / crossSbtVersions := List("1.0.0"), -scalaVersion := "2.12.12" + scalaVersion := "2.12.12", - maxErrors := 15 -triggeredMessage := Watched.clearWhenTriggered + scalacOptions ++= Seq("-encoding", "utf8"), + scalacOptions ++= Seq("-deprecation", "-feature", "-unchecked", "-Xlint"), + scalacOptions += "-Xfuture", + scalacOptions += "-Yno-adapted-args", + scalacOptions += "-Ywarn-dead-code", + scalacOptions += "-Ywarn-numeric-widen", + scalacOptions += "-Ywarn-value-discard", -scalacOptions ++= Seq("-encoding", "utf8") -scalacOptions ++= Seq("-deprecation", "-feature", "-unchecked", "-Xlint") -scalacOptions += "-Xfuture" -scalacOptions += "-Yno-adapted-args" -scalacOptions += "-Ywarn-dead-code" -scalacOptions += "-Ywarn-numeric-widen" -scalacOptions += "-Ywarn-value-discard" + Test / fork := false, + Test / logBuffered := false, + Test / parallelExecution := true, +)) -libraryDependencies += "org.eclipse.jgit" % "org.eclipse.jgit" % "5.10.0.202012080955-r" % Test -libraryDependencies += "org.scalacheck" %% "scalacheck" % "1.15.2" % Test +val dynver = project.settings( + libraryDependencies += "org.eclipse.jgit" % "org.eclipse.jgit" % "5.10.0.202012080955-r" % Test, + libraryDependencies += "org.scalacheck" %% "scalacheck" % "1.15.2" % Test, -Test / fork := false -Test / logBuffered := false -Test / parallelExecution := true + mimaSettings, +) + +import com.typesafe.tools.mima.core._, ProblemFilters._ +val sbtdynver = project.dependsOn(dynverP).enablePlugins(SbtPlugin).settings( + name := "sbt-dynver", -scriptedLaunchOpts ++= Seq("-Xmx1024M", "-XX:MaxPermSize=256M", "-Dplugin.version=" + version.value) -scriptedBufferLog := true + scriptedLaunchOpts ++= Seq("-Xmx1024M", "-XX:MaxPermSize=256M", "-Dplugin.version=" + version.value), + scriptedBufferLog := true, + scriptedDependencies := Seq(dynver / publishLocal, publishLocal).dependOn.value, -def toSbtPlugin(m: ModuleID) = Def.setting( - Defaults.sbtPluginExtra(m, (pluginCrossBuild / sbtBinaryVersion).value, (update / scalaBinaryVersion).value) + mimaSettings, ) -mimaPreviousArtifacts := Set(toSbtPlugin("com.dwijnand" % "sbt-dynver" % "4.0.0").value) - -import com.typesafe.tools.mima.core._, ProblemFilters._ -mimaBinaryIssueFilters ++= Seq( - // Migrated from a task key to a setting key - exclude[IncompatibleResultTypeProblem]("sbtdynver.DynVerPlugin#autoImport.isVersionStable"), - // private[sbtdynver] - exclude[DirectMissingMethodProblem]("sbtdynver.GitDescribeOutput.parse"), - // Migrated from a task key to an initialise - exclude[IncompatibleResultTypeProblem]("sbtdynver.DynVerPlugin#autoImport.dynverAssertTagVersion"), - // GitDescribeOutput#Parser is private[sbtdynver] - exclude[Problem]("sbtdynver.GitDescribeOutput#Parser*"), - // lightbend/mima#388 - // static method requires()sbt.Plugins in class sbtdynver.DynVerPlugin does not have a correspondent in current version - exclude[DirectMissingMethodProblem]("sbtdynver.DynVerPlugin.requires"), +lazy val mimaSettings = Seq( + mimaPreviousArtifacts := Set.empty, // Set(projectID.value.withRevision("4.0.0")), + mimaBinaryIssueFilters ++= Seq( + // Migrated from a task key to a setting key + exclude[IncompatibleResultTypeProblem]("sbtdynver.DynVerPlugin#autoImport.isVersionStable"), + // private[sbtdynver] + exclude[DirectMissingMethodProblem]("sbtdynver.GitDescribeOutput.parse"), + // Migrated from a task key to an initialise + exclude[IncompatibleResultTypeProblem]("sbtdynver.DynVerPlugin#autoImport.dynverAssertTagVersion"), + // GitDescribeOutput#Parser is private[sbtdynver] + exclude[Problem]("sbtdynver.GitDescribeOutput#Parser*"), + // lightbend/mima#388 + // static method requires()sbt.Plugins in class sbtdynver.DynVerPlugin does not have a correspondent in current version + exclude[DirectMissingMethodProblem]("sbtdynver.DynVerPlugin.requires"), + ), ) +mimaPreviousArtifacts := Set.empty +publish / skip := true + Global / cancelable := true + +Global / excludeLintKeys += crossSbtVersions // Used by the "^" command (PluginCrossCommand) diff --git a/src/main/scala/sbtdynver/DynVerPlugin.scala b/dynver/src/main/scala/sbtdynver/DynVer.scala similarity index 71% rename from src/main/scala/sbtdynver/DynVerPlugin.scala rename to dynver/src/main/scala/sbtdynver/DynVer.scala index a8769ad..7e1b1a4 100644 --- a/src/main/scala/sbtdynver/DynVerPlugin.scala +++ b/dynver/src/main/scala/sbtdynver/DynVer.scala @@ -1,90 +1,13 @@ package sbtdynver +import java.io.File import java.util._, regex.Pattern import scala.{ PartialFunction => ?=> } import scala.util._ -import sbt._ -import sbt.Keys._ - import scala.sys.process.{ Process, ProcessLogger } -object DynVerPlugin extends AutoPlugin { - override def requires = plugins.JvmPlugin - override def trigger = allRequirements - - object autoImport { - val dynver = taskKey[String]("The version of your project, from git") - val dynverInstance = settingKey[DynVer]("The dynver instance for this build") - val dynverCurrentDate = settingKey[Date]("The current date, for dynver purposes") - val dynverGitDescribeOutput = settingKey[Option[GitDescribeOutput]]("The output from git describe") - val dynverSonatypeSnapshots = settingKey[Boolean]("Whether to append -SNAPSHOT to snapshot versions") - val dynverGitPreviousStableVersion = settingKey[Option[GitDescribeOutput]]("The last stable tag") - val dynverSeparator = settingKey[String]("The separator to use between tag and distance, and the hash and dirty timestamp") - val dynverTagPrefix = settingKey[String]("The prefix to use when matching the version tag") - val dynverVTagPrefix = settingKey[Boolean]("Whether or not tags have a 'v' prefix") - val dynverCheckVersion = taskKey[Boolean]("Checks if version and dynver match") - val dynverAssertVersion = taskKey[Unit]("Asserts if version and dynver match") - - // Asserts if the version derives from git tags - val dynverAssertTagVersion = Def.setting { - val v = version.value - if (dynverGitDescribeOutput.value.hasNoTags) - throw new MessageOnlyException( - s"Failed to derive version from git tags. Maybe run `git fetch --unshallow`? Version: $v" - ) - } - - // Would be nice if this were an 'upstream' key - val isVersionStable = settingKey[Boolean]("The version string identifies a specific point in version control, so artifacts built from this version can be safely cached") - val previousStableVersion = settingKey[Option[String]]("The last stable version as seen from the current commit (does not include the current commit's version/tag)") - } - import autoImport._ - - override def buildSettings = Seq( - version := { - val out = dynverGitDescribeOutput.value - val date = dynverCurrentDate.value - val separator = dynverSeparator.value - if (dynverSonatypeSnapshots.value) out.sonatypeVersionWithSep(date, separator) - else out.versionWithSep(date, separator) - }, - isSnapshot := dynverGitDescribeOutput.value.isSnapshot, - isVersionStable := dynverGitDescribeOutput.value.isVersionStable, - previousStableVersion := dynverGitPreviousStableVersion.value.previousVersion, - - dynverInstance := { - val vTagPrefix = dynverVTagPrefix.value - val tagPrefix = dynverTagPrefix.?.value.getOrElse(if (vTagPrefix) "v" else "") - assert(vTagPrefix ^ tagPrefix != "v", s"Incoherence: dynverTagPrefix=$tagPrefix vs dynverVTagPrefix=$vTagPrefix") - DynVer(Some(buildBase.value), dynverSeparator.value, tagPrefix) - }, - - dynverCurrentDate := new Date, - dynverGitDescribeOutput := dynverInstance.value.getGitDescribeOutput(dynverCurrentDate.value), - dynverSonatypeSnapshots := false, - dynverGitPreviousStableVersion := dynverInstance.value.getGitPreviousStableTag, - dynverSeparator := DynVer.separator, - dynverVTagPrefix := dynverTagPrefix.??(DynVer.tagPrefix).value == "v", - - dynver := { - val dynver = dynverInstance.value - if (dynverSonatypeSnapshots.value) dynver.sonatypeVersion(new Date) - else dynver.version(new Date) - }, - dynverCheckVersion := (dynver.value == version.value), - dynverAssertVersion := { - val v = version.value - val dv = dynver.value - if (!dynverCheckVersion.value) - sys.error(s"Version and dynver mismatch - version: $v, dynver: $dv") - } - ) - - private val buildBase = baseDirectory in ThisBuild -} - sealed case class GitRef(value: String) final case class GitCommitSuffix(distance: Int, sha: String) final case class GitDirtySuffix(value: String) diff --git a/src/test/scala/sbtdynver/DynVerSpec.scala b/dynver/src/test/scala/sbtdynver/DynVerSpec.scala similarity index 100% rename from src/test/scala/sbtdynver/DynVerSpec.scala rename to dynver/src/test/scala/sbtdynver/DynVerSpec.scala diff --git a/src/test/scala/sbtdynver/GitDescribeOutputSpec.scala b/dynver/src/test/scala/sbtdynver/GitDescribeOutputSpec.scala similarity index 100% rename from src/test/scala/sbtdynver/GitDescribeOutputSpec.scala rename to dynver/src/test/scala/sbtdynver/GitDescribeOutputSpec.scala diff --git a/src/test/scala/sbtdynver/RepoStates.scala b/dynver/src/test/scala/sbtdynver/RepoStates.scala similarity index 100% rename from src/test/scala/sbtdynver/RepoStates.scala rename to dynver/src/test/scala/sbtdynver/RepoStates.scala diff --git a/src/test/scala/sbtdynver/TagPatternSpec.scala b/dynver/src/test/scala/sbtdynver/TagPatternSpec.scala similarity index 100% rename from src/test/scala/sbtdynver/TagPatternSpec.scala rename to dynver/src/test/scala/sbtdynver/TagPatternSpec.scala diff --git a/src/test/scala/sbtdynver/testkit.scala b/dynver/src/test/scala/sbtdynver/testkit.scala similarity index 100% rename from src/test/scala/sbtdynver/testkit.scala rename to dynver/src/test/scala/sbtdynver/testkit.scala diff --git a/sbtdynver/src/main/scala/sbtdynver/DynVerPlugin.scala b/sbtdynver/src/main/scala/sbtdynver/DynVerPlugin.scala new file mode 100644 index 0000000..d286577 --- /dev/null +++ b/sbtdynver/src/main/scala/sbtdynver/DynVerPlugin.scala @@ -0,0 +1,81 @@ +package sbtdynver + +import java.util._ + +import sbt._ +import sbt.Keys._ + +object DynVerPlugin extends AutoPlugin { + override def requires = plugins.JvmPlugin + override def trigger = allRequirements + + object autoImport { + val dynver = taskKey[String]("The version of your project, from git") + val dynverInstance = settingKey[DynVer]("The dynver instance for this build") + val dynverCurrentDate = settingKey[Date]("The current date, for dynver purposes") + val dynverGitDescribeOutput = settingKey[Option[GitDescribeOutput]]("The output from git describe") + val dynverSonatypeSnapshots = settingKey[Boolean]("Whether to append -SNAPSHOT to snapshot versions") + val dynverGitPreviousStableVersion = settingKey[Option[GitDescribeOutput]]("The last stable tag") + val dynverSeparator = settingKey[String]("The separator to use between tag and distance, and the hash and dirty timestamp") + val dynverTagPrefix = settingKey[String]("The prefix to use when matching the version tag") + val dynverVTagPrefix = settingKey[Boolean]("Whether or not tags have a 'v' prefix") + val dynverCheckVersion = taskKey[Boolean]("Checks if version and dynver match") + val dynverAssertVersion = taskKey[Unit]("Asserts if version and dynver match") + + // Asserts if the version derives from git tags + val dynverAssertTagVersion = Def.setting { + val v = version.value + if (dynverGitDescribeOutput.value.hasNoTags) + throw new MessageOnlyException( + s"Failed to derive version from git tags. Maybe run `git fetch --unshallow`? Version: $v" + ) + } + + // Would be nice if this were an 'upstream' key + val isVersionStable = settingKey[Boolean]("The version string identifies a specific point in version control, so artifacts built from this version can be safely cached") + val previousStableVersion = settingKey[Option[String]]("The last stable version as seen from the current commit (does not include the current commit's version/tag)") + } + import autoImport._ + + override def buildSettings = Seq( + version := { + val out = dynverGitDescribeOutput.value + val date = dynverCurrentDate.value + val separator = dynverSeparator.value + if (dynverSonatypeSnapshots.value) out.sonatypeVersionWithSep(date, separator) + else out.versionWithSep(date, separator) + }, + isSnapshot := dynverGitDescribeOutput.value.isSnapshot, + isVersionStable := dynverGitDescribeOutput.value.isVersionStable, + previousStableVersion := dynverGitPreviousStableVersion.value.previousVersion, + + dynverInstance := { + val vTagPrefix = dynverVTagPrefix.value + val tagPrefix = dynverTagPrefix.?.value.getOrElse(if (vTagPrefix) "v" else "") + assert(vTagPrefix ^ tagPrefix != "v", s"Incoherence: dynverTagPrefix=$tagPrefix vs dynverVTagPrefix=$vTagPrefix") + DynVer(Some(buildBase.value), dynverSeparator.value, tagPrefix) + }, + + dynverCurrentDate := new Date, + dynverGitDescribeOutput := dynverInstance.value.getGitDescribeOutput(dynverCurrentDate.value), + dynverSonatypeSnapshots := false, + dynverGitPreviousStableVersion := dynverInstance.value.getGitPreviousStableTag, + dynverSeparator := DynVer.separator, + dynverVTagPrefix := dynverTagPrefix.??(DynVer.tagPrefix).value == "v", + + dynver := { + val dynver = dynverInstance.value + if (dynverSonatypeSnapshots.value) dynver.sonatypeVersion(new Date) + else dynver.version(new Date) + }, + dynverCheckVersion := (dynver.value == version.value), + dynverAssertVersion := { + val v = version.value + val dv = dynver.value + if (!dynverCheckVersion.value) + sys.error(s"Version and dynver mismatch - version: $v, dynver: $dv") + } + ) + + private val buildBase = baseDirectory in ThisBuild +} diff --git a/src/sbt-test/dynver/assert-tag-version/build.sbt b/sbtdynver/src/sbt-test/dynver/assert-tag-version/build.sbt similarity index 100% rename from src/sbt-test/dynver/assert-tag-version/build.sbt rename to sbtdynver/src/sbt-test/dynver/assert-tag-version/build.sbt diff --git a/src/sbt-test/dynver/assert-tag-version/project/plugins.sbt b/sbtdynver/src/sbt-test/dynver/assert-tag-version/project/plugins.sbt similarity index 100% rename from src/sbt-test/dynver/assert-tag-version/project/plugins.sbt rename to sbtdynver/src/sbt-test/dynver/assert-tag-version/project/plugins.sbt diff --git a/src/sbt-test/dynver/assert-tag-version/test b/sbtdynver/src/sbt-test/dynver/assert-tag-version/test similarity index 100% rename from src/sbt-test/dynver/assert-tag-version/test rename to sbtdynver/src/sbt-test/dynver/assert-tag-version/test diff --git a/src/sbt-test/dynver/custom-version-string-0/build.sbt b/sbtdynver/src/sbt-test/dynver/custom-version-string-0/build.sbt similarity index 100% rename from src/sbt-test/dynver/custom-version-string-0/build.sbt rename to sbtdynver/src/sbt-test/dynver/custom-version-string-0/build.sbt diff --git a/src/sbt-test/dynver/custom-version-string-0/project/plugins.sbt b/sbtdynver/src/sbt-test/dynver/custom-version-string-0/project/plugins.sbt similarity index 100% rename from src/sbt-test/dynver/custom-version-string-0/project/plugins.sbt rename to sbtdynver/src/sbt-test/dynver/custom-version-string-0/project/plugins.sbt diff --git a/src/sbt-test/dynver/custom-version-string-0/test b/sbtdynver/src/sbt-test/dynver/custom-version-string-0/test similarity index 100% rename from src/sbt-test/dynver/custom-version-string-0/test rename to sbtdynver/src/sbt-test/dynver/custom-version-string-0/test diff --git a/src/sbt-test/dynver/custom-version-string/build.sbt b/sbtdynver/src/sbt-test/dynver/custom-version-string/build.sbt similarity index 100% rename from src/sbt-test/dynver/custom-version-string/build.sbt rename to sbtdynver/src/sbt-test/dynver/custom-version-string/build.sbt diff --git a/src/sbt-test/dynver/custom-version-string/project/plugins.sbt b/sbtdynver/src/sbt-test/dynver/custom-version-string/project/plugins.sbt similarity index 100% rename from src/sbt-test/dynver/custom-version-string/project/plugins.sbt rename to sbtdynver/src/sbt-test/dynver/custom-version-string/project/plugins.sbt diff --git a/src/sbt-test/dynver/custom-version-string/test b/sbtdynver/src/sbt-test/dynver/custom-version-string/test similarity index 100% rename from src/sbt-test/dynver/custom-version-string/test rename to sbtdynver/src/sbt-test/dynver/custom-version-string/test diff --git a/src/sbt-test/dynver/distance-separator/build.sbt b/sbtdynver/src/sbt-test/dynver/distance-separator/build.sbt similarity index 100% rename from src/sbt-test/dynver/distance-separator/build.sbt rename to sbtdynver/src/sbt-test/dynver/distance-separator/build.sbt diff --git a/src/sbt-test/dynver/distance-separator/project/plugins.sbt b/sbtdynver/src/sbt-test/dynver/distance-separator/project/plugins.sbt similarity index 100% rename from src/sbt-test/dynver/distance-separator/project/plugins.sbt rename to sbtdynver/src/sbt-test/dynver/distance-separator/project/plugins.sbt diff --git a/src/sbt-test/dynver/distance-separator/test b/sbtdynver/src/sbt-test/dynver/distance-separator/test similarity index 100% rename from src/sbt-test/dynver/distance-separator/test rename to sbtdynver/src/sbt-test/dynver/distance-separator/test diff --git a/src/sbt-test/dynver/multi-build/bar/project/plugins.sbt b/sbtdynver/src/sbt-test/dynver/multi-build/bar/project/plugins.sbt similarity index 100% rename from src/sbt-test/dynver/multi-build/bar/project/plugins.sbt rename to sbtdynver/src/sbt-test/dynver/multi-build/bar/project/plugins.sbt diff --git a/src/sbt-test/dynver/multi-build/build.sbt b/sbtdynver/src/sbt-test/dynver/multi-build/build.sbt similarity index 100% rename from src/sbt-test/dynver/multi-build/build.sbt rename to sbtdynver/src/sbt-test/dynver/multi-build/build.sbt diff --git a/src/sbt-test/dynver/multi-build/project/plugins.sbt b/sbtdynver/src/sbt-test/dynver/multi-build/project/plugins.sbt similarity index 100% rename from src/sbt-test/dynver/multi-build/project/plugins.sbt rename to sbtdynver/src/sbt-test/dynver/multi-build/project/plugins.sbt diff --git a/src/sbt-test/dynver/multi-build/test b/sbtdynver/src/sbt-test/dynver/multi-build/test similarity index 100% rename from src/sbt-test/dynver/multi-build/test rename to sbtdynver/src/sbt-test/dynver/multi-build/test diff --git a/src/sbt-test/dynver/multi-project/build.sbt b/sbtdynver/src/sbt-test/dynver/multi-project/build.sbt similarity index 100% rename from src/sbt-test/dynver/multi-project/build.sbt rename to sbtdynver/src/sbt-test/dynver/multi-project/build.sbt diff --git a/src/sbt-test/dynver/multi-project/project/plugins.sbt b/sbtdynver/src/sbt-test/dynver/multi-project/project/plugins.sbt similarity index 100% rename from src/sbt-test/dynver/multi-project/project/plugins.sbt rename to sbtdynver/src/sbt-test/dynver/multi-project/project/plugins.sbt diff --git a/src/sbt-test/dynver/multi-project/test b/sbtdynver/src/sbt-test/dynver/multi-project/test similarity index 100% rename from src/sbt-test/dynver/multi-project/test rename to sbtdynver/src/sbt-test/dynver/multi-project/test diff --git a/src/sbt-test/dynver/no-v-tag-prefix/build.sbt b/sbtdynver/src/sbt-test/dynver/no-v-tag-prefix/build.sbt similarity index 100% rename from src/sbt-test/dynver/no-v-tag-prefix/build.sbt rename to sbtdynver/src/sbt-test/dynver/no-v-tag-prefix/build.sbt diff --git a/src/sbt-test/dynver/no-v-tag-prefix/project/plugins.sbt b/sbtdynver/src/sbt-test/dynver/no-v-tag-prefix/project/plugins.sbt similarity index 100% rename from src/sbt-test/dynver/no-v-tag-prefix/project/plugins.sbt rename to sbtdynver/src/sbt-test/dynver/no-v-tag-prefix/project/plugins.sbt diff --git a/src/sbt-test/dynver/no-v-tag-prefix/test b/sbtdynver/src/sbt-test/dynver/no-v-tag-prefix/test similarity index 100% rename from src/sbt-test/dynver/no-v-tag-prefix/test rename to sbtdynver/src/sbt-test/dynver/no-v-tag-prefix/test diff --git a/src/sbt-test/dynver/versions/build.sbt b/sbtdynver/src/sbt-test/dynver/versions/build.sbt similarity index 100% rename from src/sbt-test/dynver/versions/build.sbt rename to sbtdynver/src/sbt-test/dynver/versions/build.sbt diff --git a/src/sbt-test/dynver/versions/project/plugins.sbt b/sbtdynver/src/sbt-test/dynver/versions/project/plugins.sbt similarity index 100% rename from src/sbt-test/dynver/versions/project/plugins.sbt rename to sbtdynver/src/sbt-test/dynver/versions/project/plugins.sbt diff --git a/src/sbt-test/dynver/versions/test b/sbtdynver/src/sbt-test/dynver/versions/test similarity index 100% rename from src/sbt-test/dynver/versions/test rename to sbtdynver/src/sbt-test/dynver/versions/test