From e9d8020e0300f586bef1ef27bfff3593ac1317c2 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Fri, 27 Aug 2010 13:44:49 +0930 Subject: [PATCH] ccanlint: clean up code which outputs results, handle partial failure. --- tools/ccanlint/ccanlint.c | 60 ++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 32 deletions(-) diff --git a/tools/ccanlint/ccanlint.c b/tools/ccanlint/ccanlint.c index b7aaef1c..3555ad2a 100644 --- a/tools/ccanlint/ccanlint.c +++ b/tools/ccanlint/ccanlint.c @@ -106,6 +106,7 @@ static bool run_test(struct ccanlint *i, unsigned int this_score, timeleft; const struct dependent *d; const char *skip; + bool failed; //one less test to run through list_for_each(&i->dependencies, d, node) @@ -137,52 +138,47 @@ static bool run_test(struct ccanlint *i, skip = "timeout"; goto skip; } - if (!result) { - if (verbose) { - printf(" %s: OK", i->name); - if (i->total_score) - printf(" (+%u/%u)", - i->total_score, i->total_score); - printf("\n"); - } - if (i->total_score) { - *score += i->total_score; - *total_score += i->total_score; - } - - list_del(&i->list); - list_add_tail(&finished_tests, &i->list); - return true; - } - if (i->score) + if (!result) + this_score = i->total_score ? i->total_score : 1; + else if (i->score) this_score = i->score(m, result); else this_score = 0; - list_del(&i->list); - list_add_tail(&finished_tests, &i->list); + failed = (this_score == 0); - *total_score += i->total_score; - *score += this_score; if (verbose) { - printf(" %s: FAIL (+%u/%u)\n", - i->name, this_score, i->total_score); + printf(" %s: %s", i->name, failed ? "FAIL" : "OK"); + if (i->total_score) + printf(" (+%u/%u)", + this_score, i->total_score); + printf("\n"); } - if (!quiet) { - printf("%s\n", i->describe(m, result)); + if (!quiet && result) { + if (i->describe && (failed || verbose)) + printf(" %s\n", i->describe(m, result)); if (i->handle) i->handle(m, result); } - /* Skip any tests which depend on this one. */ - list_for_each(&i->dependencies, d, node) { - d->dependent->skip = true; - d->dependent->skip_fail = true; + if (i->total_score) { + *score += this_score; + *total_score += i->total_score; } - return false; + list_del(&i->list); + list_add_tail(&finished_tests, &i->list); + + if (failed) { + /* Skip any tests which depend on this one. */ + list_for_each(&i->dependencies, d, node) { + d->dependent->skip = true; + d->dependent->skip_fail = true; + } + } + return !failed; } static void register_test(struct list_head *h, struct ccanlint *test, ...) @@ -344,7 +340,7 @@ int main(int argc, char *argv[]) exclude = btree_new(btree_strcmp); /* I'd love to use long options, but that's not standard. */ - /* FIXME: getopt_long ccan package? */ + /* FIXME: popt ccan package? */ while ((c = getopt(argc, argv, "sd:vnlx:t:k:")) != -1) { switch (c) { case 'd': -- 2.39.2