# HG changeset patch # User James Bowes # Date 1214521896 14400 # Node ID 4af421a011b453d8feb6fc53075387e9004028ea # Parent 57d1e05b94270a0e51a32f1ebe27937e3e8eb26e Add 'search' command diff -r 57d1e05b9427 -r 4af421a011b4 src/main.c --- a/src/main.c Thu Jun 26 18:41:55 2008 -0400 +++ b/src/main.c Thu Jun 26 19:11:36 2008 -0400 @@ -860,6 +860,52 @@ return 0; } +#define SEARCH_MAX 256 + +static int +command_search(int argc, const char *argv[]) +{ + struct razor_set *set; + struct razor_package_iterator *pi; + struct razor_package *package; + char pattern[SEARCH_MAX]; + const char *name, *version, *arch; + const char *summary, *description, *url, *license; + + if (!argv[0]) { + fprintf(stderr, "must specify a search term\n"); + return 1; + } + + sprintf(pattern, "*%s*", argv[0]); + + set = razor_set_open(repo_filename); + if (set == NULL) + return 1; + if (razor_set_open_details(set, "system-details.repo")) + return 1; + + pi = razor_package_iterator_create(set); + while (razor_package_iterator_next(pi, &package, + &name, &version, &arch)) { + if (!fnmatch(pattern, name, 0)) + printf("%s-%s.%s\n", name, version, arch); + else { + razor_package_get_details (set, package, &summary, + &description, &url, + &license); + if (!fnmatch(pattern, url, 0) || + !fnmatch(pattern, summary, 0) || + !fnmatch(pattern, description, 0)) + printf("%s-%s.%s\n", name, version, arch); + } + } + razor_package_iterator_destroy(pi); + razor_set_destroy(set); + + return 0; +} + static struct { const char *name; const char *description; @@ -884,7 +930,8 @@ { "install", "install rpm", command_install }, { "init", "init razor root", command_init }, { "download", "download packages", command_download }, - { "info", "display package details", command_info } + { "info", "display package details", command_info }, + { "search", "search package details", command_search } }; static int