Implement package set validation.
1.1 --- a/razor.c Wed Sep 12 06:52:26 2007 -0400
1.2 +++ b/razor.c Wed Sep 12 07:31:18 2007 -0400
1.3 @@ -1048,6 +1048,54 @@
1.4 }
1.5
1.6 void
1.7 +razor_set_validate(struct razor_set *set, struct array *unsatisfied)
1.8 +{
1.9 + struct razor_property *r, *p, *rend, *pend;
1.10 + unsigned long *u;
1.11 + char *pool;
1.12 +
1.13 + r = set->requires.data;
1.14 + p = set->provides.data;
1.15 + rend = set->requires.data + set->requires.size;
1.16 + pend = set->provides.data + set->provides.size;
1.17 + pool = set->string_pool.data;
1.18 +
1.19 + while (r < rend) {
1.20 + while (p < pend && strcmp(&pool[r->name], &pool[p->name]) > 0)
1.21 + p++;
1.22 + if (p == pend || strcmp(&pool[r->name], &pool[p->name]) != 0) {
1.23 + u = array_add(unsatisfied, sizeof *u);
1.24 + *u = r - (struct razor_property *) set->requires.data;
1.25 + }
1.26 + r++;
1.27 + }
1.28 +}
1.29 +
1.30 +void
1.31 +razor_set_list_unsatisfied(struct razor_set *set)
1.32 +{
1.33 + struct array unsatisfied;
1.34 + struct razor_property *requires, *r;
1.35 + unsigned long *u, *end;
1.36 + char *pool;
1.37 +
1.38 + array_init(&unsatisfied);
1.39 + razor_set_validate(set, &unsatisfied);
1.40 +
1.41 + end = unsatisfied.data + unsatisfied.size;
1.42 + requires = set->requires.data;
1.43 + pool = set->string_pool.data;
1.44 +
1.45 + for (u = unsatisfied.data; u < end; u++) {
1.46 + r = requires + *u;
1.47 + printf("%s %s not satisfied\n",
1.48 + &pool[r->name], &pool[r->version]);
1.49 + }
1.50 +
1.51 + array_release(&unsatisfied);
1.52 +}
1.53 +
1.54 +void
1.55 razor_set_info(struct razor_set *set)
1.56 {
1.57 unsigned int offset, size;
1.58 @@ -1172,6 +1220,12 @@
1.59 razor_set_write(set, rawhide_repo_filename);
1.60 razor_set_destroy(set);
1.61 printf("wrote %s\n", rawhide_repo_filename);
1.62 + } else if (strcmp(argv[1], "validate") == 0) {
1.63 + set = razor_set_open(repo_filename);
1.64 + if (set == NULL)
1.65 + return 1;
1.66 + razor_set_list_unsatisfied(set);
1.67 + razor_set_destroy(set);
1.68 } else {
1.69 usage();
1.70 }