]> git.ozlabs.org Git - ccan/blobdiff - tools/ccanlint/ccanlint.c
ccanlint: always print \n at end of error message.
[ccan] / tools / ccanlint / ccanlint.c
index 7515a7c6f7af15eebe184699c3e731a7ce37c555..1c7ee389dbc75728d35091e23a7d0c5a4463a469 100644 (file)
@@ -142,32 +142,16 @@ static bool run_test(struct ccanlint *i,
        if ((!score->pass && !quiet)
            || (score->score < score->total && verbose)
            || verbose > 1) {
-               printf("%s: %s", i->name, score->pass ? "PASS" : "FAIL");
+               printf("%s (%s): %s", i->name, i->key, score->pass ? "PASS" : "FAIL");
                if (score->total > 1)
                        printf(" (+%u/%u)", score->score, score->total);
                printf("\n");
        }
 
        if ((!quiet && !score->pass) || verbose) {
-               struct file_error *f;
-               unsigned int lines = 1;
-
-               if (score->error)
-                       printf("%s%s\n", score->error,
-                              list_empty(&score->per_file_errors) ? "" : ":");
-
-               list_for_each(&score->per_file_errors, f, list) {
-                       if (f->line)
-                               printf("%s:%u:%s\n",
-                                      f->file->fullname, f->line, f->error);
-                       else if (f->file)
-                               printf("%s:%s\n", f->file->fullname, f->error);
-                       else
-                               printf("%s\n", f->error);
-                       if (verbose < 2 && ++lines > 5) {
-                               printf("... more (use -vv to see them all)\n");
-                               break;
-                       }
+               if (score->error) {
+                       printf("%s%s", score->error,
+                              strends(score->error, "\n") ? "" : "\n");
                }
                if (!quiet && !score->pass && i->handle)
                        i->handle(m, score);
@@ -256,7 +240,7 @@ static void init_tests(void)
        /* Resolve dependencies. */
        foreach_ptr(list, &compulsory_tests, &normal_tests) {
                list_for_each(list, c, list) {
-                       char **deps = strsplit(NULL, c->needs, " ", NULL);
+                       char **deps = strsplit(NULL, c->needs, " ");
                        unsigned int i;
 
                        for (i = 0; deps[i]; i++) {
@@ -310,12 +294,31 @@ static void init_tests(void)
        }
 }
 
+static int show_tmpdir(char *dir)
+{
+       printf("You can find ccanlint working files in '%s'\n", dir);
+       return 0;
+}
+
 static char *keep_test(const char *testname, void *unused)
 {
-       struct ccanlint *i = find_test(testname);
-       if (!i)
-               errx(1, "No test %s to --keep", testname);
-       i->keep_results = true;
+       struct ccanlint *i;
+
+       if (streq(testname, "all")) {
+               struct list_head *list;
+               foreach_ptr(list, &compulsory_tests, &normal_tests) {
+                       list_for_each(list, i, list)
+                               i->keep_results = true;
+               }
+       } else {
+               i = find_test(testname);
+               if (!i)
+                       errx(1, "No test %s to --keep", testname);
+               i->keep_results = true;
+       }
+
+       /* Don't automatically destroy temporary dir. */
+       talloc_set_destructor(temp_dir(NULL), show_tmpdir);
        return NULL;
 }
 
@@ -409,8 +412,8 @@ static void add_info_options(struct ccan_file *info, bool mark_fails)
                        continue;
 
                for (i = 0; i < d->num_lines; i++) {
-                       char **words = collapse(strsplit(d, d->lines[i], " \t",
-                                                        NULL), NULL);
+                       char **words = collapse(strsplit(d, d->lines[i], " \t"),
+                                               NULL);
                        if (!words[0])
                                continue;
 
@@ -495,7 +498,8 @@ int main(int argc, char *argv[])
        opt_register_noarg("--test-dep-graph", test_dependency_graph, NULL,
                         "print dependency graph of tests in Graphviz .dot format");
        opt_register_arg("-k|--keep <testname>", keep_test, NULL, NULL,
-                          "keep results of <testname> (can be used multiple times)");
+                        "keep results of <testname>"
+                        " (can be used multiple times, or 'all')");
        opt_register_noarg("--summary|-s", opt_set_bool, &summary,
                           "simply give one line summary");
        opt_register_noarg("--verbose|-v", opt_inc_intval, &verbose,
@@ -513,10 +517,16 @@ int main(int argc, char *argv[])
                           " of CCAN modules.",
                           "This usage message");
 
+       /* We move into temporary directory, so gcov dumps its files there. */
+       if (chdir(temp_dir(talloc_autofree_context())) != 0)
+               err(1, "Error changing to %s temporary dir", temp_dir(NULL));
+
        opt_parse(&argc, argv, opt_log_stderr_exit);
 
        if (dir[0] != '/')
                dir = talloc_asprintf_append(NULL, "%s/%s", base_dir, dir);
+       while (strends(dir, "/"))
+               dir[strlen(dir)-1] = '\0';
        if (dir != base_dir)
                prefix = talloc_append_string(talloc_basename(NULL, dir), ": ");
        if (verbose >= 3)
@@ -524,10 +534,6 @@ int main(int argc, char *argv[])
        if (verbose >= 4)
                tools_verbose = true;
 
-       /* We move into temporary directory, so gcov dumps its files there. */
-       if (chdir(temp_dir(talloc_autofree_context())) != 0)
-               err(1, "Error changing to %s temporary dir", temp_dir(NULL));
-
        m = get_manifest(talloc_autofree_context(), dir);
 
        /* Create a symlink from temp dir back to src dir's test directory. */