1.1 --- a/src/main.c Wed Jun 25 11:00:25 2008 -0400
1.2 +++ b/src/main.c Wed Jun 25 21:11:33 2008 -0400
1.3 @@ -41,33 +41,75 @@
1.4
1.5 #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
1.6
1.7 -static int
1.8 -command_list(int argc, const char *argv[])
1.9 +static struct razor_package_iterator *
1.10 +create_iterator_from_argv(struct razor_set *set, 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_query *query;
1.15 + struct razor_package_iterator *iter;
1.16 struct razor_package *package;
1.17 - const char *pattern, *name, *version, *arch;
1.18 - int only_names = 0, i = 0;
1.19 + const char *name, *version, *arch, *pattern;
1.20 + int i, count;
1.21
1.22 - if (i < argc && strcmp(argv[i], "--only-names") == 0) {
1.23 - only_names = 1;
1.24 - i++;
1.25 + if (argc == 0)
1.26 + return razor_package_iterator_create(set);
1.27 +
1.28 + query = razor_package_query_create(set);
1.29 +
1.30 + for (i = 0; i < argc; i++) {
1.31 + iter = razor_package_iterator_create(set);
1.32 + pattern = argv[i];
1.33 + count = 0;
1.34 + while (razor_package_iterator_next(iter, &package,
1.35 + &name, &version, &arch)) {
1.36 + if (fnmatch(pattern, name, 0) != 0)
1.37 + continue;
1.38 +
1.39 + razor_package_query_add_package(query, package);
1.40 + count++;
1.41 + }
1.42 + razor_package_iterator_destroy(iter);
1.43 +
1.44 + if (count == 0)
1.45 + fprintf(stderr,
1.46 + "no package matches \"%s\"\n", pattern);
1.47 }
1.48
1.49 - pattern = argv[i];
1.50 - set = razor_set_open(repo_filename);
1.51 - pi = razor_package_iterator_create(set);
1.52 - while (razor_package_iterator_next(pi, &package,
1.53 + return razor_package_query_finish(query);
1.54 +}
1.55 +
1.56 +#define LIST_PACKAGES_ONLY_NAMES 0x01
1.57 +
1.58 +static void
1.59 +list_packages(struct razor_package_iterator *iter, uint32_t flags)
1.60 +{
1.61 + struct razor_package *package;
1.62 + const char *name, *version, *arch;
1.63 +
1.64 + while (razor_package_iterator_next(iter, &package,
1.65 &name, &version, &arch)) {
1.66 - if (pattern && fnmatch(pattern, name, 0) != 0)
1.67 - continue;
1.68 -
1.69 - if (only_names)
1.70 + if (flags & LIST_PACKAGES_ONLY_NAMES)
1.71 printf("%s\n", name);
1.72 else
1.73 printf("%s-%s.%s\n", name, version, arch);
1.74 }
1.75 +}
1.76 +
1.77 +static int
1.78 +command_list(int argc, const char *argv[])
1.79 +{
1.80 + struct razor_package_iterator *pi;
1.81 + struct razor_set *set;
1.82 + uint32_t flags = 0;
1.83 + int i = 0;
1.84 +
1.85 + if (i < argc && strcmp(argv[i], "--only-names") == 0) {
1.86 + flags |= LIST_PACKAGES_ONLY_NAMES;
1.87 + i++;
1.88 + }
1.89 +
1.90 + set = razor_set_open(repo_filename);
1.91 + pi = create_iterator_from_argv(set, argc - i, argv + i);
1.92 + list_packages(pi, flags);
1.93 razor_package_iterator_destroy(pi);
1.94 razor_set_destroy(set);
1.95
1.96 @@ -170,8 +212,6 @@
1.97 {
1.98 struct razor_set *set;
1.99 struct razor_package_iterator *pi;
1.100 - struct razor_package *package;
1.101 - const char *name, *version, *arch;
1.102
1.103 set = razor_set_open(repo_filename);
1.104 razor_set_open_files(set, "system-files.repo");
1.105 @@ -179,9 +219,7 @@
1.106 return 1;
1.107
1.108 pi = razor_package_iterator_create_for_file(set, argv[0]);
1.109 - while (razor_package_iterator_next(pi, &package,
1.110 - &name, &version, &arch))
1.111 - printf("%s-%s\n", name, version);
1.112 + list_packages(pi, 0);
1.113 razor_package_iterator_destroy(pi);
1.114
1.115 razor_set_destroy(set);
1.116 @@ -204,21 +242,6 @@
1.117 return 0;
1.118 }
1.119
1.120 -static void
1.121 -list_packages_for_property(struct razor_set *set,
1.122 - struct razor_property *property)
1.123 -{
1.124 - struct razor_package_iterator *pi;
1.125 - struct razor_package *package;
1.126 - const char *name, *version, *arch;
1.127 -
1.128 - pi = razor_package_iterator_create_for_property(set, property);
1.129 - while (razor_package_iterator_next(pi, &package,
1.130 - &name, &version, &arch))
1.131 - printf("%s-%s.%s\n", name, version, arch);
1.132 - razor_package_iterator_destroy(pi);
1.133 -}
1.134 -
1.135 static int
1.136 list_property_packages(const char *ref_name,
1.137 const char *ref_version,
1.138 @@ -226,7 +249,8 @@
1.139 {
1.140 struct razor_set *set;
1.141 struct razor_property *property;
1.142 - struct razor_property_iterator *pi;
1.143 + struct razor_property_iterator *prop_iter;
1.144 + struct razor_package_iterator *pkg_iter;
1.145 const char *name, *version;
1.146 uint32_t flags;
1.147
1.148 @@ -237,8 +261,8 @@
1.149 if (set == NULL)
1.150 return 1;
1.151
1.152 - pi = razor_property_iterator_create(set, NULL);
1.153 - while (razor_property_iterator_next(pi, &property,
1.154 + prop_iter = razor_property_iterator_create(set, NULL);
1.155 + while (razor_property_iterator_next(prop_iter, &property,
1.156 &name, &flags, &version)) {
1.157 if (strcmp(ref_name, name) != 0)
1.158 continue;
1.159 @@ -249,9 +273,13 @@
1.160 if ((flags & RAZOR_PROPERTY_TYPE_MASK) != type)
1.161 continue;
1.162
1.163 - list_packages_for_property(set, property);
1.164 + pkg_iter =
1.165 + razor_package_iterator_create_for_property(set,
1.166 + property);
1.167 + list_packages(pkg_iter, 0);
1.168 + razor_package_iterator_destroy(pkg_iter);
1.169 }
1.170 - razor_property_iterator_destroy(pi);
1.171 + razor_property_iterator_destroy(prop_iter);
1.172
1.173 return 0;
1.174 }
1.175 @@ -683,7 +711,7 @@
1.176 struct razor_root *root;
1.177 struct razor_set *system, *upstream, *next;
1.178 struct razor_transaction *trans;
1.179 - int i = 0, errors, dependencies = 1;
1.180 + int i = 0, dependencies = 1;
1.181
1.182 if (i < argc && strcmp(argv[i], "--no-dependencies") == 0) {
1.183 dependencies = 0;