Skip to content

Commit 0d3f3c9

Browse files
committed
ProxySetting FORCED now unsets settings configured outside Gradle #153
1 parent e9e2d96 commit 0d3f3c9

File tree

6 files changed

+33
-36
lines changed

6 files changed

+33
-36
lines changed

src/main/kotlin/com/github/gradle/node/npm/exec/NpmExecRunner.kt

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import com.github.gradle.node.exec.ExecConfiguration
55
import com.github.gradle.node.exec.ExecRunner
66
import com.github.gradle.node.exec.NodeExecConfiguration
77
import com.github.gradle.node.npm.proxy.NpmProxy
8-
import com.github.gradle.node.npm.proxy.NpmProxy.Companion.computeNpmProxyEnvironmentVariables
98
import com.github.gradle.node.util.ProjectApiHelper
109
import com.github.gradle.node.util.zip
1110
import com.github.gradle.node.variant.VariantComputer
@@ -24,24 +23,11 @@ abstract class NpmExecRunner {
2423
fun executeNpmCommand(project: ProjectApiHelper, extension: NodeExtension, nodeExecConfiguration: NodeExecConfiguration, variants: VariantComputer): ExecResult {
2524
val npmExecConfiguration = NpmExecConfiguration("npm"
2625
) { variantComputer, nodeExtension, npmBinDir -> variantComputer.computeNpmExec(nodeExtension, npmBinDir) }
27-
return executeCommand(project, extension, addProxyEnvironmentVariables(extension, nodeExecConfiguration),
26+
return executeCommand(project, extension, NpmProxy.addProxyEnvironmentVariables(extension.nodeProxySettings.get(), nodeExecConfiguration),
2827
npmExecConfiguration,
2928
variants)
3029
}
3130

32-
private fun addProxyEnvironmentVariables(nodeExtension: NodeExtension,
33-
nodeExecConfiguration: NodeExecConfiguration): NodeExecConfiguration {
34-
if (NpmProxy.shouldConfigureProxy(System.getenv(), nodeExtension.nodeProxySettings.get())) {
35-
val npmProxyEnvironmentVariables = computeNpmProxyEnvironmentVariables()
36-
if (npmProxyEnvironmentVariables.isNotEmpty()) {
37-
val environmentVariables =
38-
nodeExecConfiguration.environment.plus(npmProxyEnvironmentVariables)
39-
return nodeExecConfiguration.copy(environment = environmentVariables)
40-
}
41-
}
42-
return nodeExecConfiguration
43-
}
44-
4531
fun executeNpxCommand(project: ProjectApiHelper, extension: NodeExtension, nodeExecConfiguration: NodeExecConfiguration, variants: VariantComputer): ExecResult {
4632
val npxExecConfiguration = NpmExecConfiguration("npx") { variantComputer, nodeExtension, npmBinDir ->
4733
variantComputer.computeNpxExec(nodeExtension, npmBinDir)

src/main/kotlin/com/github/gradle/node/npm/proxy/NpmProxy.kt

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.github.gradle.node.npm.proxy
22

3+
import com.github.gradle.node.exec.NodeExecConfiguration
34
import java.net.URLEncoder
45
import java.util.stream.Collectors.toList
56
import java.util.stream.Stream
@@ -17,7 +18,8 @@ class NpmProxy {
1718
// And since npm also takes settings in the form of environment variables with the
1819
// NPM_CONFIG_<setting> format, we should check those. Hopefully nobody does this.
1920
// Windows will let you set environment variables with hyphens in them, but shells
20-
// on Linux will fight you so you'll have to be sneaky, adding both here "just in case".
21+
// on Linux will fight you. So you'll have to be pretty sneaky to do this.
22+
// I'm adding both here "just in case".
2123
private val npmProxyVariables = listOf(
2224
"NPM_CONFIG_PROXY", "NPM_CONFIG_HTTPS-PROXY", "NPM_CONFIG_HTTPS_PROXY", "NPM_CONFIG_NOPROXY"
2325
)
@@ -49,7 +51,7 @@ class NpmProxy {
4951
}
5052

5153
/**
52-
* Returns true if the given map of environment variables already has
54+
* Returns true if the given map of environment variables has any
5355
* proxy settings configured.
5456
*
5557
* @param env map of environment variables
@@ -60,6 +62,33 @@ class NpmProxy {
6062
}
6163
}
6264

65+
/**
66+
* Get a list of all known keys that affect the proxy configuration
67+
*/
68+
fun getKnownProxyConfigurationKeys(): Set<String> {
69+
return proxyVariables.plus(npmProxyVariables).toSet()
70+
}
71+
72+
/**
73+
* Creates a new NodeExecConfiguration with the proxy environment variables configured
74+
*/
75+
fun addProxyEnvironmentVariables(proxySettings: ProxySettings, nodeExecConfiguration: NodeExecConfiguration,
76+
environment: Map<String, String> = System.getenv()): NodeExecConfiguration {
77+
if (shouldConfigureProxy(environment, proxySettings)) {
78+
val npmProxyEnvironmentVariables = computeNpmProxyEnvironmentVariables()
79+
val environmentVariablesToUnset = if (proxySettings == ProxySettings.FORCED) getKnownProxyConfigurationKeys()
80+
else emptySet()
81+
if (npmProxyEnvironmentVariables.isNotEmpty()) {
82+
val environmentVariables =
83+
nodeExecConfiguration.environment
84+
.minus(environmentVariablesToUnset)
85+
.plus(npmProxyEnvironmentVariables)
86+
return nodeExecConfiguration.copy(environment = environmentVariables)
87+
}
88+
}
89+
return nodeExecConfiguration
90+
}
91+
6392
private fun computeProxyUrlEnvironmentVariables(): MutableMap<String, String> {
6493
val proxyArgs = mutableMapOf<String, String>()
6594
for ((proxyProto, proxyParam) in

src/main/kotlin/com/github/gradle/node/npm/task/NpmTask.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import com.github.gradle.node.task.BaseTask
88
import com.github.gradle.node.util.DefaultProjectApiHelper
99
import org.gradle.api.Action
1010
import org.gradle.api.model.ObjectFactory
11-
import org.gradle.api.provider.Provider
1211
import org.gradle.api.provider.ProviderFactory
1312
import org.gradle.api.tasks.Input
1413
import org.gradle.api.tasks.Internal
@@ -19,7 +18,6 @@ import org.gradle.kotlin.dsl.mapProperty
1918
import org.gradle.kotlin.dsl.newInstance
2019
import org.gradle.kotlin.dsl.property
2120
import org.gradle.process.ExecSpec
22-
import java.io.File
2321
import javax.inject.Inject
2422

2523
abstract class NpmTask : BaseTask() {

src/main/kotlin/com/github/gradle/node/pnpm/exec/PnpmExecRunner.kt

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import com.github.gradle.node.exec.ExecRunner
66
import com.github.gradle.node.exec.NodeExecConfiguration
77
import com.github.gradle.node.npm.exec.NpmExecConfiguration
88
import com.github.gradle.node.npm.proxy.NpmProxy
9-
import com.github.gradle.node.npm.proxy.NpmProxy.Companion.computeNpmProxyEnvironmentVariables
109
import com.github.gradle.node.util.ProjectApiHelper
1110
import com.github.gradle.node.util.zip
1211
import com.github.gradle.node.variant.VariantComputer
@@ -24,24 +23,11 @@ abstract class PnpmExecRunner {
2423
val npmExecConfiguration = NpmExecConfiguration("pnpm"
2524
) { variantComputer, nodeExtension, pnpmBinDir -> variantComputer.computePnpmExec(nodeExtension, pnpmBinDir) }
2625

27-
return executeCommand(project, extension, addProxyEnvironmentVariables(extension, nodeExecConfiguration),
26+
return executeCommand(project, extension, NpmProxy.addProxyEnvironmentVariables(extension.nodeProxySettings.get(), nodeExecConfiguration),
2827
npmExecConfiguration,
2928
variants)
3029
}
3130

32-
private fun addProxyEnvironmentVariables(nodeExtension: NodeExtension,
33-
nodeExecConfiguration: NodeExecConfiguration): NodeExecConfiguration {
34-
if (NpmProxy.shouldConfigureProxy(System.getenv(), nodeExtension.nodeProxySettings.get())) {
35-
val npmProxyEnvironmentVariables = computeNpmProxyEnvironmentVariables()
36-
if (npmProxyEnvironmentVariables.isNotEmpty()) {
37-
val environmentVariables =
38-
nodeExecConfiguration.environment.plus(npmProxyEnvironmentVariables)
39-
return nodeExecConfiguration.copy(environment = environmentVariables)
40-
}
41-
}
42-
return nodeExecConfiguration
43-
}
44-
4531
private fun executeCommand(project: ProjectApiHelper, extension: NodeExtension, nodeExecConfiguration: NodeExecConfiguration,
4632
pnpmExecConfiguration: NpmExecConfiguration,
4733
variantComputer: VariantComputer): ExecResult {

src/main/kotlin/com/github/gradle/node/util/ProjectApiHelper.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import org.gradle.api.tasks.WorkResult
1010
import org.gradle.process.ExecOperations
1111
import org.gradle.process.ExecResult
1212
import org.gradle.process.ExecSpec
13-
import java.io.ByteArrayOutputStream
1413
import java.io.File
1514
import javax.inject.Inject
1615

src/test/groovy/com/github/gradle/node/npm/task/NpmProxy_integTest.groovy

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package com.github.gradle.node.npm.task
33
import com.github.gradle.AbstractIntegTest
44
import com.github.gradle.node.ProxyTestHelper
55
import org.gradle.testkit.runner.TaskOutcome
6-
import org.gradle.util.GradleVersion
76
import org.mockserver.integration.ClientAndServer
87
import org.mockserver.socket.PortFactory
98

0 commit comments

Comments
 (0)