Skip to content

Commit 511b94c

Browse files
committed
* Added back dependencies caching
1 parent 09e440d commit 511b94c

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

src/main/kotlin/kscript/app/KscriptHandler.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,9 @@ class KscriptHandler(private val config: Config, private val docopt: DocOptWrapp
5151
}
5252

5353
val script = scriptResolver.resolve(docopt.getString("script"), preambles)
54-
val resolvedDependencies = DependencyResolver(script.repositories).resolve(script.dependencies)
54+
val resolvedDependencies = appDir.cache.getOrCreateDependencies(script) { repositories, dependencies ->
55+
DependencyResolver(repositories).resolve(dependencies)
56+
}
5557
val executor = Executor(CommandResolver(config, script), config)
5658

5759
// Create temporary dev environment

src/main/kotlin/kscript/app/appdir/Cache.kt

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
package kscript.app.appdir
22

33
import kscript.app.creator.JarArtifact
4-
import kscript.app.model.ScriptType
5-
import kscript.app.model.Content
4+
import kscript.app.model.*
65
import org.apache.commons.codec.digest.DigestUtils
76
import java.net.URI
87
import java.net.URL
@@ -66,6 +65,28 @@ class Cache(private val path: Path) {
6665
return content
6766
}
6867

68+
fun getOrCreateDependencies(
69+
script: Script, creator: (repositories: Set<Repository>, dependencies: Set<Dependency>) -> Set<Path>
70+
): Set<Path> {
71+
val directory = path.resolve("dependencies_${script.digest}")
72+
val contentFile = directory.resolve("dependencies.content")
73+
74+
if (directory.exists()) {
75+
val dependencies = contentFile.readText().lines().map { Paths.get(it) }.toSet()
76+
77+
//Recheck cached paths - if there are missing artifacts skip the cached values
78+
if (dependencies.all { it.exists() }) {
79+
return dependencies
80+
}
81+
}
82+
83+
val dependencies = creator(script.repositories, script.dependencies)
84+
directory.createDirectories()
85+
contentFile.writeText(dependencies.joinToString("\n") { it.toString() })
86+
87+
return dependencies
88+
}
89+
6990
private fun directoryCache(path: Path, creator: (Path) -> Path): Path {
7091
return if (path.exists()) {
7192
path

0 commit comments

Comments
 (0)