diff options
author | Tristan Van Berkom <tristan.vanberkom@codethink.co.uk> | 2018-04-08 21:42:27 +0900 |
---|---|---|
committer | Tristan Van Berkom <tristan.vanberkom@codethink.co.uk> | 2018-04-08 21:57:01 +0900 |
commit | 96af6dd5ae9743c7405cbfd99c929701c023f3e5 (patch) | |
tree | aef3a4e56a52196576502cfa04e87a31216d74f2 | |
parent | 337b7a31c244241f722a5ff709d23df75a021eb9 (diff) | |
download | buildstream-96af6dd5ae9743c7405cbfd99c929701c023f3e5.tar.gz |
More specific exceptions when a project.conf is missing.
Since we want to react and start an interactive session when the
project.conf is missing, we need a more specific error to catch.
-rw-r--r-- | buildstream/_exceptions.py | 12 | ||||
-rw-r--r-- | buildstream/_loader.py | 4 | ||||
-rw-r--r-- | buildstream/_project.py | 7 | ||||
-rw-r--r-- | tests/format/project.py | 2 |
4 files changed, 18 insertions, 7 deletions
diff --git a/buildstream/_exceptions.py b/buildstream/_exceptions.py index fc44f4989..d8687104f 100644 --- a/buildstream/_exceptions.py +++ b/buildstream/_exceptions.py @@ -182,14 +182,20 @@ class LoadErrorReason(Enum): # Conflicting junctions in subprojects CONFLICTING_JUNCTION = 12 + # Failure to load a project from a specified junction + INVALID_JUNCTION = 13 + # Subproject needs to be fetched - SUBPROJECT_FETCH_NEEDED = 13 + SUBPROJECT_FETCH_NEEDED = 14 # Subproject has no ref - SUBPROJECT_INCONSISTENT = 14 + SUBPROJECT_INCONSISTENT = 15 # An invalid symbol name was encountered - INVALID_SYMBOL_NAME = 15 + INVALID_SYMBOL_NAME = 16 + + # A project.conf file was missing + MISSING_PROJECT_CONF = 17 # LoadError diff --git a/buildstream/_loader.py b/buildstream/_loader.py index 44f38e3f1..2fc7d8f0c 100644 --- a/buildstream/_loader.py +++ b/buildstream/_loader.py @@ -384,8 +384,8 @@ class Loader(): try: project = Project(project_dir, self.context, junction=element) except LoadError as e: - if e.reason == LoadErrorReason.MISSING_FILE: - raise LoadError(reason=e.reason, + if e.reason == LoadErrorReason.MISSING_PROJECT_CONF: + raise LoadError(reason=LoadErrorReason.INVALID_JUNCTION, message="Could not find the project.conf file for {}. " "Expecting a project at path '{}' within {}" .format(element, element.path or '.', source)) from e diff --git a/buildstream/_project.py b/buildstream/_project.py index c7f535e23..e71bdf0f1 100644 --- a/buildstream/_project.py +++ b/buildstream/_project.py @@ -214,7 +214,12 @@ class Project(): config = _yaml.load(_site.default_project_config) # Load project local config and override the builtin - project_conf = _yaml.load(projectfile) + try: + project_conf = _yaml.load(projectfile) + except LoadError as e: + # Raise a more specific error here + raise LoadError(LoadErrorReason.MISSING_PROJECT_CONF, str(e)) + _yaml.composite(config, project_conf) # Element and Source type configurations will be composited later onto diff --git a/tests/format/project.py b/tests/format/project.py index cfa02bd52..b8e411351 100644 --- a/tests/format/project.py +++ b/tests/format/project.py @@ -16,7 +16,7 @@ DATA_DIR = os.path.join( def test_missing_project_conf(cli, datafiles): project = os.path.join(datafiles.dirname, datafiles.basename) result = cli.run(project=project, args=['workspace', 'list']) - result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason.MISSING_FILE) + result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason.MISSING_PROJECT_CONF) @pytest.mark.datafiles(os.path.join(DATA_DIR)) |