Add error message when running commands on directories
Issue #446
diff --git a/buildstream/_exceptions.py b/buildstream/_exceptions.py
index 3aadd52..3779632 100644
--- a/buildstream/_exceptions.py
+++ b/buildstream/_exceptions.py
@@ -197,6 +197,9 @@
# A project.conf file was missing
MISSING_PROJECT_CONF = 17
+ # Try to load a directory not a yaml file
+ LOADING_DIRECTORY = 18
+
# LoadError
#
diff --git a/buildstream/_yaml.py b/buildstream/_yaml.py
index bfd6586..0033628 100644
--- a/buildstream/_yaml.py
+++ b/buildstream/_yaml.py
@@ -184,6 +184,10 @@
except FileNotFoundError as e:
raise LoadError(LoadErrorReason.MISSING_FILE,
"Could not find file at {}".format(filename)) from e
+ except IsADirectoryError as e:
+ raise LoadError(LoadErrorReason.LOADING_DIRECTORY,
+ "{} is a directory. bst command is expecting a .bst file"
+ .format(filename)) from e
# Like load(), but doesnt require the data to be in a file
diff --git a/tests/loader/basics.py b/tests/loader/basics.py
index 008750f..3526697 100644
--- a/tests/loader/basics.py
+++ b/tests/loader/basics.py
@@ -84,3 +84,15 @@
element = loader.load()[0]
assert (exc.value.reason == LoadErrorReason.INVALID_DATA)
+
+
+@pytest.mark.datafiles(os.path.join(DATA_DIR, 'onefile'))
+def test_invalid_directory_load(datafiles):
+
+ basedir = os.path.join(datafiles.dirname, datafiles.basename)
+ loader = make_loader(basedir, ['elements/'])
+
+ with pytest.raises(LoadError) as exc:
+ element = loader.load()[0]
+
+ assert (exc.value.reason == LoadErrorReason.LOADING_DIRECTORY)