Browse Source

ccanlint: remove wart from info options.

Make info_exists() call add_info_options() directly, rather than detecting
that we've found _info inside the loop of tests.

It means targeting is now a global, which is a bit sucky.
Rusty Russell 14 years ago
parent
commit
64bd9ff9bc
3 changed files with 7 additions and 9 deletions
  1. 3 9
      tools/ccanlint/ccanlint.c
  2. 3 0
      tools/ccanlint/ccanlint.h
  3. 1 0
      tools/ccanlint/tests/info_exists.c

+ 3 - 9
tools/ccanlint/ccanlint.c

@@ -41,6 +41,7 @@ TLIST_TYPE(ccanlint, struct ccanlint);
 int verbose = 0;
 static struct tlist_ccanlint tests = TLIST_INIT(tests);
 bool safe_mode = false;
+static bool targeting = false;
 static struct btree *cmdline_exclude;
 static struct btree *info_exclude;
 static unsigned int timeout;
@@ -421,7 +422,7 @@ static void add_options(struct ccanlint *test, char **options,
 	memcpy(&test->options[num], options, (num_options + 1)*sizeof(char *));
 }
 
-static void add_info_options(struct ccan_file *info, bool mark_fails)
+void add_info_options(struct ccan_file *info)
 {
 	struct doc_section *d;
 	unsigned int i;
@@ -456,7 +457,7 @@ static void add_info_options(struct ccan_file *info, bool mark_fails)
 
 			/* Known failure? */
 			if (strcasecmp(words[1], "FAIL") == 0) {
-				if (mark_fails)
+				if (!targeting)
 					btree_insert(info_exclude, words[0]);
 			} else {
 				if (!test->takes_options)
@@ -698,7 +699,6 @@ int main(int argc, char *argv[])
 
 	for (i = 1; i < argc; i++) {
 		unsigned int score, total_score;
-		bool added_info_options = false;
 
 		dir = argv[i];
 
@@ -748,12 +748,6 @@ int main(int argc, char *argv[])
 					goto next;
 				}
 			}
-
-			/* --target overrides known FAIL from _info */
-			if (!added_info_options && m->info_file) {
-				add_info_options(m->info_file, !target);
-				added_info_options = true;
-			}
 		}
 
 		printf("%sTotal score: %u/%u\n", prefix, score, total_score);

+ 3 - 0
tools/ccanlint/ccanlint.h

@@ -264,6 +264,9 @@ struct dependent {
 /* Is this test excluded (cmdline or _info). */
 bool is_excluded(const char *name);
 
+/* Called to add options from _info, once it's located. */
+void add_info_options(struct ccan_file *info);
+
 /* Are we happy to compile stuff, or just non-intrusive tests? */
 extern bool safe_mode;
 

+ 1 - 0
tools/ccanlint/tests/info_exists.c

@@ -20,6 +20,7 @@ static void check_has_info(struct manifest *m,
 	if (m->info_file) {
 		score->pass = true;
 		score->score = score->total;
+		add_info_options(m->info_file);
 	} else {
 		score->error = talloc_strdup(score,
 	"You have no _info file.\n\n"