Add importer for system rpm database.
1.1 --- a/Makefile Tue Sep 18 15:02:04 2007 -0400
1.2 +++ b/Makefile Wed Sep 19 14:09:03 2007 -0400
1.3 @@ -1,5 +1,5 @@
1.4 CFLAGS = -Wall -g -O2
1.5 -LDLIBS = -lexpat -g
1.6 +LDLIBS = -lexpat -g -lrpm
1.7
1.8 razor : razor.o import.o sha1.o
1.9
2.1 --- a/import.c Tue Sep 18 15:02:04 2007 -0400
2.2 +++ b/import.c Wed Sep 19 14:09:03 2007 -0400
2.3 @@ -9,6 +9,8 @@
2.4 #include <errno.h>
2.5
2.6 #include <expat.h>
2.7 +#include <rpm/rpmlib.h>
2.8 +#include <rpm/rpmdb.h>
2.9 #include "sha1.h"
2.10 #include "razor.h"
2.11
2.12 @@ -257,3 +259,62 @@
2.13
2.14 return razor_finish_import(&ctx.ctx);
2.15 }
2.16 +
2.17 +struct razor_set *
2.18 +razor_set_create_from_rpmdb(void)
2.19 +{
2.20 + struct import_context ctx;
2.21 + rpmdbMatchIterator iter;
2.22 + Header h;
2.23 + int_32 type, count, i;
2.24 + char *name, *version, *release;
2.25 + char **properties, **property_versions;
2.26 + rpmdb db;
2.27 +
2.28 + rpmReadConfigFiles(NULL, NULL);
2.29 +
2.30 + if (rpmdbOpen("", &db, O_RDONLY, 0644) != 0) {
2.31 + fprintf(stderr, "cannot open rpm database\n");
2.32 + exit(1);
2.33 + }
2.34 +
2.35 + razor_prepare_import(&ctx);
2.36 +
2.37 + iter = rpmdbInitIterator(db, 0, NULL, 0);
2.38 + while (h = rpmdbNextIterator(iter), h != NULL) {
2.39 + headerGetEntry(h, RPMTAG_NAME, &type,
2.40 + (void **) &name, &count);
2.41 + headerGetEntry(h, RPMTAG_VERSION, &type,
2.42 + (void **) &version, &count);
2.43 + headerGetEntry(h, RPMTAG_RELEASE, &type,
2.44 + (void **) &release, &count);
2.45 + import_context_add_package(&ctx, name, version);
2.46 +
2.47 +
2.48 + headerGetEntry(h, RPMTAG_REQUIRES, &type,
2.49 + (void **) &properties, &count);
2.50 + headerGetEntry(h, RPMTAG_REQUIREVERSION, &type,
2.51 + (void **) &property_versions, &count);
2.52 + for (i = 0; i < count; i++)
2.53 + import_context_add_property(&ctx,
2.54 + &ctx.requires,
2.55 + properties[i],
2.56 + property_versions[i]);
2.57 +
2.58 + headerGetEntry(h, RPMTAG_PROVIDES, &type,
2.59 + (void **) &properties, &count);
2.60 + headerGetEntry(h, RPMTAG_PROVIDEVERSION, &type,
2.61 + (void **) &property_versions, &count);
2.62 + for (i = 0; i < count; i++)
2.63 + import_context_add_property(&ctx,
2.64 + &ctx.provides,
2.65 + properties[i],
2.66 + property_versions[i]);
2.67 +
2.68 + import_context_finish_package(&ctx);
2.69 + }
2.70 +
2.71 + rpmdbClose(db);
2.72 +
2.73 + return razor_finish_import(&ctx);
2.74 +}
3.1 --- a/razor.c Tue Sep 18 15:02:04 2007 -0400
3.2 +++ b/razor.c Wed Sep 19 14:09:03 2007 -0400
3.3 @@ -928,6 +928,13 @@
3.4 razor_set_write(set, rawhide_repo_filename);
3.5 razor_set_destroy(set);
3.6 printf("wrote %s\n", rawhide_repo_filename);
3.7 + } else if (strcmp(argv[1], "import-rpmdb") == 0) {
3.8 + set = razor_set_create_from_rpmdb();
3.9 + if (set == NULL)
3.10 + return 1;
3.11 + razor_set_write(set, repo_filename);
3.12 + razor_set_destroy(set);
3.13 + printf("wrote %s\n", repo_filename);
3.14 } else if (strcmp(argv[1], "validate") == 0) {
3.15 set = razor_set_open(repo_filename);
3.16 if (set == NULL)
4.1 --- a/razor.h Tue Sep 18 15:02:04 2007 -0400
4.2 +++ b/razor.h Wed Sep 19 14:09:03 2007 -0400
4.3 @@ -79,5 +79,6 @@
4.4
4.5 struct razor_set *razor_import_rzr_files(int count, const char **files);
4.6 struct razor_set *razor_set_create_from_yum_filelist(int fd);
4.7 +struct razor_set *razor_set_create_from_rpmdb(void);
4.8
4.9 #endif /* _RAZOR_H_ */