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.
This commit is contained in:
Andrey Vlasovskikh
2015-05-27 18:15:07 +03:00
parent 3a794b3405
commit 8d82e5d3c3
4 changed files with 21 additions and 11 deletions
@@ -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<String, String> env = new HashMap<String, String>();
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;
@@ -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<String, String> environment = PySdkUtil.mergeEnvVariables(System.getenv(), ImmutableMap.of("PYTHONUNBUFFERED", "1"));
final Map<String, String> environment = new HashMap<String, String>(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: ");
@@ -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<String, String> env, String value) {
addPathToEnv(env, PYTHONPATH, value);
}
@NotNull
public static Map<String, String> setPythonDontWriteBytecode(@NotNull Map<String, String> env) {
env.put(PYTHONDONTWRITEBYTECODE, "1");
return env;
}
}
@@ -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<String, String> extraEnv,
int timeout) throws InvalidSdkException {
return PySdkUtil.getProcessOutput(
homePath,
commandLine,
extraEnv,
timeout
);
final Map<String, String> env = extraEnv != null ? new HashMap<String, String>(extraEnv) : new HashMap<String, String>();
PythonEnvUtil.setPythonDontWriteBytecode(env);
return PySdkUtil.getProcessOutput(homePath, commandLine, env, timeout);
}
public void generateBuiltinSkeletons(@NotNull Sdk sdk) throws InvalidSdkException {