Skip to content

Commit ce854a6

Browse files
Add Executor.setEnvVar()
1 parent 08a2a66 commit ce854a6

File tree

1 file changed

+28
-2
lines changed

1 file changed

+28
-2
lines changed

test/jdk/tools/jpackage/helpers/jdk/jpackage/test/Executor.java

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,10 @@
3333
import java.util.ArrayList;
3434
import java.util.Arrays;
3535
import java.util.Collections;
36+
import java.util.HashMap;
3637
import java.util.HashSet;
3738
import java.util.List;
39+
import java.util.Map;
3840
import java.util.Objects;
3941
import java.util.Optional;
4042
import java.util.Set;
@@ -92,6 +94,13 @@ public Executor setExecutable(JavaTool v) {
9294

9395
public Executor removeEnvVar(String envVarName) {
9496
removeEnvVars.add(Objects.requireNonNull(envVarName));
97+
setEnvVars.remove(envVarName);
98+
return this;
99+
}
100+
101+
public Executor setEnvVar(String envVarName, String envVarValue) {
102+
setEnvVars.put(Objects.requireNonNull(envVarName), Objects.requireNonNull(envVarValue));
103+
removeEnvVars.remove(envVarName);
95104
return this;
96105
}
97106

@@ -370,9 +379,25 @@ private Result runExecutable() throws IOException, InterruptedException {
370379
builder.directory(directory.toFile());
371380
sb.append(String.format("; in directory [%s]", directory));
372381
}
382+
if (!setEnvVars.isEmpty()) {
383+
final var defaultEnv = builder.environment();
384+
final var envComm = Comm.compare(defaultEnv.keySet(), setEnvVars.keySet());
385+
envComm.unique2().forEach(envVar -> {
386+
TKit.trace(String.format("Adding %s=[%s] to environment", envVar, setEnvVars.get(envVar)));
387+
});
388+
envComm.common().forEach(envVar -> {
389+
final var curValue = defaultEnv.get(envVar);
390+
final var newValue = setEnvVars.get(envVar);
391+
if (!curValue.equals(newValue)) {
392+
TKit.trace(String.format("Setting %s=[%s] in environment", envVar, setEnvVars.get(envVar)));
393+
}
394+
});
395+
defaultEnv.putAll(setEnvVars);
396+
}
373397
if (!removeEnvVars.isEmpty()) {
374-
final var envComm = Comm.compare(builder.environment().keySet(), removeEnvVars);
375-
builder.environment().keySet().removeAll(envComm.common());
398+
final var defaultEnv = builder.environment().keySet();
399+
final var envComm = Comm.compare(defaultEnv, removeEnvVars);
400+
defaultEnv.removeAll(envComm.common());
376401
envComm.common().forEach(envVar -> {
377402
TKit.trace(String.format("Clearing %s in environment", envVar));
378403
});
@@ -515,6 +540,7 @@ private static void trace(String msg) {
515540
private Set<SaveOutputType> saveOutputType;
516541
private Path directory;
517542
private Set<String> removeEnvVars = new HashSet<>();
543+
private Map<String, String> setEnvVars = new HashMap<>();
518544
private boolean winEnglishOutput;
519545
private String winTmpDir = null;
520546

0 commit comments

Comments
 (0)