aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEli Schwartz <eschwartz@archlinux.org>2023-07-09 03:12:59 -0400
committerEli Schwartz <eschwartz@archlinux.org>2023-07-10 20:08:01 -0400
commit9d446d80db5b11b947521cd4e4a21231ddc5154e (patch)
treeadc3981a119bd6255d20a637038d5a3ed4efff8a
parent9fd3753f8a582a3e29903f105727047b2ced5729 (diff)
downloadmeson-9d446d80db5b11b947521cd4e4a21231ddc5154e.zip
meson-9d446d80db5b11b947521cd4e4a21231ddc5154e.tar.gz
meson-9d446d80db5b11b947521cd4e4a21231ddc5154e.tar.bz2
mtest: try a bit harder to avoid weird non-parseable output at startup
In commit 628effb3698e85e403351d2705d576cf4ee8c50c we started verifying the build.ninja file was up to date before even `--list`ing tests, because we could end up with incorrect information. This meant that ninja always runs at startup, and typically returns "no work to do", which ended up listed as "one of" the tests. Instead of unconditionally running ninja attached to the console, first check it in dry-run mode with stdout intercepted, to see if ninja considers itself up to date. If it is, continue. Only if an actual refresh is needed, do we run it while attached to the console. In the garden path, this avoids useless information. In cases where we'd already print a full meson reconfigure log, we continue to do so.
-rw-r--r--mesonbuild/mtest.py8
1 files changed, 5 insertions, 3 deletions
diff --git a/mesonbuild/mtest.py b/mesonbuild/mtest.py
index 63041bd..ed3495a 100644
--- a/mesonbuild/mtest.py
+++ b/mesonbuild/mtest.py
@@ -1606,9 +1606,11 @@ class TestHarness:
# happen before rebuild_deps(), because we need the correct list of
# tests and their dependencies to compute
if not self.options.no_rebuild:
- ret = subprocess.run(self.ninja + ['build.ninja']).returncode
- if ret != 0:
- raise TestException(f'Could not configure {self.options.wd!r}')
+ teststdo = subprocess.run(self.ninja + ['-n', 'build.ninja'], capture_output=True).stdout
+ if b'ninja: no work to do.' not in teststdo and b'samu: nothing to do' not in teststdo:
+ ret = subprocess.run(self.ninja + ['build.ninja'])
+ if ret.returncode != 0:
+ raise TestException(f'Could not configure {self.options.wd!r}')
self.build_data = build.load(os.getcwd())
if not self.options.setup: