From 590e5656ecbf11c1b30c4f2967d8150cf5a98e47 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Kristian=20H=C3=B8gsberg?= Date: Wed, 12 Sep 2007 06:53:36 -0400 Subject: [PATCH] Implement package set validation. --- razor.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 54 insertions(+), 0 deletions(-) diff --git a/razor.c b/razor.c index c3be62f..43cfb7f 100644 --- a/razor.c +++ b/razor.c @@ -1048,6 +1048,54 @@ razor_set_list_property_packages(struct razor_set *set, } void +razor_set_validate(struct razor_set *set, struct array *unsatisfied) +{ + struct razor_property *r, *p, *rend, *pend; + unsigned long *u; + char *pool; + + r = set->requires.data; + p = set->provides.data; + rend = set->requires.data + set->requires.size; + pend = set->provides.data + set->provides.size; + pool = set->string_pool.data; + + while (r < rend) { + while (p < pend && strcmp(&pool[r->name], &pool[p->name]) > 0) + p++; + if (p == pend || strcmp(&pool[r->name], &pool[p->name]) != 0) { + u = array_add(unsatisfied, sizeof *u); + *u = r - (struct razor_property *) set->requires.data; + } + r++; + } +} + +void +razor_set_list_unsatisfied(struct razor_set *set) +{ + struct array unsatisfied; + struct razor_property *requires, *r; + unsigned long *u, *end; + char *pool; + + array_init(&unsatisfied); + razor_set_validate(set, &unsatisfied); + + end = unsatisfied.data + unsatisfied.size; + requires = set->requires.data; + pool = set->string_pool.data; + + for (u = unsatisfied.data; u < end; u++) { + r = requires + *u; + printf("%s %s not satisfied\n", + &pool[r->name], &pool[r->version]); + } + + array_release(&unsatisfied); +} + +void razor_set_info(struct razor_set *set) { unsigned int offset, size; @@ -1172,6 +1220,12 @@ main(int argc, char *argv[]) razor_set_write(set, rawhide_repo_filename); razor_set_destroy(set); printf("wrote %s\n", rawhide_repo_filename); + } else if (strcmp(argv[1], "validate") == 0) { + set = razor_set_open(repo_filename); + if (set == NULL) + return 1; + razor_set_list_unsatisfied(set); + razor_set_destroy(set); } else { usage(); } -- 1.7.1