Javier Jardón pushed to branch bschubert/fix-pip-python at BuildStream / buildstream
Commits:
-
cc2e6ae5
by Valentin David at 2018-11-08T12:41:36Z
-
e578a89f
by Valentin David at 2018-11-08T13:11:10Z
-
c0a8bb66
by Angelos Evripiotis at 2018-11-08T15:49:16Z
-
f7231e90
by Angelos Evripiotis at 2018-11-08T15:49:16Z
-
f7643440
by Angelos Evripiotis at 2018-11-08T15:49:16Z
-
dd5e7b04
by Angelos Evripiotis at 2018-11-08T16:17:04Z
-
427174cc
by Benjamin Schubert at 2018-11-08T18:08:54Z
8 changed files:
- CONTRIBUTING.rst
- buildstream/plugins/sources/pip.py
- buildstream/scriptelement.py
- + tests/integration/project/elements/script/corruption-2.bst
- + tests/integration/project/elements/script/marked-tmpdir.bst
- + tests/integration/project/elements/script/no-tmpdir.bst
- + tests/integration/project/elements/script/tmpdir.bst
- tests/integration/script.py
Changes:
... | ... | @@ -97,7 +97,13 @@ a new merge request. You can also `create a merge request for an existing branch |
97 | 97 |
You may open merge requests for the branches you create before you are ready
|
98 | 98 |
to have them reviewed and considered for inclusion if you like. Until your merge
|
99 | 99 |
request is ready for review, the merge request title must be prefixed with the
|
100 |
-``WIP:`` identifier.
|
|
100 |
+``WIP:`` identifier. GitLab `treats this specially
|
|
101 |
+<https://docs.gitlab.com/ee/user/project/merge_requests/work_in_progress_merge_requests.html>`_,
|
|
102 |
+which helps reviewers.
|
|
103 |
+ |
|
104 |
+Consider marking a merge request as WIP again if you are taking a while to
|
|
105 |
+address a review point. This signals that the next action is on you, and it
|
|
106 |
+won't appear in a reviewer's search for non-WIP merge requests to review.
|
|
101 | 107 |
|
102 | 108 |
|
103 | 109 |
Organized commits
|
... | ... | @@ -122,6 +128,12 @@ If a commit in your branch modifies behavior such that a test must also |
122 | 128 |
be changed to match the new behavior, then the tests should be updated
|
123 | 129 |
with the same commit, so that every commit passes its own tests.
|
124 | 130 |
|
131 |
+These principles apply whenever a branch is non-WIP. So for example, don't push
|
|
132 |
+'fixup!' commits when addressing review comments, instead amend the commits
|
|
133 |
+directly before pushing. GitLab has `good support
|
|
134 |
+<https://docs.gitlab.com/ee/user/project/merge_requests/versions.html>`_ for
|
|
135 |
+diffing between pushes, so 'fixup!' commits are not necessary for reviewers.
|
|
136 |
+ |
|
125 | 137 |
|
126 | 138 |
Commit messages
|
127 | 139 |
~~~~~~~~~~~~~~~
|
... | ... | @@ -144,6 +156,16 @@ number must be referenced in the commit message. |
144 | 156 |
|
145 | 157 |
Fixes #123
|
146 | 158 |
|
159 |
+Note that the 'why' of a change is as important as the 'what'.
|
|
160 |
+ |
|
161 |
+When reviewing this, folks can suggest better alternatives when they know the
|
|
162 |
+'why'. Perhaps there are other ways to avoid an error when things are not
|
|
163 |
+frobnicated.
|
|
164 |
+ |
|
165 |
+When folks modify this code, there may be uncertainty around whether the foos
|
|
166 |
+should always be frobnicated. The comments, the commit message, and issue #123
|
|
167 |
+should shed some light on that.
|
|
168 |
+ |
|
147 | 169 |
In the case that you have a commit which necessarily modifies multiple
|
148 | 170 |
components, then the summary line should still mention generally what
|
149 | 171 |
changed (if possible), followed by a colon and a brief summary.
|
... | ... | @@ -80,6 +80,7 @@ _PYPI_INDEX_URL = 'https://pypi.org/simple/' |
80 | 80 |
|
81 | 81 |
# Used only for finding pip command
|
82 | 82 |
_PYTHON_VERSIONS = [
|
83 |
+ 'python', # when running in a venv, we might not have the exact version
|
|
83 | 84 |
'python2.7',
|
84 | 85 |
'python3.0',
|
85 | 86 |
'python3.1',
|
... | ... | @@ -202,7 +202,7 @@ class ScriptElement(Element): |
202 | 202 |
sandbox.set_environment(self.get_environment())
|
203 | 203 |
|
204 | 204 |
# Tell the sandbox to mount the install root
|
205 |
- directories = {'/': False}
|
|
205 |
+ directories = {self.__install_root: False}
|
|
206 | 206 |
|
207 | 207 |
# Mark the artifact directories in the layout
|
208 | 208 |
for item in self.__layout:
|
... | ... | @@ -211,7 +211,10 @@ class ScriptElement(Element): |
211 | 211 |
directories[destination] = item['element'] or was_artifact
|
212 | 212 |
|
213 | 213 |
for directory, artifact in directories.items():
|
214 |
- sandbox.mark_directory(directory, artifact=artifact)
|
|
214 |
+ # Root does not need to be marked as it is always mounted
|
|
215 |
+ # with artifact (unless explicitly marked non-artifact)
|
|
216 |
+ if directory != '/':
|
|
217 |
+ sandbox.mark_directory(directory, artifact=artifact)
|
|
215 | 218 |
|
216 | 219 |
def stage(self, sandbox):
|
217 | 220 |
|
1 |
+kind: script
|
|
2 |
+ |
|
3 |
+depends:
|
|
4 |
+- filename: base.bst
|
|
5 |
+ type: build
|
|
6 |
+- filename: script/corruption-image.bst
|
|
7 |
+ type: build
|
|
8 |
+ |
|
9 |
+config:
|
|
10 |
+ commands:
|
|
11 |
+ - echo smashed >>/canary
|
1 |
+kind: compose
|
|
2 |
+ |
|
3 |
+depends:
|
|
4 |
+- filename: base.bst
|
|
5 |
+ type: build
|
|
6 |
+ |
|
7 |
+public:
|
|
8 |
+ bst:
|
|
9 |
+ split-rules:
|
|
10 |
+ remove:
|
|
11 |
+ - "/tmp/**"
|
|
12 |
+ - "/tmp"
|
1 |
+kind: filter
|
|
2 |
+ |
|
3 |
+depends:
|
|
4 |
+- filename: script/marked-tmpdir.bst
|
|
5 |
+ type: build
|
|
6 |
+ |
|
7 |
+config:
|
|
8 |
+ exclude:
|
|
9 |
+ - remove
|
|
10 |
+ include-orphans: True
|
|
11 |
+ |
|
12 |
+ |
1 |
+kind: script
|
|
2 |
+ |
|
3 |
+depends:
|
|
4 |
+- filename: script/no-tmpdir.bst
|
|
5 |
+ type: build
|
|
6 |
+ |
|
7 |
+config:
|
|
8 |
+ commands:
|
|
9 |
+ - |
|
|
10 |
+ mkdir -p /tmp/blah
|
... | ... | @@ -184,3 +184,41 @@ def test_regression_cache_corruption(cli, tmpdir, datafiles): |
184 | 184 |
|
185 | 185 |
with open(os.path.join(checkout_after, 'canary')) as f:
|
186 | 186 |
assert f.read() == 'alive\n'
|
187 |
+ |
|
188 |
+ |
|
189 |
+@pytest.mark.datafiles(DATA_DIR)
|
|
190 |
+def test_regression_tmpdir(cli, tmpdir, datafiles):
|
|
191 |
+ project = str(datafiles)
|
|
192 |
+ element_name = 'script/tmpdir.bst'
|
|
193 |
+ |
|
194 |
+ res = cli.run(project=project, args=['build', element_name])
|
|
195 |
+ assert res.exit_code == 0
|
|
196 |
+ |
|
197 |
+ |
|
198 |
+@pytest.mark.datafiles(DATA_DIR)
|
|
199 |
+def test_regression_cache_corruption_2(cli, tmpdir, datafiles):
|
|
200 |
+ project = str(datafiles)
|
|
201 |
+ checkout_original = os.path.join(cli.directory, 'checkout-original')
|
|
202 |
+ checkout_after = os.path.join(cli.directory, 'checkout-after')
|
|
203 |
+ element_name = 'script/corruption-2.bst'
|
|
204 |
+ canary_element_name = 'script/corruption-image.bst'
|
|
205 |
+ |
|
206 |
+ res = cli.run(project=project, args=['build', canary_element_name])
|
|
207 |
+ assert res.exit_code == 0
|
|
208 |
+ |
|
209 |
+ res = cli.run(project=project, args=['checkout', canary_element_name,
|
|
210 |
+ checkout_original])
|
|
211 |
+ assert res.exit_code == 0
|
|
212 |
+ |
|
213 |
+ with open(os.path.join(checkout_original, 'canary')) as f:
|
|
214 |
+ assert f.read() == 'alive\n'
|
|
215 |
+ |
|
216 |
+ res = cli.run(project=project, args=['build', element_name])
|
|
217 |
+ assert res.exit_code == 0
|
|
218 |
+ |
|
219 |
+ res = cli.run(project=project, args=['checkout', canary_element_name,
|
|
220 |
+ checkout_after])
|
|
221 |
+ assert res.exit_code == 0
|
|
222 |
+ |
|
223 |
+ with open(os.path.join(checkout_after, 'canary')) as f:
|
|
224 |
+ assert f.read() == 'alive\n'
|