Skip to content

Commit 7000353

Browse files
authored
Fix propagateEnv = false to not propagate env (#238)
Originated from com-lihaoyi/mill#2881 Pull request: #238
1 parent 7ab5c0f commit 7000353

File tree

3 files changed

+50
-15
lines changed

3 files changed

+50
-15
lines changed

build.sc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,8 @@ trait OsLibModule
9292
"LC_ALL" -> "C",
9393
"TEST_JAR_WRITER_ASSEMBLY" -> testJarWriter.assembly().path.toString,
9494
"TEST_JAR_READER_ASSEMBLY" -> testJarReader.assembly().path.toString,
95-
"TEST_JAR_EXIT_ASSEMBLY" -> testJarExit.assembly().path.toString
95+
"TEST_JAR_EXIT_ASSEMBLY" -> testJarExit.assembly().path.toString,
96+
"TEST_SUBPROCESS_ENV" -> "value"
9697
)
9798
}
9899
}

os/src-jvm/ProcessOps.scala

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -337,12 +337,17 @@ private[os] object ProcessOps {
337337
): ProcessBuilder = {
338338
val builder = new java.lang.ProcessBuilder()
339339

340-
val baseEnv =
341-
if (propagateEnv) sys.env
342-
else Map()
343-
for ((k, v) <- baseEnv ++ Option(env).getOrElse(Map())) {
344-
if (v != null) builder.environment().put(k, v)
345-
else builder.environment().remove(k)
340+
val environment = builder.environment()
341+
342+
if (!propagateEnv) {
343+
environment.clear()
344+
}
345+
346+
if (env != null) {
347+
for ((k, v) <- env) {
348+
if (v != null) builder.environment().put(k, v)
349+
else builder.environment().remove(k)
350+
}
346351
}
347352

348353
builder.directory(Option(cwd).getOrElse(os.pwd).toIO)

os/test/src-jvm/SubprocessTests.scala

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -104,17 +104,46 @@ object SubprocessTests extends TestSuite {
104104

105105
test("envArgs") {
106106
if (Unix()) {
107-
val res0 = proc("bash", "-c", "echo \"Hello$ENV_ARG\"").call(env = Map("ENV_ARG" -> "12"))
108-
assert(res0.out.lines() == Seq("Hello12"))
107+
locally {
108+
val res0 = proc("bash", "-c", "echo \"Hello$ENV_ARG\"").call(env = Map("ENV_ARG" -> "12"))
109+
assert(res0.out.lines() == Seq("Hello12"))
110+
}
109111

110-
val res1 = proc("bash", "-c", "echo \"Hello$ENV_ARG\"").call(env = Map("ENV_ARG" -> "12"))
111-
assert(res1.out.lines() == Seq("Hello12"))
112+
locally {
113+
val res1 = proc("bash", "-c", "echo \"Hello$ENV_ARG\"").call(env = Map("ENV_ARG" -> "12"))
114+
assert(res1.out.lines() == Seq("Hello12"))
115+
}
112116

113-
val res2 = proc("bash", "-c", "echo 'Hello$ENV_ARG'").call(env = Map("ENV_ARG" -> "12"))
114-
assert(res2.out.lines() == Seq("Hello$ENV_ARG"))
117+
locally {
118+
val res2 = proc("bash", "-c", "echo 'Hello$ENV_ARG'").call(env = Map("ENV_ARG" -> "12"))
119+
assert(res2.out.lines() == Seq("Hello$ENV_ARG"))
120+
}
121+
122+
locally {
123+
val res3 = proc("bash", "-c", "echo 'Hello'$ENV_ARG").call(env = Map("ENV_ARG" -> "123"))
124+
assert(res3.out.lines() == Seq("Hello123"))
125+
}
115126

116-
val res3 = proc("bash", "-c", "echo 'Hello'$ENV_ARG").call(env = Map("ENV_ARG" -> "123"))
117-
assert(res3.out.lines() == Seq("Hello123"))
127+
locally {
128+
// TEST_SUBPROCESS_ENV env should be set in forkEnv in build.sc
129+
assert(sys.env.get("TEST_SUBPROCESS_ENV") == Some("value"))
130+
val res4 = proc("bash", "-c", "echo \"$TEST_SUBPROCESS_ENV\"").call(
131+
env = Map.empty,
132+
propagateEnv = false
133+
).out.lines()
134+
assert(res4 == Seq(""))
135+
}
136+
137+
locally {
138+
// TEST_SUBPROCESS_ENV env should be set in forkEnv in build.sc
139+
assert(sys.env.get("TEST_SUBPROCESS_ENV") == Some("value"))
140+
141+
val res5 = proc("bash", "-c", "echo \"$TEST_SUBPROCESS_ENV\"").call(
142+
env = Map.empty,
143+
propagateEnv = true
144+
).out.lines()
145+
assert(res5 == Seq("value"))
146+
}
118147
}
119148
}
120149
test("multiChunk") {

0 commit comments

Comments
 (0)