Merge pull request #7977 from eed3si9n/wip/term-capability

[2.x] Cache terminal capability
This commit is contained in:
eugene yokota 2024-12-28 14:53:56 -05:00 committed by GitHub
commit acd76d29a9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 20 additions and 12 deletions

View File

@ -38,6 +38,7 @@ import sbt.internal.util.complete.{ Parser, Parsers }
import sbt.util.Logger
import scala.annotation.tailrec
import scala.collection.concurrent
import scala.collection.mutable
import scala.concurrent.duration._
import scala.util.Try
@ -828,20 +829,27 @@ final class NetworkChannel(
override lazy val isColorEnabled: Boolean = waitForPending(_.isColorEnabled)
override lazy val isSupershellEnabled: Boolean = waitForPending(_.isSupershellEnabled)
getProperties(false)
private def getCapability[T](
private val capabilityCache
: concurrent.Map[TerminalCapabilitiesQuery, TerminalCapabilitiesResponse] =
concurrent.TrieMap()
private def getCapability[A1](
query: TerminalCapabilitiesQuery,
result: TerminalCapabilitiesResponse => T
): Option[T] = {
if (closed.get) None
else {
val queue = VirtualTerminal.sendTerminalCapabilitiesQuery(
term.name,
jsonRpcRequest[TerminalCapabilitiesQuery],
query
result: TerminalCapabilitiesResponse => A1
): Option[A1] =
if closed.get then None
else
val response = capabilityCache.getOrElseUpdate(
query, {
val queue = VirtualTerminal.sendTerminalCapabilitiesQuery(
term.name,
jsonRpcRequest[TerminalCapabilitiesQuery],
query
)
queue.take()
}
)
Some(result(queue.take))
}
}
Some(result(response))
override def getBooleanCapability(capability: String): Boolean =
getCapability(
TerminalCapabilitiesQuery(boolean = Some(capability), numeric = None, string = None),