From 8d82e5d3c37f4eebc62198f97305ac6edffb6705 Mon Sep 17 00:00:00 2001 From: Andrey Vlasovskikh Date: Wed, 27 May 2015 18:15:07 +0300 Subject: [PATCH] Don't generate compiled bytecode files for skeletons, packaging and docstrings formatter (PY-15907) This fix disabled the generation of compiled bytecode files only for Python >= 2.6 in non read-only directories. Having new files inside the app directory breaks a Mac OS X security policy regarding application signing and it might result in the "incoming network connections" warning if the firewall is enabled and the default option about allowing signed software to accept incoming connections is enabled. --- .../documentation/PyStructuredDocstringFormatter.java | 7 ++++++- .../python/packaging/PyPackageManagerImpl.java | 6 ++++-- python/src/com/jetbrains/python/sdk/PythonEnvUtil.java | 9 +++++++-- .../python/sdk/skeletons/PySkeletonGenerator.java | 10 ++++------ 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/python/src/com/jetbrains/python/documentation/PyStructuredDocstringFormatter.java b/python/src/com/jetbrains/python/documentation/PyStructuredDocstringFormatter.java index e533f98609e9..f74be9bdaf9d 100644 --- a/python/src/com/jetbrains/python/documentation/PyStructuredDocstringFormatter.java +++ b/python/src/com/jetbrains/python/documentation/PyStructuredDocstringFormatter.java @@ -28,6 +28,7 @@ import com.intellij.psi.PsiElement; import com.jetbrains.python.PythonHelpersLocator; import com.jetbrains.python.psi.StructuredDocString; import com.jetbrains.python.sdk.PySdkUtil; +import com.jetbrains.python.sdk.PythonEnvUtil; import com.jetbrains.python.sdk.PythonSdkType; import com.jetbrains.python.toolbox.Substring; import org.jetbrains.annotations.NotNull; @@ -37,7 +38,9 @@ import java.io.File; import java.nio.ByteBuffer; import java.nio.charset.Charset; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * @author yole @@ -105,9 +108,11 @@ public class PyStructuredDocstringFormatter { final byte[] data = new byte[encoded.limit()]; encoded.get(data); + final Map env = new HashMap(); + PythonEnvUtil.setPythonDontWriteBytecode(env); final ProcessOutput output = PySdkUtil.getProcessOutput(new File(sdkHome).getParent(), new String[]{sdkHome, formatter}, - null, 5000, data, true); + env, 5000, data, true); if (output.isTimeout()) { LOG.info("timeout when calculating docstring"); return null; diff --git a/python/src/com/jetbrains/python/packaging/PyPackageManagerImpl.java b/python/src/com/jetbrains/python/packaging/PyPackageManagerImpl.java index e85a5a80a45a..d949fe54a036 100644 --- a/python/src/com/jetbrains/python/packaging/PyPackageManagerImpl.java +++ b/python/src/com/jetbrains/python/packaging/PyPackageManagerImpl.java @@ -15,7 +15,6 @@ */ package com.jetbrains.python.packaging; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; import com.intellij.execution.ExecutionException; import com.intellij.execution.RunCanceledByUserException; @@ -49,6 +48,7 @@ import com.jetbrains.python.psi.PyExpression; import com.jetbrains.python.psi.PyListLiteralExpression; import com.jetbrains.python.psi.PyStringLiteralExpression; import com.jetbrains.python.sdk.PySdkUtil; +import com.jetbrains.python.sdk.PythonEnvUtil; import com.jetbrains.python.sdk.PythonSdkType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -469,7 +469,9 @@ public class PyPackageManagerImpl extends PyPackageManager { try { final Process process; - final Map environment = PySdkUtil.mergeEnvVariables(System.getenv(), ImmutableMap.of("PYTHONUNBUFFERED", "1")); + final Map environment = new HashMap(System.getenv()); + PythonEnvUtil.setPythonUnbuffered(environment); + PythonEnvUtil.setPythonDontWriteBytecode(environment); final GeneralCommandLine commandLine = new GeneralCommandLine(cmdline).withWorkDirectory(workingDir).withEnvironment(environment); if (useSudo) { process = ExecUtil.sudo(commandLine, "Please enter your password to make changes in system packages: "); diff --git a/python/src/com/jetbrains/python/sdk/PythonEnvUtil.java b/python/src/com/jetbrains/python/sdk/PythonEnvUtil.java index 50c4881c3a2d..7b4184fd00a0 100644 --- a/python/src/com/jetbrains/python/sdk/PythonEnvUtil.java +++ b/python/src/com/jetbrains/python/sdk/PythonEnvUtil.java @@ -15,7 +15,6 @@ */ package com.jetbrains.python.sdk; -import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.intellij.openapi.util.text.StringUtil; import org.jetbrains.annotations.NotNull; @@ -23,7 +22,6 @@ import org.jetbrains.annotations.Nullable; import java.io.File; import java.util.Collection; -import java.util.List; import java.util.Map; import java.util.Set; @@ -35,6 +33,7 @@ public class PythonEnvUtil { @SuppressWarnings("SpellCheckingInspection") public static final String PYTHONUNBUFFERED = "PYTHONUNBUFFERED"; @SuppressWarnings("SpellCheckingInspection") public static final String PYTHONIOENCODING = "PYTHONIOENCODING"; @SuppressWarnings("SpellCheckingInspection") public static final String IPYTHONENABLE = "IPYTHONENABLE"; + @SuppressWarnings("SpellCheckingInspection") public static final String PYTHONDONTWRITEBYTECODE = "PYTHONDONTWRITEBYTECODE"; private PythonEnvUtil() { } @@ -86,4 +85,10 @@ public class PythonEnvUtil { public static void addToPythonPath(@NotNull Map env, String value) { addPathToEnv(env, PYTHONPATH, value); } + + @NotNull + public static Map setPythonDontWriteBytecode(@NotNull Map env) { + env.put(PYTHONDONTWRITEBYTECODE, "1"); + return env; + } } diff --git a/python/src/com/jetbrains/python/sdk/skeletons/PySkeletonGenerator.java b/python/src/com/jetbrains/python/sdk/skeletons/PySkeletonGenerator.java index 90d1921f920c..672137d4a150 100644 --- a/python/src/com/jetbrains/python/sdk/skeletons/PySkeletonGenerator.java +++ b/python/src/com/jetbrains/python/sdk/skeletons/PySkeletonGenerator.java @@ -29,6 +29,7 @@ import com.intellij.util.Consumer; import com.jetbrains.python.PythonHelpersLocator; import com.jetbrains.python.sdk.InvalidSdkException; import com.jetbrains.python.sdk.PySdkUtil; +import com.jetbrains.python.sdk.PythonEnvUtil; import com.jetbrains.python.sdk.PythonSdkType; import com.jetbrains.python.sdk.flavors.IronPythonSdkFlavor; import com.jetbrains.python.sdk.flavors.PythonSdkFlavor; @@ -171,12 +172,9 @@ public class PySkeletonGenerator { protected ProcessOutput getProcessOutput(String homePath, String[] commandLine, Map extraEnv, int timeout) throws InvalidSdkException { - return PySdkUtil.getProcessOutput( - homePath, - commandLine, - extraEnv, - timeout - ); + final Map env = extraEnv != null ? new HashMap(extraEnv) : new HashMap(); + PythonEnvUtil.setPythonDontWriteBytecode(env); + return PySdkUtil.getProcessOutput(homePath, commandLine, env, timeout); } public void generateBuiltinSkeletons(@NotNull Sdk sdk) throws InvalidSdkException {