1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
package mill.modules
import coursier.Repository
import mill.api.{PathRef, IO}
import mill.util.Ctx
import mill.api.Loose
object Util {
def cleanupScaladoc(v: String) = {
v.linesIterator.map(
_.dropWhile(_.isWhitespace)
.stripPrefix("/**")
.stripPrefix("*/")
.stripPrefix("*")
.dropWhile(_.isWhitespace)
).toArray
.dropWhile(_.isEmpty)
.reverse
.dropWhile(_.isEmpty)
.reverse
}
def download(url: String, dest: os.RelPath = "download")(implicit ctx: Ctx.Dest) = {
val out = ctx.dest / dest
val website = new java.net.URI(url).toURL
val rbc = java.nio.channels.Channels.newChannel(website.openStream)
try{
val fos = new java.io.FileOutputStream(out.toIO)
try{
fos.getChannel.transferFrom(rbc, 0, java.lang.Long.MAX_VALUE)
PathRef(out)
} finally{
fos.close()
}
} finally{
rbc.close()
}
}
def downloadUnpackZip(url: String, dest: os.RelPath = "unpacked")
(implicit ctx: Ctx.Dest) = {
val tmpName = if (dest == os.rel / "tmp.zip") "tmp2.zip" else "tmp.zip"
val downloaded = download(url, tmpName)
IO.unpackZip(downloaded.path, dest)
}
def millProjectModule(key: String,
artifact: String,
repositories: Seq[Repository],
resolveFilter: os.Path => Boolean = _ => true,
artifactSuffix: String = "_2.12") = {
val localPath = sys.props(key)
if (localPath != null) {
mill.api.Result.Success(
mill.api.Loose.Agg.from(localPath.split(',').map(p => PathRef(os.Path(p), quick = true)))
)
} else {
mill.modules.Jvm.resolveDependencies(
repositories,
Seq(
coursier.Dependency(
coursier.Module("com.lihaoyi", artifact + artifactSuffix),
sys.props("MILL_VERSION")
)
),
Nil
).map(_.filter(x => resolveFilter(x.path)))
}
}
}
|