Add importer for system rpm database.
authorKristian H?gsberg <krh@redhat.com>
Wed Sep 19 14:09:03 2007 -0400 (2007-09-19)
changeset 28c8958f67afd8
parent 27 5dbd81809d26
child 29 28a13008d80b
Add importer for system rpm database.
Makefile
import.c
razor.c
razor.h
     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_ */