Implement rpm --query --file
authorJames Bowes <jbowes@redhat.com>
Mon Jun 23 20:48:48 2008 -0400 (2008-06-23)
changeset 27727b0d4068feb
parent 276 4b0a1201342a
child 278 97c12ddedfb3
Implement rpm --query --file
librazor/razor.h
src/rpm.c
     1.1 --- a/librazor/razor.h	Mon Jun 23 20:20:08 2008 -0400
     1.2 +++ b/librazor/razor.h	Mon Jun 23 20:48:48 2008 -0400
     1.3 @@ -120,6 +120,15 @@
     1.4  struct razor_package_iterator *
     1.5  razor_package_iterator_create_for_property(struct razor_set *set,
     1.6  					   struct razor_property *property);
     1.7 +
     1.8 +/**
     1.9 + * razor_package_iterator_create_for_file:
    1.10 + *
    1.11 + * Create a new #razor_package_iterator object for the packages that
    1.12 + * contain the given file name.
    1.13 + *
    1.14 + * Returns: the new #razor_package_iterator object.
    1.15 + **/
    1.16  struct razor_package_iterator *
    1.17  razor_package_iterator_create_for_file(struct razor_set *set,
    1.18  				       const char *filename);
     2.1 --- a/src/rpm.c	Mon Jun 23 20:20:08 2008 -0400
     2.2 +++ b/src/rpm.c	Mon Jun 23 20:48:48 2008 -0400
     2.3 @@ -51,7 +51,7 @@
     2.4   * what else in on the command line. */
     2.5  
     2.6  static int option_all, option_list, option_whatrequires, option_whatprovides;
     2.7 -static int option_package;
     2.8 +static int option_package, option_file;
     2.9  
    2.10  static const struct option query_options[] = {
    2.11  	{ OPTION_BOOL, "configfiles", 'c', NULL, "list all configuration files", NULL },
    2.12 @@ -61,7 +61,7 @@
    2.13  	{ OPTION_STRING, "queryformat", 0, "QUERYFORMAT", "use the following query format", NULL },
    2.14  	{ OPTION_BOOL, "state", 's', NULL, "display the states of the listed files", NULL },
    2.15  	{ OPTION_BOOL, "all", 'a', NULL, "query/verify all packages", &option_all },
    2.16 -	{ OPTION_BOOL, "file", 'f', NULL, "query/verify package(s) owning file", NULL },
    2.17 +	{ OPTION_BOOL, "file", 'f', NULL, "query/verify package(s) owning file", &option_file },
    2.18  	{ OPTION_BOOL, "group", 'g', NULL, "query/verify package(s) in group", NULL },
    2.19  	{ OPTION_BOOL, "package", 'p', NULL, "query/verify a package file", &option_package },
    2.20  	{ OPTION_BOOL, "ftswalk", 'W', NULL, "query/verify package(s) from TOP file tree walk", NULL },
    2.21 @@ -84,7 +84,7 @@
    2.22  	{ OPTION_BOOL, "nodeps", 0, NULL, "don't verify package dependencies", &option_nodeps },
    2.23  	{ OPTION_BOOL, "noscript", 0, NULL, "don't execute verify script(s)", NULL, },
    2.24  	{ OPTION_BOOL, "all", 'a', NULL, "query/verify all packages", &option_all },
    2.25 -	{ OPTION_BOOL, "file", 'f', NULL, "query/verify package(s) owning file", NULL },
    2.26 +	{ OPTION_BOOL, "file", 'f', NULL, "query/verify package(s) owning file", &option_file },
    2.27  	{ OPTION_BOOL, "group", 'g', NULL, "query/verify package(s) in group", NULL },
    2.28  	{ OPTION_BOOL, "package", 'p', NULL, "query/verify a package file", &option_package },
    2.29  	{ OPTION_BOOL, "ftswalk", 'W', NULL, "query/verify package(s) from TOP file tree walk", NULL },
    2.30 @@ -338,14 +338,20 @@
    2.31  {
    2.32  	struct razor_package_query *query;
    2.33  	struct razor_package_iterator *pi;
    2.34 +	char *files;
    2.35  	int i;
    2.36  
    2.37 -	if (option_all + option_whatprovides + option_whatrequires > 1) {
    2.38 +	if (option_all + option_whatprovides + option_whatrequires +
    2.39 +	    option_file > 1) {
    2.40  		printf("only one type of query/verify "
    2.41  		       "may be performed at a time\n");
    2.42  		exit(1);
    2.43  	}
    2.44  
    2.45 +	files = "install/var/lib/razor/system-files.repo";
    2.46 +	if (option_file)
    2.47 +		razor_set_open_files(set, files);
    2.48 +
    2.49  	query = razor_package_query_create(set);
    2.50  
    2.51  	if (option_all) {
    2.52 @@ -362,6 +368,13 @@
    2.53  			add_property_packages(set, query,
    2.54  					      argv[i], NULL,
    2.55  					      RAZOR_PROPERTY_PROVIDES);
    2.56 +	} else if (option_file) {
    2.57 +		for (i = 0; i < argc; i++) {
    2.58 +			pi = razor_package_iterator_create_for_file(set,
    2.59 +								    argv[i]);
    2.60 +			razor_package_query_add_iterator(query, pi);
    2.61 +			razor_package_iterator_destroy(pi);
    2.62 +		}
    2.63  	} else if (argc > 0) {
    2.64  		add_command_line_packages(set, query, argc, argv);
    2.65  	} else {