private def tmpDir()

in ideaSupport/src/main/scala/org/jetbrains/sbtidea/download/idea/IdeaDistInstaller.scala [23:90]


  private def tmpDir(implicit ctx: IdeInstallationProcessContext): Path =
    ctx.baseDirectory.getParent.resolve(s"${buildInfo.edition.name}-${buildInfo.buildNumber}-TMP")

  private[idea] def installDist(artifact: Path)(implicit ctx: IdeInstallationProcessContext): Path = {
    import org.jetbrains.sbtidea.Keys.IntelliJPlatform.MPS

    import sys.process.*

    log.info(s"Extracting ${buildInfo.edition.name} dist to $tmpDir")

    ctx.baseDirectory.toFile.getParentFile.mkdirs() // ensure "sdk" directory exists
    NioUtils.delete(tmpDir)
    Files.createDirectories(tmpDir)

    object Extensions {
      val Zip = ".zip"
      val TarGz = ".tar.gz"
      val Dmg = ".dmg"

      val all: Seq[String] = Seq(Zip, TarGz, Dmg)
    }

    val artifactFileName = artifact.getFileName.toString
    if (artifactFileName.endsWith(Extensions.Zip)) {
      val res = sbt.IO.unzip(artifact.toFile, tmpDir.toFile)
      if (res.isEmpty)
        throw new RuntimeException(s"Failed to unzip ${artifact.toFile} - bad archive")
    } else if (artifactFileName.endsWith(Extensions.TarGz)) {
      val rc = s"tar xfz $artifact -C $tmpDir --strip 1".!
      if (rc != 0)
        throw new RuntimeException(s"Failed to install ${buildInfo.edition.name} dist: tar command failed")
    } else if (artifactFileName.endsWith(Extensions.Dmg)) {
      // dmg will be installed in a single operation
    } else {
      throw new RuntimeException(s"Unexpected dist archive format: $artifactFileName. Supported formats: ${Extensions.all.mkString(",")}")
    }

    if (ctx.baseDirectory.exists) {
      log.warn(s"IJ install directory already exists, removing... (${ctx.baseDirectory})")
      NioUtils.delete(ctx.baseDirectory)
    }

    buildInfo.edition match {
      case MPS if Files.list(tmpDir).count() == 1 => // MPS may add an additional folder level to the artifact
        log.info("MPS detected: applying install dir quirks")
        val actualDir = Files.list(tmpDir).iterator().next()
        Files.move(actualDir, ctx.baseDirectory)
        Files.deleteIfExists(tmpDir)
      case _ =>
        if (artifactFileName.endsWith(Extensions.Dmg)) {
          installDmgApp(artifact, ctx.baseDirectory)
        } else {
          Files.move(tmpDir, ctx.baseDirectory)
        }
    }

    fixAccessRights(ctx.baseDirectory)
    addToolboxIgnoreFile(ctx.baseDirectory)

    if (!keepDownloadedFiles) {
      log.info(s"Deleting $artifact")
      NioUtils.delete(artifact)
    }

    NioUtils.delete(tmpDir)
    log.info(s"Installed ${buildInfo.edition.name}($buildInfo) to ${ctx.baseDirectory}")
    ctx.baseDirectory
  }