Skip to content

Commit

Permalink
Environment variable Path should be used as case-insensitive
Browse files Browse the repository at this point in the history
fix #438
  • Loading branch information
slawekjaranowski committed Aug 12, 2024
1 parent cfb3a9f commit 5ac4f80
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 13 deletions.
15 changes: 9 additions & 6 deletions src/main/java/org/codehaus/mojo/exec/ExecMojo.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.TreeSet;
import java.util.function.Consumer;
Expand Down Expand Up @@ -488,8 +489,7 @@ private Map<String, String> handleSystemEnvVariables() throws MojoExecutionExcep
}

if (this.getLog().isDebugEnabled()) {
Set<String> keys = new TreeSet<>();
keys.addAll(enviro.keySet());
Set<String> keys = new TreeSet<>(enviro.keySet());
for (String key : keys) {
this.getLog().debug("env: " + key + "=" + enviro.get(key));
}
Expand Down Expand Up @@ -825,10 +825,13 @@ private List<String> getExecutablePaths(Map<String, String> enviro) {
List<String> paths = new ArrayList<>();
paths.add("");

String path = enviro.get("PATH");
if (path != null) {
paths.addAll(Arrays.asList(StringUtils.split(path, File.pathSeparator)));
}
enviro.entrySet().stream()
.filter(entry -> "PATH".equalsIgnoreCase(entry.getKey()))
.map(Map.Entry::getValue)
.filter(Objects::nonNull)
.map(path -> path.split(File.pathSeparator))
.map(Arrays::asList)
.forEach(paths::addAll);

return paths;
}
Expand Down
17 changes: 10 additions & 7 deletions src/test/java/org/codehaus/mojo/exec/ExecMojoTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -144,17 +144,20 @@ public void testGetExecutablePath() throws IOException {

final String comSpec = System.getenv("ComSpec");

// for windows scripts cmd should be used
realMojo.setExecutable("javax.bat");
cmd = realMojo.getExecutablePath(enviro, workdir);
assertTrue(
"is bat file on windows, execute using ComSpec.",
cmd.getExecutable().equals(comSpec));
assertEquals("is bat file on windows, execute using ComSpec.", comSpec, cmd.getExecutable());
assertEquals("is /c argument pass using ComSpec.", "/c", cmd.getArguments()[0]);

enviro.put("PATH", workdir.getAbsolutePath() + File.separator + "target");
String path = workdir.getAbsolutePath() + File.separator + "target";
enviro.put("Path", path);
realMojo.setExecutable("javax"); // FIXME javax.bat should be also allowed
cmd = realMojo.getExecutablePath(enviro, workdir);
assertTrue(
"is bat file on windows' PATH, execute using ComSpec.",
cmd.getExecutable().equals(comSpec));
assertEquals("is bat file on windows, execute using ComSpec.", comSpec, cmd.getExecutable());
assertEquals("is /c argument pass using ComSpec.", "/c", cmd.getArguments()[0]);
assertEquals("full path is discovered.", path + File.separator + "javax.bat", cmd.getArguments()[1]);

f.delete();
assertFalse("file deleted...", f.exists());
}
Expand Down

0 comments on commit 5ac4f80

Please # to comment.