stdlib: Implement error() function.
authorRichard W.M. Jones <rjones@redhat.com>
Sun, 12 Jan 2020 20:38:51 +0000 (20:38 +0000)
committerRichard W.M. Jones <rjones@redhat.com>
Sun, 12 Jan 2020 20:38:51 +0000 (20:38 +0000)
Currently not very useful because we lack conditionals, but
it could be useful if those were implemented.

docs/Goalfile.pod
stdlib/prelude.gl
tests/10-function-error.gl [new file with mode: 0644]
tests/10-function-error.sh [new file with mode: 0755]

index 46fbe1d..85d19ba 100644 (file)
@@ -30,6 +30,14 @@ For example:
 
 Returns the directory part of the path.
 
+=head3 error (msg)
+
+For example:
+
+ error ("this should not happen")
+
+This prints the error message and causes goals to exit.
+
 =head3 extension (filename)
 
 For example:
index 5d072ea..7dc3b73 100644 (file)
@@ -40,6 +40,11 @@ tactic *exists (filename) = @{
 #----------------------------------------------------------------------
 # Basic functions.
 
+function error (msg) = @{
+    echo %msg >&2
+    exit 1
+}
+
 # Wrap list of strings in a call or tactic.
 pure function wrap (wrapper, xs) = @{
     echo '['
diff --git a/tests/10-function-error.gl b/tests/10-function-error.gl
new file mode 100644 (file)
index 0000000..7729dcb
--- /dev/null
@@ -0,0 +1,19 @@
+# Goals test.
+# Copyright (C) 2020 Richard W.M. Jones
+# Copyright (C) 2020 Red Hat Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+goal all = : error ("uh oh")
diff --git a/tests/10-function-error.sh b/tests/10-function-error.sh
new file mode 100755 (executable)
index 0000000..5f315a3
--- /dev/null
@@ -0,0 +1,26 @@
+#!/usr/bin/env bash
+# Goals test.
+# Copyright (C) 2020 Richard W.M. Jones
+# Copyright (C) 2020 Red Hat Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+# This is expected to return an error, and as long as it does this
+# script is successful.
+if goals -f 10-function-error.gl; then
+    exit 1
+else
+    exit 0
+fi