func extractArchive()

in internal/core/startup/installers.go [227:272]


func extractArchive(archivePath string, targetDir string, stripComponents int) error {
	targetBasename := filepath.Base(targetDir)
	if targetBasename == "." || targetBasename == "/" {
		// filepath.Base returns either "." or "/" when the path has no basename.
		return fmt.Errorf("invalid target directory")
	}

	tempDir, err := os.MkdirTemp("", fmt.Sprintf("%s-*.partial", targetBasename))
	if err != nil {
		return fmt.Errorf("failed to create temporary directory for extraction: %w", err)
	}
	defer func() {
		if err := os.RemoveAll(tempDir); err != nil {
			log.Warningf("failed to remove temporary directory: %s", err.Error())
		}
	}()

	tarExe, err := exec.LookPath("tar")
	if err != nil {
		return fmt.Errorf("could not find 'tar': %w", err)
	}

	tarArgv := []string{tarExe, "-xf", strutil.GetQuotedPath(archivePath), "-C", strutil.GetQuotedPath(tempDir)}
	if stripComponents > 0 {
		tarArgv = append(tarArgv, "--strip-components", strconv.Itoa(stripComponents))
	}

	stdout, stderr, _, err := utils.RunCmdRedirectOutput("", tarArgv...)
	if err != nil {
		return fmt.Errorf("failed to extract: %w. Stdout: %s. Stderr: %s", err, stdout, stderr)
	}

	if err := os.RemoveAll(targetDir); err != nil {
		return fmt.Errorf("failed to remove existing target directory: %w", err)
	}
	err = os.Rename(tempDir, targetDir)
	if err != nil { // Trying to fallback if rename failed https://youtrack.jetbrains.com/issue/QD-12252
		log.Warningf("Error moving linter files from temp to target: %s. Trying to copy instead.", err)
		err = cp.Copy(tempDir, targetDir)
		if err != nil {
			return fmt.Errorf("error copying linter files from temp to target: %w", err)
		}
	}

	return nil
}