diff --git a/plugins/axiomcode/skills/axiomcode/scripts/axiomcode-path b/plugins/axiomcode/skills/axiomcode/scripts/axiomcode-path index 99210564..e719552e 100755 --- a/plugins/axiomcode/skills/axiomcode/scripts/axiomcode-path +++ b/plugins/axiomcode/skills/axiomcode/scripts/axiomcode-path @@ -997,6 +997,9 @@ class G: for r in rows: f.write('\t'.join(str(x) for x in r) + '\n') replace_file(tmp, p) def edges(self): + # exported here, not only by the verbs that call export(): `context` read edge.facts straight after `index` + # returned, while the build's warm-up was still writing it in the background, and died on a missing file + self.export() return [tuple(l.rstrip('\n').split('\t')) for l in open(os.path.join(self.facts, 'edge.facts'))] + list(self.EXTRA) def add_outside_call_edges(self): """THE HOPS NO CALL SITE EXPRESSES, as hops of this query (#1469). A gRPC client reaches the handler that serves diff --git a/tests/run.py b/tests/run.py index 863a7c06..772ba182 100755 --- a/tests/run.py +++ b/tests/run.py @@ -97,7 +97,9 @@ def print(*a, flush=False, **k): builtins.print(*a, file=buf, **k) if bad: fail += 1; print(f"FAIL {l}/{name}: {ch['why']}", flush=True) for b in bad: print(f" missing/unwanted: {b}") - print(' ' + '\n '.join(text.strip().split('\n')[:14])) + lines = text.strip().split('\n') + # a traceback's last line is the error itself: keep the head (what it answered) and the tail (why it stopped) + print(' ' + '\n '.join(lines[:14] + (['…'] + lines[-12:] if len(lines) > 26 else lines[14:]))) elif verbose: print(f"ok {l}/{name}: {ch['why']}") if not keep: shutil.rmtree(os.path.join(path, '.axiomcode'), ignore_errors=True) return buf.getvalue(), tot, fail, pend