From 5f55069b5bd01f2d5c157fa360fda400da6ba01f Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Tue, 14 Mar 2017 21:22:26 +0300 Subject: Print sub-entries of non-empty testscript directory registered for cleanup --- build2/test/script/runner.cxx | 49 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 8 deletions(-) (limited to 'build2/test') diff --git a/build2/test/script/runner.cxx b/build2/test/script/runner.cxx index bcaca44..c7b8dab 100644 --- a/build2/test/script/runner.cxx +++ b/build2/test/script/runner.cxx @@ -112,7 +112,7 @@ namespace build2 if (buf[n - 1] == '\n') buf[n - 1] = '\0'; - d << "\n" << buf; + d << '\n' << buf; } } } @@ -123,6 +123,32 @@ namespace build2 } } + // Print first 10 directory sub-entries to the diag record. The directory + // must exist. + // + static void + print_dir (diag_record& d, const dir_path& p, const location& ll) + { + try + { + size_t n (0); + for (const dir_entry& de: dir_iterator (p)) + { + if (n++ < 10) + d << '\n' << (de.ltype () == entry_type::directory + ? path_cast (de.path ()) + : de.path ()); + } + + if (n > 10) + d << "\nand " << n - 10 << " more file(s)"; + } + catch (const system_error& e) + { + fail (ll) << "unable to iterate over " << p << ": " << e; + } + } + // Save a string to the file. Fail if exception is thrown by underlying // operations. // @@ -745,9 +771,12 @@ namespace build2 if (r != rmdir_status::not_empty) return true; - fail (ll) << "registered for cleanup directory " << sd - << " is not empty" << - info << "wildcard: '" << p << "'"; + diag_record dr (fail (ll)); + dr << "registered for cleanup directory " << sd + << " is not empty"; + + print_dir (dr, sd, ll); + dr << info << "wildcard: '" << p << "'"; } return true; @@ -791,10 +820,14 @@ namespace build2 (r == rmdir_status::not_exist && t == cleanup_type::maybe)) continue; - fail (ll) << "registered for cleanup directory " << d - << (r == rmdir_status::not_empty - ? " is not empty" - : " does not exist"); + diag_record dr (fail (ll)); + dr << "registered for cleanup directory " << d + << (r == rmdir_status::not_empty + ? " is not empty" + : " does not exist"); + + if (r == rmdir_status::not_empty) + print_dir (dr, d, ll); } // Remove the file if exists. Fail otherwise. Removal of -- cgit v1.1