mirror of https://github.com/sbt/sbt.git
Introduce SBT_GLOBAL_SERVER_DIR env var to override too long paths
This commit is contained in:
parent
8e7dfb4b20
commit
4e038c91ce
|
|
@ -60,9 +60,16 @@ private[sbt] object Server {
|
||||||
// Named pipe already has an exclusive lock.
|
// Named pipe already has an exclusive lock.
|
||||||
addServerError(new Win32NamedPipeServerSocket(pipeName))
|
addServerError(new Win32NamedPipeServerSocket(pipeName))
|
||||||
case ConnectionType.Local =>
|
case ConnectionType.Local =>
|
||||||
tryClient(new UnixDomainSocket(socketfile.getAbsolutePath))
|
val maxSocketLength = new UnixDomainSocketLibrary.SockaddrUn().sunPath.length - 1
|
||||||
|
val path = socketfile.getAbsolutePath
|
||||||
|
if (path.length > maxSocketLength)
|
||||||
|
sys.error("socket file absolute path too long; " +
|
||||||
|
"either switch to another connection type " +
|
||||||
|
"or define a short \"SBT_GLOBAL_SERVER_DIR\" value. " +
|
||||||
|
s"Current path: ${path}")
|
||||||
|
tryClient(new UnixDomainSocket(path))
|
||||||
prepareSocketfile()
|
prepareSocketfile()
|
||||||
addServerError(new UnixDomainServerSocket(socketfile.getAbsolutePath))
|
addServerError(new UnixDomainServerSocket(path))
|
||||||
case ConnectionType.Tcp =>
|
case ConnectionType.Tcp =>
|
||||||
tryClient(new Socket(InetAddress.getByName(host), port))
|
tryClient(new Socket(InetAddress.getByName(host), port))
|
||||||
addServerError(new ServerSocket(port, 50, InetAddress.getByName(host)))
|
addServerError(new ServerSocket(port, 50, InetAddress.getByName(host)))
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@ package sbt
|
||||||
package internal
|
package internal
|
||||||
|
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.nio.file.Files
|
|
||||||
import java.util.concurrent.ConcurrentLinkedQueue
|
import java.util.concurrent.ConcurrentLinkedQueue
|
||||||
import java.util.concurrent.atomic._
|
import java.util.concurrent.atomic._
|
||||||
import scala.collection.mutable.ListBuffer
|
import scala.collection.mutable.ListBuffer
|
||||||
|
|
@ -24,7 +23,6 @@ import BasicKeys.{
|
||||||
logLevel
|
logLevel
|
||||||
}
|
}
|
||||||
import java.net.Socket
|
import java.net.Socket
|
||||||
import org.scalasbt.ipcsocket.UnixDomainSocketLibrary
|
|
||||||
import sjsonnew.JsonFormat
|
import sjsonnew.JsonFormat
|
||||||
import sjsonnew.shaded.scalajson.ast.unsafe._
|
import sjsonnew.shaded.scalajson.ast.unsafe._
|
||||||
import scala.concurrent.Await
|
import scala.concurrent.Await
|
||||||
|
|
@ -34,7 +32,7 @@ import sbt.io.syntax._
|
||||||
import sbt.io.{ Hash, IO }
|
import sbt.io.{ Hash, IO }
|
||||||
import sbt.internal.server._
|
import sbt.internal.server._
|
||||||
import sbt.internal.langserver.{ LogMessageParams, MessageType }
|
import sbt.internal.langserver.{ LogMessageParams, MessageType }
|
||||||
import sbt.internal.util.{ StringEvent, ObjectEvent, MainAppender, Util }
|
import sbt.internal.util.{ StringEvent, ObjectEvent, MainAppender }
|
||||||
import sbt.internal.util.codec.JValueFormats
|
import sbt.internal.util.codec.JValueFormats
|
||||||
import sbt.protocol.{ EventMessage, ExecStatusEvent }
|
import sbt.protocol.{ EventMessage, ExecStatusEvent }
|
||||||
import sbt.util.{ Level, Logger, LogExchange }
|
import sbt.util.{ Level, Logger, LogExchange }
|
||||||
|
|
@ -141,19 +139,10 @@ private[sbt] final class CommandExchange {
|
||||||
if (server.isEmpty && firstInstance.get) {
|
if (server.isEmpty && firstInstance.get) {
|
||||||
val portfile = s.baseDir / "project" / "target" / "active.json"
|
val portfile = s.baseDir / "project" / "target" / "active.json"
|
||||||
val h = Hash.halfHashString(IO.toURI(portfile).toString)
|
val h = Hash.halfHashString(IO.toURI(portfile).toString)
|
||||||
val tokenfile = BuildPaths.getGlobalBase(s) / "server" / h / "token.json"
|
val serverDir =
|
||||||
val socketfile = {
|
sys.env get "SBT_GLOBAL_SERVER_DIR" map file getOrElse BuildPaths.getGlobalBase(s) / "server"
|
||||||
val socketfile = BuildPaths.getGlobalBase(s) / "server" / h / "sock"
|
val tokenfile = serverDir / h / "token.json"
|
||||||
connectionType match {
|
val socketfile = serverDir / h / "sock"
|
||||||
case ConnectionType.Local if !Util.isWindows =>
|
|
||||||
val maxSocketLength = new UnixDomainSocketLibrary.SockaddrUn().sunPath.length - 1
|
|
||||||
if (socketfile.absolutePath.length > maxSocketLength)
|
|
||||||
Files.createTempFile("sbt-server", ".sock").toFile // assuming this is short enough..
|
|
||||||
else
|
|
||||||
socketfile
|
|
||||||
case _ => socketfile
|
|
||||||
}
|
|
||||||
}
|
|
||||||
val pipeName = "sbt-server-" + h
|
val pipeName = "sbt-server-" + h
|
||||||
val connection = ServerConnection(
|
val connection = ServerConnection(
|
||||||
connectionType,
|
connectionType,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue