@@ -13,7 +13,6 @@ import com.intellij.util.application
1313import com.jetbrains.rd.platform.codeWithMe.portForwarding.*
1414import com.jetbrains.rd.util.URI
1515import com.jetbrains.rd.util.lifetime.Lifetime
16- import com.jetbrains.rd.util.threading.coroutines.launch
1716import io.gitpod.supervisor.api.Status
1817import io.gitpod.supervisor.api.Status.PortsStatus
1918import io.gitpod.supervisor.api.StatusServiceGrpc
@@ -41,6 +40,10 @@ abstract class AbstractGitpodPortForwardingService : GitpodPortForwardingService
4140 private fun start () {
4241 if (application.isHeadlessEnvironment) return
4342
43+ if (isLocalPortForwardingDisabled()) {
44+ thisLogger().warn(" gitpod: Local port forwarding is disabled." )
45+ }
46+
4447 observePortsListWhileProjectIsOpen()
4548 }
4649
@@ -77,7 +80,7 @@ abstract class AbstractGitpodPortForwardingService : GitpodPortForwardingService
7780 val portsStatusRequest = Status .PortsStatusRequest .newBuilder().setObserve(true ).build()
7881
7982 val portsStatusResponseObserver = object :
80- ClientResponseObserver <Status .PortsStatusRequest , Status .PortsStatusResponse > {
83+ ClientResponseObserver <Status .PortsStatusRequest , Status .PortsStatusResponse > {
8184 override fun beforeStart (request : ClientCallStreamObserver <Status .PortsStatusRequest >) {
8285 lifetime.onTerminationOrNow { request.cancel(" gitpod: Service lifetime terminated." , null ) }
8386 }
@@ -100,6 +103,10 @@ abstract class AbstractGitpodPortForwardingService : GitpodPortForwardingService
100103 return completableFuture
101104 }
102105
106+ private fun isLocalPortForwardingDisabled (): Boolean {
107+ return System .getenv(" GITPOD_DISABLE_JETBRAINS_LOCAL_PORT_FORWARDING" )?.toBoolean() ? : false
108+ }
109+
103110 private fun syncPortsListWithClient (response : Status .PortsStatusResponse ) {
104111 val ignoredPorts = ignoredPortsForNotificationService.getIgnoredPorts()
105112 val portsList = response.portsList.filter { ! ignoredPorts.contains(it.localPort) }
@@ -114,11 +121,11 @@ abstract class AbstractGitpodPortForwardingService : GitpodPortForwardingService
114121 perClientPortForwardingManager.getPorts(it.localPort).none { p -> p.labels.contains(EXPOSED_PORT_LABEL ) }
115122 }
116123 val forwardedPortsToStopForwarding = perClientPortForwardingManager.getPorts(FORWARDED_PORT_LABEL )
117- .map { it.hostPortNumber }
118- .filter { portsNumbersFromNonServedPorts.contains(it) || ! portsNumbersFromPortsList.contains(it) }
124+ .map { it.hostPortNumber }
125+ .filter { portsNumbersFromNonServedPorts.contains(it) || ! portsNumbersFromPortsList.contains(it) }
119126 val exposedPortsToStopExposingOnClient = perClientPortForwardingManager.getPorts(EXPOSED_PORT_LABEL )
120- .map { it.hostPortNumber }
121- .filter { portsNumbersFromNonServedPorts.contains(it) || ! portsNumbersFromPortsList.contains(it) }
127+ .map { it.hostPortNumber }
128+ .filter { portsNumbersFromNonServedPorts.contains(it) || ! portsNumbersFromPortsList.contains(it) }
122129
123130 servedPortsToStartForwarding.forEach { startForwarding(it) }
124131
@@ -132,11 +139,14 @@ abstract class AbstractGitpodPortForwardingService : GitpodPortForwardingService
132139 }
133140
134141 private fun startForwarding (portStatus : PortsStatus ) {
142+ if (isLocalPortForwardingDisabled()) {
143+ return
144+ }
135145 try {
136146 perClientPortForwardingManager.forwardPort(
137- portStatus.localPort,
138- PortType .TCP ,
139- setOf (FORWARDED_PORT_LABEL ),
147+ portStatus.localPort,
148+ PortType .TCP ,
149+ setOf (FORWARDED_PORT_LABEL ),
140150 )
141151 } catch (throwable: Throwable ) {
142152 if (throwable !is PortAlreadyForwardedException ) {
@@ -147,22 +157,22 @@ abstract class AbstractGitpodPortForwardingService : GitpodPortForwardingService
147157
148158 private fun stopForwarding (hostPort : Int ) {
149159 perClientPortForwardingManager.getPorts(hostPort)
150- .filter { it.labels.contains(FORWARDED_PORT_LABEL ) }
151- .forEach { perClientPortForwardingManager.removePort(it) }
160+ .filter { it.labels.contains(FORWARDED_PORT_LABEL ) }
161+ .forEach { perClientPortForwardingManager.removePort(it) }
152162 }
153163
154164 private fun startExposingOnClient (portStatus : PortsStatus ) {
155165 perClientPortForwardingManager.exposePort(
156- portStatus.localPort,
157- portStatus.exposed.url,
158- setOf (EXPOSED_PORT_LABEL ),
166+ portStatus.localPort,
167+ portStatus.exposed.url,
168+ setOf (EXPOSED_PORT_LABEL ),
159169 )
160170 }
161171
162172 private fun stopExposingOnClient (hostPort : Int ) {
163173 perClientPortForwardingManager.getPorts(hostPort)
164- .filter { it.labels.contains(EXPOSED_PORT_LABEL ) }
165- .forEach { perClientPortForwardingManager.removePort(it) }
174+ .filter { it.labels.contains(EXPOSED_PORT_LABEL ) }
175+ .forEach { perClientPortForwardingManager.removePort(it) }
166176 }
167177
168178 private fun updatePortsPresentation (portStatus : PortsStatus ) {
0 commit comments