Ed Baunton pushed to branch edbaunton/executable-remote-source at BuildStream / buildstream
Commits:
-
39d66adf
by Ed Baunton at 2018-08-04T02:00:22Z
2 changed files:
Changes:
... | ... | @@ -55,7 +55,6 @@ remote - stage files from remote urls |
55 | 55 |
|
56 | 56 |
"""
|
57 | 57 |
import os
|
58 |
-import stat
|
|
59 | 58 |
from buildstream import SourceError, utils
|
60 | 59 |
from ._downloadablefilesource import DownloadableFileSource
|
61 | 60 |
|
... | ... | @@ -85,9 +84,12 @@ class RemoteSource(DownloadableFileSource): |
85 | 84 |
|
86 | 85 |
utils.safe_copy(self._get_mirror_file(), dest)
|
87 | 86 |
|
87 |
+ # To prevent user's umask introducing variability here, explicitly set
|
|
88 |
+ # file modes.
|
|
88 | 89 |
if self.executable:
|
89 |
- st = os.stat(dest)
|
|
90 |
- os.chmod(dest, st.st_mode | stat.S_IEXEC)
|
|
90 |
+ os.chmod(dest, 0o755)
|
|
91 |
+ else:
|
|
92 |
+ os.chmod(dest, 0o644)
|
|
91 | 93 |
|
92 | 94 |
|
93 | 95 |
def setup():
|
... | ... | @@ -86,7 +86,11 @@ def test_simple_file_build(cli, tmpdir, datafiles): |
86 | 86 |
checkout_file = os.path.join(checkoutdir, 'file')
|
87 | 87 |
assert(os.path.exists(checkout_file))
|
88 | 88 |
|
89 |
- assert(not (os.stat(checkout_file).st_mode & stat.S_IEXEC))
|
|
89 |
+ mode = os.stat(checkout_file).st_mode
|
|
90 |
+ # Assert not executable by anyone
|
|
91 |
+ assert(not (mode & (stat.S_IEXEC | stat.S_IXGRP | stat.S_IXOTH)))
|
|
92 |
+ # Assert not writeable by anyone other than me
|
|
93 |
+ assert(not (mode & (stat.S_IWGRP | stat.S_IWOTH)))
|
|
90 | 94 |
|
91 | 95 |
|
92 | 96 |
@pytest.mark.datafiles(os.path.join(DATA_DIR, 'single-file-custom-name'))
|
... | ... | @@ -156,6 +160,7 @@ def test_executable(cli, tmpdir, datafiles): |
156 | 160 |
result = cli.run(project=project, args=[
|
157 | 161 |
'checkout', 'target-custom-executable.bst', checkoutdir
|
158 | 162 |
])
|
159 |
- |
|
160 |
- assert (os.stat(
|
|
161 |
- os.path.join(checkoutdir, 'some-custom-file')).st_mode & stat.S_IEXEC)
|
|
163 |
+ mode = os.stat(os.path.join(checkoutdir, 'some-custom-file')).st_mode
|
|
164 |
+ assert (mode & stat.S_IEXEC)
|
|
165 |
+ # Assert executable by anyone
|
|
166 |
+ assert(mode & (stat.S_IEXEC | stat.S_IXGRP | stat.S_IXOTH))
|