Loading buildstream/_pipeline.py +17 −3 Original line number Diff line number Diff line Loading @@ -358,10 +358,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") ############################################################# Loading buildstream/plugins/sources/git.py +6 −0 Original line number Diff line number Diff line Loading @@ -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 {}" Loading tests/sources/git.py +42 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
buildstream/_pipeline.py +17 −3 Original line number Diff line number Diff line Loading @@ -358,10 +358,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") ############################################################# Loading
buildstream/plugins/sources/git.py +6 −0 Original line number Diff line number Diff line Loading @@ -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 {}" Loading
tests/sources/git.py +42 −0 Original line number Diff line number Diff line Loading @@ -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