summaryrefslogtreecommitdiff
path: root/src/virtualenv/util/path
diff options
context:
space:
mode:
authorBernát Gábor <bgabor8@bloomberg.net>2020-01-16 11:09:43 +0000
committerGitHub <noreply@github.com>2020-01-16 11:09:43 +0000
commitb5f618f352557ddea5ec0e0bfe7188690b51e373 (patch)
treefeb3fd0e4a36d101aa35aa5973c33f8c43fca939 /src/virtualenv/util/path
parentdbcc95683d00df3e5d7befff431db4bceb52aebc (diff)
downloadvirtualenv-b5f618f352557ddea5ec0e0bfe7188690b51e373.tar.gz
add zipapp support with bundled dependencies (#1491)
Signed-off-by: Bernat Gabor <bgabor8@bloomberg.net>
Diffstat (limited to 'src/virtualenv/util/path')
-rw-r--r--src/virtualenv/util/path/__init__.py9
-rw-r--r--src/virtualenv/util/path/_permission.py20
2 files changed, 22 insertions, 7 deletions
diff --git a/src/virtualenv/util/path/__init__.py b/src/virtualenv/util/path/__init__.py
index ab5db8e..e00acd5 100644
--- a/src/virtualenv/util/path/__init__.py
+++ b/src/virtualenv/util/path/__init__.py
@@ -1,12 +1,7 @@
from __future__ import absolute_import, unicode_literals
from ._pathlib import Path
+from ._permission import make_exe
from ._sync import copy, ensure_dir, symlink, symlink_or_copy
-__all__ = (
- "ensure_dir",
- "symlink_or_copy",
- "symlink",
- "copy",
- "Path",
-)
+__all__ = ("ensure_dir", "symlink_or_copy", "symlink", "copy", "Path", "make_exe")
diff --git a/src/virtualenv/util/path/_permission.py b/src/virtualenv/util/path/_permission.py
new file mode 100644
index 0000000..1356b6d
--- /dev/null
+++ b/src/virtualenv/util/path/_permission.py
@@ -0,0 +1,20 @@
+from __future__ import absolute_import, unicode_literals
+
+from stat import S_IXGRP, S_IXOTH, S_IXUSR
+
+
+def make_exe(filename):
+ original_mode = filename.stat().st_mode
+ levels = [S_IXUSR, S_IXGRP, S_IXOTH]
+ for at in range(len(levels), 0, -1):
+ try:
+ mode = original_mode
+ for level in levels[:at]:
+ mode |= level
+ filename.chmod(mode)
+ break
+ except PermissionError:
+ continue
+
+
+__all__ = ("make_exe",)