From 797855bbad9df5bda34884a4c518b6145130a9bd Mon Sep 17 00:00:00 2001 From: Christopher Vogt Date: Wed, 27 Apr 2016 09:38:03 -0400 Subject: make cacheabilty of git dependency depend on cacheability of it's build. Also separate out regex, so we can use it to detect cbt version urls later --- stage2/GitDependency.scala | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) (limited to 'stage2') diff --git a/stage2/GitDependency.scala b/stage2/GitDependency.scala index 16423df..333d81c 100644 --- a/stage2/GitDependency.scala +++ b/stage2/GitDependency.scala @@ -5,25 +5,26 @@ import scala.collection.immutable.Seq import org.eclipse.jgit.api._ import org.eclipse.jgit.lib.Ref +object GitDependency{ + val GitUrl = "(git:|https:|file:/)//([^/]+)/(.+)".r +} case class GitDependency( url: String, ref: String // example: git://github.com/cvogt/cbt.git# )(implicit val logger: Logger, classLoaderCache: ClassLoaderCache, context: Context ) extends Dependency{ + import GitDependency._ override def lib = new Lib(logger) - override def canBeCached = true + override def canBeCached = dependency.canBeCached // TODO: add support for authentication via ssh and/or https // See http://www.codeaffine.com/2014/12/09/jgit-authentication/ + private val GitUrl( _, domain, path ) = url + - private val GitUrl = "(git|https)://([^/]+)/(.+)".r - private val GitUrl( _, domain, path ) = url - - private object dependenciesCache extends Cache[Seq[Dependency]] - def dependencies = dependenciesCache{ - val checkoutDirectory = paths.cbtHome ++ s"/cache/git/$domain/$path/$ref" + def checkout: File = { + val checkoutDirectory = context.cache ++ s"/git/$domain/$path/$ref" if(checkoutDirectory.exists){ logger.git(s"Found existing checkout of $url#$ref in $checkoutDirectory") } else { - logger.git(s"Cloning $url into $checkoutDirectory") val git = Git.cloneRepository() @@ -35,14 +36,16 @@ case class GitDependency( git.checkout() .setName(ref) .call() - } - val managedBuild = lib.loadDynamic( - context.copy( projectDirectory = checkoutDirectory, args = Seq() ) - ) - Seq( managedBuild ) + checkoutDirectory + } + private object dependencyCache extends Cache[Dependency] + def dependency = dependencyCache{ + BuildDependency( context.copy( projectDirectory = checkout ) ) } + def dependencies = Seq(dependency) + def exportedClasspath = ClassPath(Seq()) def exportedJars = Seq() private[cbt] def targetClasspath = exportedClasspath -- cgit v1.2.3