Skip to content
Snippets Groups Projects
Commit 69c950c4 authored by William Salmon's avatar William Salmon
Browse files

Add warning to git track if track and ref are not present

This is to address #471 that
documented unhelpfull behavour when tracking git sources.
parent eabc3899
No related branches found
No related tags found
No related merge requests found
Pipeline #27023833 passed
......@@ -382,10 +382,24 @@ class Pipeline():
inconsistent.append(element)
if inconsistent:
detail = "Exact versions are missing for the following elements\n" + \
"Try tracking these elements first with `bst track`\n\n"
detail = "Exact versions are missing for the following elements:\n\n"
missingTrack = 0
for element in inconsistent:
detail += " " + element._get_full_name() + "\n"
detail += " " + element._get_full_name()
for source in element.sources():
if not source._get_consistency() and not source.get_ref():
if hasattr(source, 'tracking') and source.tracking is None:
detail += ": Source {} is missing ref and track. ".format(source._get_full_name()) + \
"Please specify a ref or branch/tag to track.."
missingTrack = 1
detail += "\n"
if missingTrack:
detail += "\nThen track these elements with `bst track`\n"
else:
detail += "\nTry tracking these elements first with `bst track`\n"
raise PipelineError("Inconsistent pipeline", detail=detail, reason="inconsistent-pipeline")
# cleanup()
......
......@@ -363,6 +363,12 @@ class GitSource(Source):
# If self.tracking is not specified it's not an error, just silently return
if not self.tracking:
# Is there a better way to check if a ref is given.
if self.mirror.ref is None:
detail = 'Without a tracking branch ref can not be updated. Please ' + \
'provide a ref or a track.'
raise SourceError("{}: No track or ref".format(self),
detail=detail, reason="track-attempt-no-track")
return None
with self.timed_activity("Tracking {} from {}"
......
......@@ -359,3 +359,45 @@ def test_submodule_track_ignore_inconsistent(cli, tmpdir, datafiles):
# Assert that we are just fine without it, and emit a warning to the user.
assert "Ignoring inconsistent submodule" in result.stderr
@pytest.mark.skipif(HAVE_GIT is False, reason="git is not available")
@pytest.mark.datafiles(os.path.join(DATA_DIR, 'template'))
def test_submodule_track_no_ref_or_track(cli, tmpdir, datafiles):
project = os.path.join(datafiles.dirname, datafiles.basename)
# Create the repo from 'repofiles' subdir
repo = create_repo('git', str(tmpdir))
ref = repo.create(os.path.join(project, 'repofiles'))
# Write out our test target
gitsource = repo.source_config(ref=None)
gitsource.pop('track')
element = {
'kind': 'import',
'sources': [
gitsource
]
}
_yaml.dump(element, os.path.join(project, 'target.bst'))
# Track will encounter an inconsistent submodule without any ref
result = cli.run(project=project, args=['track', 'target.bst'])
result.assert_main_error(ErrorDomain.STREAM, None)
result.assert_task_error(ErrorDomain.SOURCE, 'track-attempt-no-track')
# Assert that we are just fine without it, and emit a warning to the user.
assert "FAILURE git source at" in result.stderr
assert "Without a tracking branch ref can not be updated. Please " + \
"provide a ref or a track." in result.stderr
# Track will encounter an inconsistent submodule without any ref
result = cli.run(project=project, args=['build', 'target.bst'])
result.assert_main_error(ErrorDomain.PIPELINE, 'inconsistent-pipeline')
result.assert_task_error(None, None)
# Assert that we are just fine without it, and emit a warning to the user.
assert "Exact versions are missing for the following elements" in result.stderr
assert "is missing ref and track." in result.stderr
assert "Then track these elements with `bst track`" in result.stderr
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment