…lines 1–94 unchanged (94 lines)
95 s"""|import MillMiscInfo._
96 |import _root_.mill.util.TokenReaders.given
97 |import _root_.mill.runner.autooverride.AutoOverride
98 |""".stripMargin
99
100 def processDataRest[T](data: HeaderData)(
101 onProperty: (String, ujson.Value) => T,
102 onNestedObject: (String, HeaderData) => T
103 ): Seq[T] = {
104 for ((kString, v) <- data.rest.toSeq)
105 yield kString.split(" +") match {
106 case Array(k) => onProperty(k, v)
107 case Array("object", k) => onNestedObject(k, upickle.read[HeaderData](v))
108 case _ => sys.error("Invalid key: " + kString)
109 }
110 }
111
112 def writeBuildOverrides(data: HeaderData, path: Seq[String]): Unit = {
113 val resourcePath = resourceDest / path / "build-overrides.json"
114 val out = collection.mutable.Map.empty[String, ujson.Value]
115
116 processDataRest(data)(
117 onProperty = (k, v) => out(k) = v,
118 onNestedObject = (k, nestedData) => writeBuildOverrides(nestedData, path :+ k)
119 )
120 os.write.over(resourcePath, upickle.write(out), createFolders = true)
121 }
122
123 writeBuildOverrides(parsedHeaderData, segments)
124
125 val miscInfoWithResource = {
126 val header = if (pkg.isBlank()) "" else s"package $pkg"
127 val miscInfoBody = if (segments.isEmpty) {
128 rootMiscInfo(scriptFolderPath, millTopLevelProjectRoot, output)
129 } else {
…lines 130–478 unchanged (349 lines)