Will Salmon pushed to branch willsalmon/trackWarning at BuildStream / buildstream
Commits:
-
ebf992c7
by William Salmon at 2018-08-01T15:46:52Z
3 changed files:
Changes:
... | ... | @@ -382,10 +382,23 @@ class Pipeline(): |
382 | 382 |
inconsistent.append(element)
|
383 | 383 |
|
384 | 384 |
if inconsistent:
|
385 |
- detail = "Exact versions are missing for the following elements\n" + \
|
|
386 |
- "Try tracking these elements first with `bst track`\n\n"
|
|
385 |
+ detail = "Exact versions are missing for the following elements:\n\n"
|
|
386 |
+ |
|
387 |
+ missingTrack = 0
|
|
387 | 388 |
for element in inconsistent:
|
388 |
- detail += " " + element._get_full_name() + "\n"
|
|
389 |
+ detail += " " + element._get_full_name()
|
|
390 |
+ for source in element.sources():
|
|
391 |
+ if not source._get_consistency() and not source.get_ref():
|
|
392 |
+ if hasattr(source, 'tracking') and source.tracking is None:
|
|
393 |
+ detail += ": Source {} is missing ref and track. Please specify a ref or branch/tag to track..".format(source._get_full_name())
|
|
394 |
+ missingTrack = 1
|
|
395 |
+
|
|
396 |
+ detail += "\n"
|
|
397 |
+
|
|
398 |
+ if missingTrack:
|
|
399 |
+ detail += "\nThen tracking these elements with `bst track`\n"
|
|
400 |
+ else:
|
|
401 |
+ detail += "\nTry tracking these elements first with `bst track`\n"
|
|
389 | 402 |
raise PipelineError("Inconsistent pipeline", detail=detail, reason="inconsistent-pipeline")
|
390 | 403 |
|
391 | 404 |
# cleanup()
|
... | ... | @@ -363,6 +363,12 @@ class GitSource(Source): |
363 | 363 |
|
364 | 364 |
# If self.tracking is not specified it's not an error, just silently return
|
365 | 365 |
if not self.tracking:
|
366 |
+ # Is there a better way to check if a ref is given.
|
|
367 |
+ if self.mirror.ref is None:
|
|
368 |
+ detail = 'Without a tracking branch ref can not be updated. Please ' + \
|
|
369 |
+ 'provide a ref or a track.'
|
|
370 |
+ raise SourceError("{}: No track or ref".format(self),
|
|
371 |
+ detail=detail, reason="track-attempt-no-track")
|
|
366 | 372 |
return None
|
367 | 373 |
|
368 | 374 |
with self.timed_activity("Tracking {} from {}"
|
... | ... | @@ -359,3 +359,44 @@ def test_submodule_track_ignore_inconsistent(cli, tmpdir, datafiles): |
359 | 359 |
|
360 | 360 |
# Assert that we are just fine without it, and emit a warning to the user.
|
361 | 361 |
assert "Ignoring inconsistent submodule" in result.stderr
|
362 |
+ |
|
363 |
+ |
|
364 |
+@pytest.mark.skipif(HAVE_GIT is False, reason="git is not available")
|
|
365 |
+@pytest.mark.datafiles(os.path.join(DATA_DIR, 'template'))
|
|
366 |
+def test_submodule_track_no_ref_or_track(cli, tmpdir, datafiles):
|
|
367 |
+ project = os.path.join(datafiles.dirname, datafiles.basename)
|
|
368 |
+ |
|
369 |
+ # Create the repo from 'repofiles' subdir
|
|
370 |
+ repo = create_repo('git', str(tmpdir))
|
|
371 |
+ ref = repo.create(os.path.join(project, 'repofiles'))
|
|
372 |
+ |
|
373 |
+ # Write out our test target
|
|
374 |
+ gitsource = repo.source_config(ref=None)
|
|
375 |
+ gitsource.pop('track')
|
|
376 |
+ element = {
|
|
377 |
+ 'kind': 'import',
|
|
378 |
+ 'sources': [
|
|
379 |
+ gitsource
|
|
380 |
+ ]
|
|
381 |
+ }
|
|
382 |
+ |
|
383 |
+ _yaml.dump(element, os.path.join(project, 'target.bst'))
|
|
384 |
+ |
|
385 |
+ # Track will encounter an inconsistent submodule without any ref
|
|
386 |
+ result = cli.run(project=project, args=['track', 'target.bst'])
|
|
387 |
+ result.assert_main_error(ErrorDomain.STREAM, None)
|
|
388 |
+ result.assert_task_error(ErrorDomain.SOURCE, 'track-attempt-no-track')
|
|
389 |
+ |
|
390 |
+ # Assert that we are just fine without it, and emit a warning to the user.
|
|
391 |
+ assert "FAILURE git source at" in result.stderr
|
|
392 |
+ assert "Without a tracking branch ref can not be updated. Please " + \
|
|
393 |
+ "provide a ref or a track." in result.stderr
|
|
394 |
+ |
|
395 |
+ # Track will encounter an inconsistent submodule without any ref
|
|
396 |
+ result = cli.run(project=project, args=['build', 'target.bst'])
|
|
397 |
+ result.assert_main_error(ErrorDomain.PIPELINE, 'inconsistent-pipeline')
|
|
398 |
+ result.assert_task_error(None, None)
|
|
399 |
+ |
|
400 |
+ # Assert that we are just fine without it, and emit a warning to the user.
|
|
401 |
+ assert "Exact versions are missing for the following elements" in result.stderr
|
|
402 |
+ assert "is missing ref and track." in result.stderr
|