1.1 --- a/data/bash-completion.sh Fri Jun 20 23:13:09 2008 -0400
1.2 +++ b/data/bash-completion.sh Mon Jun 23 09:59:08 2008 -0400
1.3 @@ -1,6 +1,6 @@
1.4 __razor_commands () {
1.5 local IFS=$'\n'
1.6 - COMPREPLY=($(IFS=: compgen -S' ' -W "list-requires:list-provides:list-files:list-file-packages:list-package-files:what-requires:what-provides:import-yum:import-rpmdb:validate:update:diff:install:init:download" -- $1))
1.7 + COMPREPLY=($(IFS=: compgen -S' ' -W "info:list-requires:list-provides:list-files:list-file-packages:list-package-files:what-requires:what-provides:import-yum:import-rpmdb:validate:update:diff:install:init:download" -- $1))
1.8 }
1.9
1.10 __razor_packages () {
1.11 @@ -34,7 +34,7 @@
1.12 __razor_commands $cur
1.13 else
1.14 case "${COMP_WORDS[1]}" in
1.15 - list-requires|list-provides|list-package-files)
1.16 + info|list-requires|list-provides|list-package-files)
1.17 __razor_packages $cur ;;
1.18 list-files|list-file-packages) __razor_files $cur ;;
1.19 what-requires) __razor_requires $cur ;;
2.1 --- a/librazor/importer.c Fri Jun 20 23:13:09 2008 -0400
2.2 +++ b/librazor/importer.c Mon Jun 23 09:59:08 2008 -0400
2.3 @@ -54,6 +54,19 @@
2.4 }
2.5
2.6 void
2.7 +razor_importer_add_details(struct razor_importer *importer,
2.8 + const char *summary,
2.9 + const char *description,
2.10 + const char *url,
2.11 + const char *license)
2.12 +{
2.13 + importer->package->summary = hashtable_tokenize(&importer->details_table, summary);
2.14 + importer->package->description = hashtable_tokenize(&importer->details_table, description);
2.15 + importer->package->url = hashtable_tokenize(&importer->details_table, url);
2.16 + importer->package->license = hashtable_tokenize(&importer->details_table, license);
2.17 +}
2.18 +
2.19 +void
2.20 razor_importer_add_property(struct razor_importer *importer,
2.21 const char *name,
2.22 uint32_t flags,
2.23 @@ -99,6 +112,10 @@
2.24 importer = zalloc(sizeof *importer);
2.25 importer->set = razor_set_create();
2.26 hashtable_init(&importer->table, &importer->set->string_pool);
2.27 + hashtable_init(&importer->details_table,
2.28 + &importer->set->details_string_pool);
2.29 + hashtable_init(&importer->file_table,
2.30 + &importer->set->file_string_pool);
2.31
2.32 return importer;
2.33 }
3.1 --- a/librazor/razor-internal.h Fri Jun 20 23:13:09 2008 -0400
3.2 +++ b/librazor/razor-internal.h Mon Jun 23 09:59:08 2008 -0400
3.3 @@ -61,26 +61,37 @@
3.4 struct razor_set_section sections[0];
3.5 };
3.6
3.7 -#define RAZOR_MAGIC 0x7a7a7a7a
3.8 +#define RAZOR_MAGIC 0x7a7a7a7a
3.9 +#define RAZOR_DETAILS_MAGIC 0x7a7a7a7b
3.10 +#define RAZOR_FILES_MAGIC 0x7a7a7a7c
3.11 #define RAZOR_VERSION 1
3.12
3.13 -#define RAZOR_STRING_POOL 0
3.14 -#define RAZOR_PACKAGES 1
3.15 -#define RAZOR_PROPERTIES 2
3.16 -#define RAZOR_FILES 3
3.17 -#define RAZOR_PACKAGE_POOL 4
3.18 -#define RAZOR_PROPERTY_POOL 5
3.19 -#define RAZOR_FILE_POOL 6
3.20 +#define RAZOR_STRING_POOL 0
3.21 +#define RAZOR_PACKAGES 1
3.22 +#define RAZOR_PROPERTIES 2
3.23 +#define RAZOR_PACKAGE_POOL 3
3.24 +#define RAZOR_PROPERTY_POOL 4
3.25 +
3.26 +#define RAZOR_DETAILS_STRING_POOL 0
3.27 +
3.28 +#define RAZOR_FILES 0
3.29 +#define RAZOR_FILE_POOL 1
3.30 +#define RAZOR_FILE_STRING_POOL 2
3.31
3.32 struct razor_package {
3.33 - uint32_t name : 24;
3.34 - uint32_t flags : 8;
3.35 + uint name : 24;
3.36 + uint flags : 8;
3.37 uint32_t version;
3.38 uint32_t arch;
3.39 + uint32_t summary;
3.40 + uint32_t description;
3.41 + uint32_t url;
3.42 + uint32_t license;
3.43 struct list_head properties;
3.44 struct list_head files;
3.45 };
3.46
3.47 +
3.48 struct razor_property {
3.49 uint32_t name;
3.50 uint32_t flags;
3.51 @@ -105,7 +116,11 @@
3.52 struct array package_pool;
3.53 struct array property_pool;
3.54 struct array file_pool;
3.55 + struct array file_string_pool;
3.56 + struct array details_string_pool;
3.57 struct razor_set_header *header;
3.58 + struct razor_set_header *details_header;
3.59 + struct razor_set_header *files_header;
3.60 };
3.61
3.62 struct import_entry {
3.63 @@ -123,6 +138,8 @@
3.64 struct razor_importer {
3.65 struct razor_set *set;
3.66 struct hashtable table;
3.67 + struct hashtable file_table;
3.68 + struct hashtable details_table;
3.69 struct razor_package *package;
3.70 struct array properties;
3.71 struct array files;
4.1 --- a/librazor/razor.c Fri Jun 20 23:13:09 2008 -0400
4.2 +++ b/librazor/razor.c Mon Jun 23 09:59:08 2008 -0400
4.3 @@ -51,12 +51,19 @@
4.4 { RAZOR_STRING_POOL, offsetof(struct razor_set, string_pool) },
4.5 { RAZOR_PACKAGES, offsetof(struct razor_set, packages) },
4.6 { RAZOR_PROPERTIES, offsetof(struct razor_set, properties) },
4.7 - { RAZOR_FILES, offsetof(struct razor_set, files) },
4.8 { RAZOR_PACKAGE_POOL, offsetof(struct razor_set, package_pool) },
4.9 { RAZOR_PROPERTY_POOL, offsetof(struct razor_set, property_pool) },
4.10 - { RAZOR_FILE_POOL, offsetof(struct razor_set, file_pool) },
4.11 };
4.12
4.13 +struct razor_set_section razor_files_sections[] = {
4.14 + { RAZOR_FILES, offsetof(struct razor_set, files) },
4.15 + { RAZOR_FILE_POOL, offsetof(struct razor_set, file_pool) },
4.16 + { RAZOR_FILE_STRING_POOL, offsetof(struct razor_set, file_string_pool) },
4.17 +};
4.18 +
4.19 +struct razor_set_section razor_details_sections[] = {
4.20 + { RAZOR_DETAILS_STRING_POOL, offsetof(struct razor_set, details_string_pool) },
4.21 +};
4.22 struct razor_set *
4.23 razor_set_create(void)
4.24 {
4.25 @@ -112,6 +119,62 @@
4.26 }
4.27
4.28 void
4.29 +razor_set_open_details(struct razor_set *set, const char *filename)
4.30 +{
4.31 + struct razor_set_section *s;
4.32 + struct stat stat;
4.33 + struct array *array;
4.34 + int fd;
4.35 +
4.36 + fd = open(filename, O_RDONLY);
4.37 + if (fstat(fd, &stat) < 0)
4.38 + return;
4.39 + set->details_header = mmap(NULL, stat.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
4.40 + if (set->details_header == MAP_FAILED)
4.41 + return;
4.42 +
4.43 + for (s = set->details_header->sections; ~s->type; s++) {
4.44 + if (s->type >= ARRAY_SIZE(razor_details_sections))
4.45 + continue;
4.46 + if (s->type != razor_details_sections[s->type].type)
4.47 + continue;
4.48 + array = (void *) set + razor_details_sections[s->type].offset;
4.49 + array->data = (void *) set->details_header + s->offset;
4.50 + array->size = s->size;
4.51 + array->alloc = s->size;
4.52 + }
4.53 + close(fd);
4.54 +}
4.55 +
4.56 +void
4.57 +razor_set_open_files(struct razor_set *set, const char *filename)
4.58 +{
4.59 + struct razor_set_section *s;
4.60 + struct stat stat;
4.61 + struct array *array;
4.62 + int fd;
4.63 +
4.64 + fd = open(filename, O_RDONLY);
4.65 + if (fstat(fd, &stat) < 0)
4.66 + return;
4.67 + set->files_header = mmap(NULL, stat.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
4.68 + if (set->files_header == MAP_FAILED)
4.69 + return;
4.70 +
4.71 + for (s = set->files_header->sections; ~s->type; s++) {
4.72 + if (s->type >= ARRAY_SIZE(razor_files_sections))
4.73 + continue;
4.74 + if (s->type != razor_files_sections[s->type].type)
4.75 + continue;
4.76 + array = (void *) set + razor_files_sections[s->type].offset;
4.77 + array->data = (void *) set->files_header + s->offset;
4.78 + array->size = s->size;
4.79 + array->alloc = s->size;
4.80 + }
4.81 + close(fd);
4.82 +}
4.83 +
4.84 +void
4.85 razor_set_destroy(struct razor_set *set)
4.86 {
4.87 unsigned int size;
4.88 @@ -130,11 +193,37 @@
4.89 }
4.90 }
4.91
4.92 + if (set->details_header) {
4.93 + for (i = 0; set->details_header->sections[i].type; i++)
4.94 + ;
4.95 + size = set->details_header->sections[i].type;
4.96 + munmap(set->details_header, size);
4.97 + } else {
4.98 + for (i = 0; i < ARRAY_SIZE(razor_details_sections); i++) {
4.99 + a = (void *) set + razor_details_sections[i].offset;
4.100 + free(a->data);
4.101 + }
4.102 + }
4.103 +
4.104 + if (set->files_header) {
4.105 + for (i = 0; set->files_header->sections[i].type; i++)
4.106 + ;
4.107 + size = set->files_header->sections[i].type;
4.108 + munmap(set->files_header, size);
4.109 + } else {
4.110 + for (i = 0; i < ARRAY_SIZE(razor_files_sections); i++) {
4.111 + a = (void *) set + razor_files_sections[i].offset;
4.112 + free(a->data);
4.113 + }
4.114 + }
4.115 +
4.116 free(set);
4.117 }
4.118
4.119 -int
4.120 -razor_set_write_to_fd(struct razor_set *set, int fd)
4.121 +static int
4.122 +razor_set_write_sections_to_fd(struct razor_set *set, int fd, int magic,
4.123 + struct razor_set_section *sections,
4.124 + size_t array_size)
4.125 {
4.126 char data[4096];
4.127 struct razor_set_header *header = (struct razor_set_header *) data;
4.128 @@ -143,14 +232,14 @@
4.129 int i;
4.130
4.131 memset(data, 0, sizeof data);
4.132 - header->magic = RAZOR_MAGIC;
4.133 + header->magic = magic;
4.134 header->version = RAZOR_VERSION;
4.135 offset = sizeof data;
4.136
4.137 - for (i = 0; i < ARRAY_SIZE(razor_sections); i++) {
4.138 - if (razor_sections[i].type != i)
4.139 + for (i = 0; i < array_size; i++) {
4.140 + if (sections[i].type != i)
4.141 continue;
4.142 - a = (void *) set + razor_sections[i].offset;
4.143 + a = (void *) set + sections[i].offset;
4.144 header->sections[i].type = i;
4.145 header->sections[i].offset = offset;
4.146 header->sections[i].size = a->size;
4.147 @@ -163,10 +252,10 @@
4.148
4.149 razor_write(fd, data, sizeof data);
4.150 memset(data, 0, sizeof data);
4.151 - for (i = 0; i < ARRAY_SIZE(razor_sections); i++) {
4.152 - if (razor_sections[i].type != i)
4.153 + for (i = 0; i < array_size; i++) {
4.154 + if (sections[i].type != i)
4.155 continue;
4.156 - a = (void *) set + razor_sections[i].offset;
4.157 + a = (void *) set + sections[i].offset;
4.158 razor_write(fd, a->data, a->size);
4.159 razor_write(fd, data, ALIGN(a->size, 4096) - a->size);
4.160 }
4.161 @@ -175,7 +264,31 @@
4.162 }
4.163
4.164 int
4.165 -razor_set_write(struct razor_set *set, const char *filename)
4.166 +razor_set_write_to_fd(struct razor_set *set, int fd,
4.167 + enum razor_repo_file_type type)
4.168 +{
4.169 + switch (type) {
4.170 + case RAZOR_REPO_FILE_MAIN:
4.171 + return razor_set_write_sections_to_fd(set, fd, RAZOR_MAGIC,
4.172 + razor_sections,
4.173 + ARRAY_SIZE(razor_sections));
4.174 +
4.175 + case RAZOR_REPO_FILE_DETAILS:
4.176 + return razor_set_write_sections_to_fd(set, fd, RAZOR_DETAILS_MAGIC,
4.177 + razor_details_sections,
4.178 + ARRAY_SIZE(razor_details_sections));
4.179 + case RAZOR_REPO_FILE_FILES:
4.180 + return razor_set_write_sections_to_fd(set, fd, RAZOR_FILES_MAGIC,
4.181 + razor_files_sections,
4.182 + ARRAY_SIZE(razor_files_sections));
4.183 + default:
4.184 + return -1;
4.185 + }
4.186 +}
4.187 +
4.188 +int
4.189 +razor_set_write(struct razor_set *set, const char *filename,
4.190 + enum razor_repo_file_type type)
4.191 {
4.192 int fd, status;
4.193
4.194 @@ -183,7 +296,7 @@
4.195 if (fd < 0)
4.196 return -1;
4.197
4.198 - status = razor_set_write_to_fd(set, fd);
4.199 + status = razor_set_write_to_fd(set, fd, type);
4.200 if (status) {
4.201 close(fd);
4.202 return status;
4.203 @@ -191,7 +304,6 @@
4.204
4.205 return close(fd);
4.206 }
4.207 -
4.208 void
4.209 razor_build_evr(char *evr_buf, int size, const char *epoch,
4.210 const char *version, const char *release)
4.211 @@ -269,6 +381,19 @@
4.212 return p;
4.213 }
4.214
4.215 +void
4.216 +razor_package_get_details(struct razor_set *set, struct razor_package *package,
4.217 + const char **summary, const char **description,
4.218 + const char **url, const char **license)
4.219 +{
4.220 + const char *pool = set->details_string_pool.data;
4.221 +
4.222 + *summary = &pool[package->summary];
4.223 + *description = &pool[package->description];
4.224 + *url = &pool[package->url];
4.225 + *license = &pool[package->license];
4.226 +}
4.227 +
4.228 struct razor_entry *
4.229 razor_set_find_entry(struct razor_set *set,
4.230 struct razor_entry *dir, const char *pattern)
5.1 --- a/librazor/razor.h Fri Jun 20 23:13:09 2008 -0400
5.2 +++ b/librazor/razor.h Mon Jun 23 09:59:08 2008 -0400
5.3 @@ -26,6 +26,12 @@
5.4 struct razor_package;
5.5 struct razor_property;
5.6
5.7 +enum razor_repo_file_type {
5.8 + RAZOR_REPO_FILE_MAIN,
5.9 + RAZOR_REPO_FILE_DETAILS,
5.10 + RAZOR_REPO_FILE_FILES
5.11 +};
5.12 +
5.13 enum razor_property_flags {
5.14 RAZOR_PROPERTY_LESS = 1 << 0,
5.15 RAZOR_PROPERTY_GREATER = 1 << 1,
5.16 @@ -55,12 +61,22 @@
5.17 struct razor_set *razor_set_create(void);
5.18 struct razor_set *razor_set_open(const char *filename);
5.19 void razor_set_destroy(struct razor_set *set);
5.20 -int razor_set_write_to_fd(struct razor_set *set, int fd);
5.21 -int razor_set_write(struct razor_set *set, const char *filename);
5.22 +int razor_set_write_to_fd(struct razor_set *set, int fd,
5.23 + enum razor_repo_file_type type);
5.24 +int razor_set_write(struct razor_set *set, const char *filename,
5.25 + enum razor_repo_file_type type);
5.26 +
5.27 +void razor_set_open_details(struct razor_set *set, const char *filename);
5.28 +void razor_set_open_files(struct razor_set *set, const char *filename);
5.29
5.30 struct razor_package *
5.31 razor_set_get_package(struct razor_set *set, const char *package);
5.32
5.33 +void
5.34 +razor_package_get_details(struct razor_set *set, struct razor_package *package,
5.35 + const char **summary, const char **description,
5.36 + const char **url, const char **license);
5.37 +
5.38 struct razor_package_iterator;
5.39 struct razor_package_iterator *
5.40 razor_package_iterator_create(struct razor_set *set);
5.41 @@ -162,6 +178,11 @@
5.42 const char *name,
5.43 const char *version,
5.44 const char *arch);
5.45 +void razor_importer_add_details(struct razor_importer *importer,
5.46 + const char *summary,
5.47 + const char *description,
5.48 + const char *url,
5.49 + const char *license);
5.50 void razor_importer_add_property(struct razor_importer *importer,
5.51 const char *name,
5.52 uint32_t flags,
6.1 --- a/librazor/root.c Fri Jun 20 23:13:09 2008 -0400
6.2 +++ b/librazor/root.c Mon Jun 23 09:59:08 2008 -0400
6.3 @@ -58,7 +58,7 @@
6.4 "a razor install root is already initialized\n");
6.5 return -1;
6.6 }
6.7 - if (razor_set_write(set, path) < 0) {
6.8 + if (razor_set_write(set, path, RAZOR_REPO_FILE_MAIN) < 0) {
6.9 fprintf(stderr, "could not write initial package set\n");
6.10 return -1;
6.11 }
6.12 @@ -138,7 +138,7 @@
6.13 void
6.14 razor_root_update(struct razor_root *root, struct razor_set *next)
6.15 {
6.16 - razor_set_write_to_fd(next, root->fd);
6.17 + razor_set_write_to_fd(next, root->fd, RAZOR_REPO_FILE_MAIN);
6.18 root->next = next;
6.19
6.20 /* Sync the new repo file so the new package set is on disk
7.1 --- a/librazor/rpm.c Fri Jun 20 23:13:09 2008 -0400
7.2 +++ b/librazor/rpm.c Mon Jun 23 09:59:08 2008 -0400
7.3 @@ -781,7 +781,7 @@
7.4 int
7.5 razor_importer_add_rpm(struct razor_importer *importer, struct razor_rpm *rpm)
7.6 {
7.7 - const char *name, *version, *release, *arch;
7.8 + const char *name, *version, *release, *arch, *summary;
7.9 const uint32_t *epoch;
7.10 char evr[128], buf[16];
7.11
7.12 @@ -790,6 +790,7 @@
7.13 version = razor_rpm_get_indirect(rpm, RPMTAG_VERSION, NULL);
7.14 release = razor_rpm_get_indirect(rpm, RPMTAG_RELEASE, NULL);
7.15 arch = razor_rpm_get_indirect(rpm, RPMTAG_ARCH, NULL);
7.16 + summary = razor_rpm_get_indirect(rpm, RPMTAG_SUMMARY, NULL);
7.17
7.18 if (epoch) {
7.19 snprintf(buf, sizeof buf, "%u", ntohl(*epoch));
8.1 --- a/src/import-rpmdb.c Fri Jun 20 23:13:09 2008 -0400
8.2 +++ b/src/import-rpmdb.c Mon Jun 23 09:59:08 2008 -0400
8.3 @@ -86,6 +86,7 @@
8.4 Header h;
8.5 int_32 type, count, i;
8.6 union rpm_entry name, epoch, version, release, arch;
8.7 + union rpm_entry summary, description, url, license;
8.8 union rpm_entry basenames, dirnames, dirindexes;
8.9 char filename[PATH_MAX], evr[128], buf[16];
8.10 rpmdb db;
8.11 @@ -106,6 +107,11 @@
8.12 headerGetEntry(h, RPMTAG_VERSION, &type, &version.p, &count);
8.13 headerGetEntry(h, RPMTAG_RELEASE, &type, &release.p, &count);
8.14 headerGetEntry(h, RPMTAG_ARCH, &type, &arch.p, &count);
8.15 + headerGetEntry(h, RPMTAG_SUMMARY, &type, &summary.p, &count);
8.16 + headerGetEntry(h, RPMTAG_DESCRIPTION, &type, &description.p,
8.17 + &count);
8.18 + headerGetEntry(h, RPMTAG_URL, &type, &url.p, &count);
8.19 + headerGetEntry(h, RPMTAG_LICENSE, &type, &license.p, &count);
8.20
8.21 if (epoch.flags != NULL) {
8.22 snprintf(buf, sizeof buf, "%u", *epoch.flags);
8.23 @@ -118,6 +124,9 @@
8.24
8.25 razor_importer_begin_package(importer,
8.26 name.string, evr, arch.string);
8.27 + razor_importer_add_details(importer, summary.string,
8.28 + description.string, url.string,
8.29 + license.string);
8.30
8.31 add_properties(importer, RAZOR_PROPERTY_REQUIRES, h,
8.32 RPMTAG_REQUIRENAME,
9.1 --- a/src/import-yum.c Fri Jun 20 23:13:09 2008 -0400
9.2 +++ b/src/import-yum.c Mon Jun 23 09:59:08 2008 -0400
9.3 @@ -38,6 +38,10 @@
9.4 YUM_STATE_BEGIN,
9.5 YUM_STATE_PACKAGE_NAME,
9.6 YUM_STATE_PACKAGE_ARCH,
9.7 + YUM_STATE_SUMMARY,
9.8 + YUM_STATE_DESCRIPTION,
9.9 + YUM_STATE_URL,
9.10 + YUM_STATE_LICENSE,
9.11 YUM_STATE_CHECKSUM,
9.12 YUM_STATE_REQUIRES,
9.13 YUM_STATE_PROVIDES,
9.14 @@ -53,7 +57,8 @@
9.15
9.16 struct razor_importer *importer;
9.17 struct import_property_context *current_property_context;
9.18 - char name[256], arch[64], buffer[512], *p;
9.19 + char name[256], arch[64], summary[512], description[4096];
9.20 + char url[256], license[64], buffer[512], *p;
9.21 char pkgid[128];
9.22 uint32_t property_type;
9.23 int state;
9.24 @@ -112,9 +117,21 @@
9.25 razor_build_evr(buffer, sizeof buffer, epoch, version, release);
9.26 razor_importer_begin_package(ctx->importer,
9.27 ctx->name, buffer, ctx->arch);
9.28 + } else if (strcmp(name, "summary") == 0) {
9.29 + ctx->p = ctx->summary;
9.30 + ctx->state = YUM_STATE_SUMMARY;
9.31 + } else if (strcmp(name, "description") == 0) {
9.32 + ctx->p = ctx->description;
9.33 + ctx->state = YUM_STATE_DESCRIPTION;
9.34 + } else if (strcmp(name, "url") == 0) {
9.35 + ctx->p = ctx->url;
9.36 + ctx->state = YUM_STATE_URL;
9.37 } else if (strcmp(name, "checksum") == 0) {
9.38 ctx->p = ctx->pkgid;
9.39 ctx->state = YUM_STATE_CHECKSUM;
9.40 + } else if (strcmp(name, "rpm:license") == 0) {
9.41 + ctx->p = ctx->license;
9.42 + ctx->state = YUM_STATE_LICENSE;
9.43 } else if (strcmp(name, "rpm:requires") == 0) {
9.44 ctx->state = YUM_STATE_REQUIRES;
9.45 ctx->property_type = RAZOR_PROPERTY_REQUIRES;
9.46 @@ -174,6 +191,10 @@
9.47 switch (ctx->state) {
9.48 case YUM_STATE_PACKAGE_NAME:
9.49 case YUM_STATE_PACKAGE_ARCH:
9.50 + case YUM_STATE_SUMMARY:
9.51 + case YUM_STATE_DESCRIPTION:
9.52 + case YUM_STATE_URL:
9.53 + case YUM_STATE_LICENSE:
9.54 case YUM_STATE_CHECKSUM:
9.55 case YUM_STATE_FILE:
9.56 ctx->state = YUM_STATE_BEGIN;
9.57 @@ -181,6 +202,10 @@
9.58 }
9.59
9.60 if (strcmp(name, "package") == 0) {
9.61 + razor_importer_add_details(ctx->importer, ctx->summary,
9.62 + ctx->description, ctx->url,
9.63 + ctx->license);
9.64 +
9.65 XML_StopParser(ctx->current_parser, XML_TRUE);
9.66 ctx->current_parser = ctx->filelists_parser;
9.67 }
9.68 @@ -194,6 +219,10 @@
9.69 switch (ctx->state) {
9.70 case YUM_STATE_PACKAGE_NAME:
9.71 case YUM_STATE_PACKAGE_ARCH:
9.72 + case YUM_STATE_SUMMARY:
9.73 + case YUM_STATE_DESCRIPTION:
9.74 + case YUM_STATE_URL:
9.75 + case YUM_STATE_LICENSE:
9.76 case YUM_STATE_CHECKSUM:
9.77 case YUM_STATE_FILE:
9.78 memcpy(ctx->p, s, len);
10.1 --- a/src/main.c Fri Jun 20 23:13:09 2008 -0400
10.2 +++ b/src/main.c Mon Jun 23 09:59:08 2008 -0400
10.3 @@ -150,6 +150,7 @@
10.4 struct razor_set *set;
10.5
10.6 set = razor_set_open(repo_filename);
10.7 + razor_set_open_files(set, "system-files.repo");
10.8 if (set == NULL)
10.9 return 1;
10.10 razor_set_list_files(set, argv[0]);
10.11 @@ -167,6 +168,7 @@
10.12 const char *name, *version, *arch;
10.13
10.14 set = razor_set_open(repo_filename);
10.15 + razor_set_open_files(set, "system-files.repo");
10.16 if (set == NULL)
10.17 return 1;
10.18
10.19 @@ -187,6 +189,7 @@
10.20 struct razor_set *set;
10.21
10.22 set = razor_set_open(repo_filename);
10.23 + razor_set_open_files(set, "system-files.repo");
10.24 if (set == NULL)
10.25 return 1;
10.26 razor_set_list_package_files(set, argv[0]);
10.27 @@ -351,7 +354,9 @@
10.28 set = razor_set_create_from_yum();
10.29 if (set == NULL)
10.30 return 1;
10.31 - razor_set_write(set, rawhide_repo_filename);
10.32 + razor_set_write(set, rawhide_repo_filename, RAZOR_REPO_FILE_MAIN);
10.33 + razor_set_write(set, "rawhide-details.repo", RAZOR_REPO_FILE_DETAILS);
10.34 + razor_set_write(set, "rawhide-files.repo", RAZOR_REPO_FILE_FILES);
10.35 razor_set_destroy(set);
10.36 printf("wrote %s\n", rawhide_repo_filename);
10.37
10.38 @@ -366,7 +371,9 @@
10.39 set = razor_set_create_from_rpmdb();
10.40 if (set == NULL)
10.41 return 1;
10.42 - razor_set_write(set, repo_filename);
10.43 + razor_set_write(set, repo_filename, RAZOR_REPO_FILE_MAIN);
10.44 + razor_set_write(set, "system-details.repo", RAZOR_REPO_FILE_DETAILS);
10.45 + razor_set_write(set, "system-files.repo", RAZOR_REPO_FILE_FILES);
10.46 razor_set_destroy(set);
10.47 printf("wrote %s\n", repo_filename);
10.48
10.49 @@ -447,7 +454,7 @@
10.50 }
10.51
10.52 set = razor_transaction_finish(trans);
10.53 - razor_set_write(set, updated_repo_filename);
10.54 + razor_set_write(set, updated_repo_filename, RAZOR_REPO_FILE_MAIN);
10.55 razor_set_destroy(set);
10.56 razor_set_destroy(upstream);
10.57 printf("wrote system-updated.repo\n");
10.58 @@ -480,7 +487,7 @@
10.59 return 1;
10.60
10.61 set = razor_transaction_finish(trans);
10.62 - razor_set_write(set, updated_repo_filename);
10.63 + razor_set_write(set, updated_repo_filename, RAZOR_REPO_FILE_MAIN);
10.64 razor_set_destroy(set);
10.65 razor_set_destroy(upstream);
10.66 printf("wrote system-updated.repo\n");
10.67 @@ -571,7 +578,7 @@
10.68
10.69 set = razor_importer_finish(importer);
10.70
10.71 - razor_set_write(set, repo_filename);
10.72 + razor_set_write(set, repo_filename, RAZOR_REPO_FILE_MAIN);
10.73 razor_set_destroy(set);
10.74 printf("wrote %s\n", repo_filename);
10.75
10.76 @@ -769,6 +776,42 @@
10.77 return 0;
10.78 }
10.79
10.80 +static int
10.81 +command_info(int argc, const char *argv[])
10.82 +{
10.83 + struct razor_set *set;
10.84 + struct razor_package_iterator *pi;
10.85 + struct razor_package *package;
10.86 + const char *pattern = argv[0], *name, *version, *arch;
10.87 + const char *summary, *description, *url, *license;
10.88 +
10.89 + set = razor_set_open(repo_filename);
10.90 + razor_set_open_details(set, "system-details.repo");
10.91 + pi = razor_package_iterator_create(set);
10.92 + while (razor_package_iterator_next(pi, &package,
10.93 + &name, &version, &arch)) {
10.94 + if (pattern && fnmatch(pattern, name, 0) != 0)
10.95 + continue;
10.96 +
10.97 + razor_package_get_details (set, package, &summary, &description,
10.98 + &url, &license);
10.99 +
10.100 + printf ("Name: %s\n", name);
10.101 + printf ("Arch: %s\n", arch);
10.102 + printf ("Version: %s\n", version);
10.103 + printf ("URL: %s\n", url);
10.104 + printf ("License: %s\n", license);
10.105 + printf ("Summary: %s\n", summary);
10.106 + printf ("Description:\n");
10.107 + printf ("%s\n", description);
10.108 + printf ("\n");
10.109 + }
10.110 + razor_package_iterator_destroy(pi);
10.111 + razor_set_destroy(set);
10.112 +
10.113 + return 0;
10.114 +}
10.115 +
10.116 static struct {
10.117 const char *name;
10.118 const char *description;
10.119 @@ -792,7 +835,8 @@
10.120 { "diff", "show diff between two package sets", command_diff },
10.121 { "install", "install rpm", command_install },
10.122 { "init", "init razor root", command_init },
10.123 - { "download", "download packages", command_download }
10.124 + { "download", "download packages", command_download },
10.125 + { "info", "display package details", command_info }
10.126 };
10.127
10.128 static int
11.1 --- a/src/test-driver.c Fri Jun 20 23:13:09 2008 -0400
11.2 +++ b/src/test-driver.c Mon Jun 23 09:59:08 2008 -0400
11.3 @@ -264,8 +264,12 @@
11.4 razor_transaction_install_package(ctx->trans, pkg);
11.5 }
11.6 for (i = 0; i < ctx->n_remove_pkgs; i++) {
11.7 - pkg = razor_set_get_package(ctx->repo_set,
11.8 + pkg = razor_set_get_package(ctx->system_set,
11.9 ctx->remove_pkgs[i]);
11.10 + if (!pkg)
11.11 + pkg = razor_set_get_package(ctx->repo_set,
11.12 + ctx->remove_pkgs[i]);
11.13 +
11.14 razor_transaction_remove_package(ctx->trans, pkg);
11.15 }
11.16
11.17 @@ -280,6 +284,7 @@
11.18 if (!errors) {
11.19 struct razor_set *new;
11.20 new = razor_transaction_finish(ctx->trans);
11.21 + ctx->trans = NULL;
11.22 ctx->system_set = new;
11.23 }
11.24 }