Skip to content

Commit 0644bdf

Browse files
committed
.
1 parent 8e519e4 commit 0644bdf

File tree

5 files changed

+41
-21
lines changed

5 files changed

+41
-21
lines changed

core/api/src/mill/api/Module.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ trait Module extends Module.BaseClass with ModuleCtx.Wrapper with ModuleApi {
4545
private[mill] val moduleLinearized: Seq[Class[?]] =
4646
OverrideMapping.computeLinearization(this.getClass)
4747

48-
private[mill] def moduleDynamicBuildOverrides: Map[String, internal.Located[BufferedValue]] =
48+
private[mill] def moduleDynamicBuildOverrides: Map[String, internal.AppendLocated[BufferedValue]] =
4949
Map()
5050
}
5151

core/api/src/mill/api/ModuleCtx.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ object ModuleCtx extends LowPriCtx {
4646
def moduleSegments: Segments = moduleCtx.segments
4747
def moduleCtx: ModuleCtx
4848
private[mill] def moduleLinearized: Seq[Class[?]]
49-
private[mill] def moduleDynamicBuildOverrides: Map[String, internal.Located[BufferedValue]] =
49+
private[mill] def moduleDynamicBuildOverrides: Map[String, internal.AppendLocated[BufferedValue]] =
5050
Map()
5151
}
5252

core/api/src/mill/api/ScriptModule.scala

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,21 @@ trait ScriptModule extends ExternalModule {
2424
.headerData
2525
.rest
2626
.map { case (k, v) =>
27+
import upickle.core.BufferedValue
2728
val newKey = (moduleSegments ++ mill.api.Segment.Label(k.value)).render
28-
(newKey, internal.Located(scriptConfig.scriptFile, k.index, v))
29+
// Extract append flag from marker object if present
30+
val (actualValue, append) = v match {
31+
case obj: BufferedValue.Obj =>
32+
val kvMap = obj.value0.collect { case (BufferedValue.Str(k, _), v) =>
33+
k.toString -> v
34+
}.toMap
35+
(kvMap.get("__mill_append__"), kvMap.get("__mill_values__")) match {
36+
case (Some(BufferedValue.True(_)), Some(values)) => (values, true)
37+
case _ => (v, false)
38+
}
39+
case _ => (v, false)
40+
}
41+
(newKey, internal.AppendLocated(internal.Located(scriptConfig.scriptFile, k.index, actualValue), append))
2942
}
3043
}
3144
@experimental

core/api/src/mill/api/internal/Located.scala

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,29 @@ case class AppendLocated[T](located: Located[T], append: Boolean) {
99
def value: T = located.value
1010
}
1111

12+
object AppendLocated {
13+
import upickle.core.BufferedValue
14+
15+
/**
16+
* Extract append flag and actual value from a BufferedValue that may contain
17+
* the `__mill_append__` marker object (produced by YAML `!append` tag parsing).
18+
* Returns (actualValue, appendFlag).
19+
*/
20+
def unwrapAppendMarker(v: BufferedValue): (BufferedValue, Boolean) = {
21+
v match {
22+
case obj: BufferedValue.Obj =>
23+
val kvMap = obj.value0.collect { case (BufferedValue.Str(k, _), v) =>
24+
k.toString -> v
25+
}.toMap
26+
(kvMap.get("__mill_append__"), kvMap.get("__mill_values__")) match {
27+
case (Some(BufferedValue.True(_)), Some(values)) => (values, true)
28+
case _ => (v, false)
29+
}
30+
case _ => (v, false)
31+
}
32+
}
33+
}
34+
1235
object Located {
1336
class UpickleReader[T](path: os.Path)(implicit r: upickle.Reader[T])
1437
extends upickle.Reader[Located[T]] {

core/exec/src/mill/exec/GroupExecution.scala

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -62,20 +62,6 @@ trait GroupExecution {
6262
}
6363
}
6464

65-
/** Extract append flag and actual value from wrapper object if present */
66-
private def unwrapAppendMarker(v: BufferedValue): (BufferedValue, Boolean) = {
67-
v match {
68-
case obj: BufferedValue.Obj =>
69-
val kvMap = obj.value0.collect { case (BufferedValue.Str(k, _), v) =>
70-
k.toString -> v
71-
}.toMap
72-
(kvMap.get("__mill_append__"), kvMap.get("__mill_values__")) match {
73-
case (Some(BufferedValue.True(_)), Some(values)) => (values, true)
74-
case _ => (v, false)
75-
}
76-
case _ => (v, false)
77-
}
78-
}
7965

8066
val staticBuildOverrides: Map[String, AppendLocated[BufferedValue]] = staticBuildOverrideFiles
8167
.flatMap { case (path0, rawText) =>
@@ -105,7 +91,7 @@ trait GroupExecution {
10591
)
10692
.rest
10793
.map { case (k, v) =>
108-
val (actualValue, append) = unwrapAppendMarker(v)
94+
val (actualValue, append) = AppendLocated.unwrapAppendMarker(v)
10995
(segments ++ Seq(k.value)).mkString(".") -> AppendLocated(
11096
Located(path, k.index, actualValue),
11197
append
@@ -228,9 +214,7 @@ trait GroupExecution {
228214
val paths = ExecutionPaths.resolve(out, labelled.ctx.segments)
229215
val dynamicBuildOverride = labelled.ctx.enclosingModule.moduleDynamicBuildOverrides
230216
val buildOverrideOpt = staticBuildOverrides.get(labelled.ctx.segments.render)
231-
.orElse(dynamicBuildOverride.get(labelled.ctx.segments.render).map(loc =>
232-
AppendLocated(loc, append = false)
233-
))
217+
.orElse(dynamicBuildOverride.get(labelled.ctx.segments.render))
234218

235219
// Helper to evaluate the task with full caching support
236220
def evaluateTaskWithCaching(): GroupExecution.Results = {

0 commit comments

Comments
 (0)