Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #6 from atomsfat/bug/JENKINS-45079-NVM_NODEJS_ORG_…
…MIRROR-null

Solve NPE on upgraded installations
  • Loading branch information
atomsfat committed Jun 24, 2017
2 parents 741145d + 13cc3a8 commit dcf3073
Showing 1 changed file with 27 additions and 20 deletions.
47 changes: 27 additions & 20 deletions src/main/java/org/jenkinsci/plugins/nvm/NvmWrapperUtil.java
Expand Up @@ -11,10 +11,7 @@
import java.io.IOException;
import java.net.URL;
import java.nio.file.FileSystems;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;

public class NvmWrapperUtil {
Expand All @@ -27,7 +24,7 @@ public class NvmWrapperUtil {

private java.nio.file.FileSystem fs = FileSystems.getDefault();

private List<String> nvmPaths = Arrays.asList(
private List<String> nvmPaths = Arrays.asList(
System.getProperty("user.home") + "/.nvm/nvm.sh",
"/usr/local/nvm/nvm.sh"
);
Expand All @@ -39,16 +36,21 @@ public class NvmWrapperUtil {
}

public Map<String, String> getNpmEnvVars(String version, String nvmInstallURL,
String nvmNodeJsOrgMirror, String nvmIoJsOrgMirror)
throws IOException, InterruptedException {
String nvmNodeJsOrgMirror, String nvmIoJsOrgMirror)
throws IOException, InterruptedException {

if (getNvmPath() == null ) {
installNvm(nvmInstallURL);

if (!getNvmPath().isPresent()) {
int statusCode = installNvm(Optional.ofNullable(nvmInstallURL).orElse(NvmDefaults.nvmInstallURL));
if (statusCode != 0) {
throw new AbortException("Failed to install Nvm");
}
}


String mirrorBin = version.contains("iojs") ?
"NVM_IOJS_ORG_MIRROR=" + nvmIoJsOrgMirror :
"NVM_NODEJS_ORG_MIRROR=" + nvmNodeJsOrgMirror ;
"NVM_IOJS_ORG_MIRROR=" + Optional.ofNullable(nvmIoJsOrgMirror).orElse(NvmDefaults.nvmIoJsOrgMirror) :
"NVM_NODEJS_ORG_MIRROR=" + Optional.ofNullable(nvmNodeJsOrgMirror).orElse(NvmDefaults.nvmNodeJsOrgMirror);

ArgumentListBuilder beforeCmd = new ArgumentListBuilder();
beforeCmd.add("bash");
Expand All @@ -60,20 +62,25 @@ public Map<String, String> getNpmEnvVars(String version, String nvmInstallURL,
ArgumentListBuilder nvmSourceCmd = new ArgumentListBuilder();
nvmSourceCmd.add("bash");
nvmSourceCmd.add("-c");
nvmSourceCmd.add("source " + getNvmPath() +
" && " + mirrorBin + " nvm install " + version +
" && nvm use "+ version +
" && export > nvm.env");
if (!getNvmPath().isPresent()) {
throw new AbortException("NVM is was not installed ");
}
getNvmPath().ifPresent(nvmPath -> {
nvmSourceCmd.add("source " + nvmPath +
" && " + mirrorBin + " nvm install " + version +
" && nvm use " + version +
" && export > nvm.env");
});

Map<String, String> afterEnv = toMap(getExport(nvmSourceCmd, "nvm.env"));

Map<String, String> newEnvVars = new HashMap<>();

afterEnv.forEach((k,v)-> {
afterEnv.forEach((k, v) -> {
String beforeValue = beforeEnv.get(k);
if (!v.equals(beforeValue)) {

if (k.equals("PATH")){
if (k.equals("PATH")) {
String path = Arrays.stream(v.split(File.pathSeparator))
.filter(it -> it.matches(".*\\.nvm.*"))
.collect(Collectors.joining(File.pathSeparator));
Expand Down Expand Up @@ -104,10 +111,10 @@ private String getExport(ArgumentListBuilder args, String destFile) throws IOExc
}

//**
private String getNvmPath() {
private Optional<String> getNvmPath() {

return nvmPaths.stream().filter((String str) -> fs.getPath(str).toFile().exists())
.findFirst().orElse(null);
return nvmPaths.stream().filter((String str) -> fs.getPath(str).toFile().exists())
.findFirst();

}

Expand Down

0 comments on commit dcf3073

Please sign in to comment.