Add 'search' command
authorJames Bowes <jbowes@redhat.com>
Thu Jun 26 19:11:36 2008 -0400 (2008-06-26)
changeset 2924af421a011b4
parent 291 57d1e05b9427
child 293 608b2e7013f8
Add 'search' command
src/main.c
     1.1 --- a/src/main.c	Thu Jun 26 18:41:55 2008 -0400
     1.2 +++ b/src/main.c	Thu Jun 26 19:11:36 2008 -0400
     1.3 @@ -860,6 +860,52 @@
     1.4  	return 0;
     1.5  }
     1.6  
     1.7 +#define SEARCH_MAX 256
     1.8 +
     1.9 +static int
    1.10 +command_search(int argc, const char *argv[])
    1.11 +{
    1.12 +	struct razor_set *set;
    1.13 +	struct razor_package_iterator *pi;
    1.14 +	struct razor_package *package;
    1.15 +	char pattern[SEARCH_MAX];
    1.16 +	const char *name, *version, *arch;
    1.17 +	const char *summary, *description, *url, *license;
    1.18 +
    1.19 +	if (!argv[0]) {
    1.20 +		fprintf(stderr, "must specify a search term\n");
    1.21 +		return 1;
    1.22 +	}
    1.23 +
    1.24 +	sprintf(pattern, "*%s*", argv[0]);
    1.25 +
    1.26 +	set = razor_set_open(repo_filename);
    1.27 +	if (set == NULL)
    1.28 +		return 1;
    1.29 +	if (razor_set_open_details(set, "system-details.repo"))
    1.30 +		return 1;
    1.31 +
    1.32 +	pi = razor_package_iterator_create(set);
    1.33 +	while (razor_package_iterator_next(pi, &package,
    1.34 +					   &name, &version, &arch)) {
    1.35 +		if (!fnmatch(pattern, name, 0))
    1.36 +			printf("%s-%s.%s\n", name, version, arch);
    1.37 +		else {
    1.38 +			razor_package_get_details (set, package, &summary,
    1.39 +						   &description, &url,
    1.40 +						   &license);
    1.41 +			if (!fnmatch(pattern, url, 0) ||
    1.42 +			    !fnmatch(pattern, summary, 0) ||
    1.43 +			    !fnmatch(pattern, description, 0))
    1.44 +				printf("%s-%s.%s\n", name, version, arch);
    1.45 +		}
    1.46 +	}
    1.47 +	razor_package_iterator_destroy(pi);
    1.48 +	razor_set_destroy(set);
    1.49 +
    1.50 +	return 0;
    1.51 +}
    1.52 +
    1.53  static struct {
    1.54  	const char *name;
    1.55  	const char *description;
    1.56 @@ -884,7 +930,8 @@
    1.57  	{ "install", "install rpm", command_install },
    1.58  	{ "init", "init razor root", command_init },
    1.59  	{ "download", "download packages", command_download },
    1.60 -	{ "info", "display package details", command_info }
    1.61 +	{ "info", "display package details", command_info },
    1.62 +	{ "search", "search package details", command_search }
    1.63  };
    1.64  
    1.65  static int