summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Silverstone <dsilvers+gitlab@digital-scurf.org>2021-06-18 20:29:25 +0000
committerDaniel Silverstone <dsilvers+gitlab@digital-scurf.org>2021-06-18 20:29:25 +0000
commit0bd23ee772aa12dfbcccba29fe3ebb226be639d1 (patch)
tree575a00ec08079bde5411c79debb92ae4ab6d09f8
parent6aeacebbf5f5e03257deb87b63048e27906dbe64 (diff)
parent4ce46e7ace32b521b3f503ca9b533964d2ad57a2 (diff)
downloadsubplot-0bd23ee772aa12dfbcccba29fe3ebb226be639d1.tar.gz
Merge branch 'check-logs' into 'main'
test: have ./check tail the test.py log file on failure See merge request subplot/subplot!181
-rwxr-xr-xcheck24
-rw-r--r--reference.md21
2 files changed, 40 insertions, 5 deletions
diff --git a/check b/check
index fdcc46a..c0f26fb 100755
--- a/check
+++ b/check
@@ -36,7 +36,7 @@ class Runcmd:
elif self._progress:
self._write_msg(title)
- def _runcmd_unchecked(self, argv, **kwargs):
+ def runcmd_unchecked(self, argv, **kwargs):
"""Run a command (generic version)
Return a subcommand.CompletedProcess. It's the caller's duty
@@ -70,7 +70,7 @@ class Runcmd:
a subprocess.CompletedProcess.
"""
- p = self._runcmd_unchecked(argv, **kwargs)
+ p = self.runcmd_unchecked(argv, **kwargs)
if p.returncode != 0:
sys.stdout.write((p.stdout or b"").decode("UTF-8"))
sys.stderr.write((p.stderr or b"").decode("UTF-8"))
@@ -85,7 +85,7 @@ class Runcmd:
def got_command(self, name):
"""Is a command of a given name available?"""
- p = self._runcmd_unchecked(["which", name], stdout=DEVNULL)
+ p = self.runcmd_unchecked(["which", name], stdout=DEVNULL)
return p.returncode == 0
def cargo(self, args, **kwargs):
@@ -222,7 +222,11 @@ def check_subplots(r):
os.remove(test_log)
r.codegen(md, test_py, cwd=dirname)
- r.runcmd(["python3", test_py, "--log", test_log], cwd=dirname)
+ p = r.runcmd_unchecked(["python3", test_py, "--log", test_log], cwd=dirname)
+ if p.returncode != 0:
+ if os.path.exists(test_log):
+ tail(test_log)
+ sys.exit(1)
elif template == "bash":
test_sh = os.path.join(output, f"test-{base}.sh")
r.codegen(md, test_sh, cwd=dirname)
@@ -237,6 +241,18 @@ def check_subplots(r):
r.docgen(md, base + ".html", cwd=dirname)
+def tail(filename, numlines=100):
+ lines = []
+ with open(filename) as f:
+ for line in f.readlines():
+ lines.append(line)
+ lines = lines[-numlines:]
+
+ print(f"last {len(lines)} of {filename}:")
+ for line in lines:
+ print(f" {line.rstrip()}")
+
+
def check_subplotlib(r):
"""Run all checks for subplotlib"""
r.title("checking subplotlib code")
diff --git a/reference.md b/reference.md
index 09ac659..48e2295 100644
--- a/reference.md
+++ b/reference.md
@@ -1,3 +1,4 @@
+
# Introduction
This document describes how we guard against accidental breaking
@@ -40,7 +41,25 @@ then command is successful
#!/bin/bash
set -euo pipefail
-python3 src/test-inner.py --log test-inner.log --env "PATH=$PATH" --env SUBPLOT_DIR=/
+
+N=100
+
+if python3 src/test-inner.py --log test-inner.log --env "PATH=$PATH" --env SUBPLOT_DIR=/
+then
+ exit=0
+else
+ exit="$?"
+fi
+
+if [ "$exit" != 0 ]
+then
+ # Failure. Show end of inner log file.
+
+ echo "last $N lines of test-inner.log:"
+ tail "-n$N" test-inner.log | sed 's/^/ /'
+fi
+
+exit "$exit"
~~~