Add url and license package data as well
authorJames Bowes <jbowes@redhat.com>
Sun, 8 Jun 2008 22:29:24 +0000 (18:29 -0400)
committerJames Bowes <jbowes@redhat.com>
Sun, 8 Jun 2008 22:29:24 +0000 (18:29 -0400)
main.c
razor.c
razor.h
rpm.c
yum.c

diff --git a/main.c b/main.c
index f2f587d..060c335 100644 (file)
--- a/main.c
+++ b/main.c
@@ -817,6 +817,7 @@ command_info(int argc, const char *argv[])
        struct razor_package_iterator *pi;
        struct razor_package *package;
        const char *pattern = argv[0], *name, *version, *arch;
+       const char *summary, *description, *url, *license;
 
        set = razor_set_open(repo_filename);
        pi = razor_package_iterator_create(set);
@@ -825,12 +826,17 @@ command_info(int argc, const char *argv[])
                if (pattern && fnmatch(pattern, name, 0) != 0)
                        continue;
 
+               razor_package_get_details (set, package, &summary, &description,
+                                          &url, &license);
+
                printf ("Name:        %s\n", name);
                printf ("Arch:        %s\n", arch);
                printf ("Version:     %s\n", version);
-               printf ("Summary:     %s\n", razor_package_get_summary (set, package));
+               printf ("URL:         %s\n", url);
+               printf ("License:     %s\n", license);
+               printf ("Summary:     %s\n", summary);
                printf ("Description:\n");
-               printf ("%s\n", razor_package_get_description (set, package));
+               printf ("%s\n", description);
                printf ("\n");
        }
        razor_package_iterator_destroy(pi);
diff --git a/razor.c b/razor.c
index eebdd51..33aae80 100644 (file)
--- a/razor.c
+++ b/razor.c
@@ -63,10 +63,12 @@ struct razor_set_header {
 struct razor_package {
        uint name  : 24;
        uint flags : 8;
-       uint32_t summary;
-       uint32_t description;
        uint32_t version;
        uint32_t arch;
+       uint32_t summary;
+       uint32_t description;
+       uint32_t url;
+       uint32_t license;
        struct list_head properties;
        struct list_head files;
 };
@@ -332,10 +334,15 @@ razor_importer_finish_package(struct razor_importer *importer)
 void
 razor_importer_add_details(struct razor_importer *importer,
                           const char *summary,
-                          const char *description)
+                          const char *description,
+                          const char *url,
+                          const char *license)
 {
        importer->package->summary = hashtable_tokenize(&importer->table, summary);
        importer->package->description = hashtable_tokenize(&importer->table, description);
+       importer->package->url = hashtable_tokenize(&importer->table, url);
+       importer->package->license = hashtable_tokenize(&importer->table, license);
+
 }
 
 void
@@ -921,18 +928,17 @@ razor_set_get_package(struct razor_set *set, const char *package)
        return p;
 }
 
-const char *
-razor_package_get_summary(struct razor_set *set, struct razor_package *package)
+void
+razor_package_get_details(struct razor_set *set, struct razor_package *package,
+                         const char **summary, const char **description,
+                         const char **url, const char **license)
 {
        const char *pool = set->string_pool.data;
-       return &pool[package->summary];
-}
 
-const char *
-razor_package_get_description(struct razor_set *set, struct razor_package *package)
-{
-       const char *pool = set->string_pool.data;
-       return &pool[package->description];
+       *summary = &pool[package->summary];
+       *description = &pool[package->description];
+       *url = &pool[package->url];
+       *license = &pool[package->license];
 }
 
 struct razor_property_iterator {
diff --git a/razor.h b/razor.h
index 5927991..036285f 100644 (file)
--- a/razor.h
+++ b/razor.h
@@ -51,10 +51,10 @@ int razor_set_write(struct razor_set *set, const char *filename);
 struct razor_package *
 razor_set_get_package(struct razor_set *set, const char *package);
 
-const char *
-razor_package_get_summary(struct razor_set *set, struct razor_package *package);
-const char *
-razor_package_get_description(struct razor_set *set, struct razor_package *package);
+void
+razor_package_get_details(struct razor_set *set, struct razor_package *package,
+                         const char **summary, const char **description,
+                         const char **url, const char **license);
 
 struct razor_package_iterator;
 struct razor_package_iterator *
@@ -177,7 +177,9 @@ void razor_importer_begin_package(struct razor_importer *importer,
                                  const char *arch);
 void razor_importer_add_details(struct razor_importer *importer,
                                const char *summary,
-                               const char *description);
+                               const char *description,
+                               const char *url,
+                               const char *license);
 void razor_importer_add_property(struct razor_importer *importer,
                                 const char *name,
                                 enum razor_version_relation relation,
diff --git a/rpm.c b/rpm.c
index 4eec65f..2832da3 100644 (file)
--- a/rpm.c
+++ b/rpm.c
@@ -673,7 +673,8 @@ razor_set_create_from_rpmdb(void)
        rpmdbMatchIterator iter;
        Header h;
        int_32 type, count, i;
-       union rpm_entry name, epoch, version, release, arch, summary, description;
+       union rpm_entry name, epoch, version, release, arch;
+       union rpm_entry summary, description, url, license;
        union rpm_entry basenames, dirnames, dirindexes;
        char filename[PATH_MAX], evr[128], buf[16];
        rpmdb db;
@@ -696,6 +697,8 @@ razor_set_create_from_rpmdb(void)
                headerGetEntry(h, RPMTAG_ARCH, &type, &arch.p, &count);
                headerGetEntry(h, RPMTAG_SUMMARY, &type, &summary.p, &count);
                headerGetEntry(h, RPMTAG_DESCRIPTION, &type, &description.p, &count);
+               headerGetEntry(h, RPMTAG_URL, &type, &url.p, &count);
+               headerGetEntry(h, RPMTAG_LICENSE, &type, &license.p, &count);
 
                if (epoch.flags != NULL) {
                        snprintf(buf, sizeof buf, "%u", *epoch.flags);
@@ -708,7 +711,9 @@ razor_set_create_from_rpmdb(void)
 
                razor_importer_begin_package(importer,
                                             name.string, evr, arch.string);
-               razor_importer_add_details(importer, summary.string, description.string);
+               razor_importer_add_details(importer, summary.string,
+                                          description.string, url.string,
+                                          license.string);
 
                add_properties(importer, RAZOR_PROPERTY_REQUIRES, h,
                               RPMTAG_REQUIRENAME,
diff --git a/yum.c b/yum.c
index 0cb69f0..9ed10cf 100644 (file)
--- a/yum.c
+++ b/yum.c
@@ -39,6 +39,8 @@ enum {
        YUM_STATE_PACKAGE_ARCH,
        YUM_STATE_SUMMARY,
        YUM_STATE_DESCRIPTION,
+       YUM_STATE_URL,
+       YUM_STATE_LICENSE,
        YUM_STATE_CHECKSUM,
        YUM_STATE_REQUIRES,
        YUM_STATE_PROVIDES,
@@ -54,7 +56,8 @@ struct yum_context {
 
        struct razor_importer *importer;
        struct import_property_context *current_property_context;
-       char name[256], arch[64], summary[512], description[4096], buffer[512], *p;
+       char name[256], arch[64], summary[512], description[4096];
+       char url[256], license[64], buffer[512], *p;
        char pkgid[128];
        int state;
 };
@@ -121,9 +124,15 @@ yum_primary_start_element(void *data, const char *name, const char **atts)
        } else if (strcmp(name, "description") == 0) {
                ctx->p = ctx->description;
                ctx->state = YUM_STATE_DESCRIPTION;
+       } else if (strcmp(name, "url") == 0) {
+               ctx->p = ctx->url;
+               ctx->state = YUM_STATE_URL;
        } else if (strcmp(name, "checksum") == 0) {
                ctx->p = ctx->pkgid;
                ctx->state = YUM_STATE_CHECKSUM;
+       } else if (strcmp(name, "rpm:license") == 0) {
+               ctx->p = ctx->license;
+               ctx->state = YUM_STATE_LICENSE;
        } else if (strcmp(name, "rpm:requires") == 0) {
                ctx->state = YUM_STATE_REQUIRES;
        } else if (strcmp(name, "rpm:provides") == 0) {
@@ -198,6 +207,8 @@ yum_primary_end_element (void *data, const char *name)
        case YUM_STATE_PACKAGE_ARCH:
        case YUM_STATE_SUMMARY:
        case YUM_STATE_DESCRIPTION:
+       case YUM_STATE_URL:
+       case YUM_STATE_LICENSE:
        case YUM_STATE_CHECKSUM:
        case YUM_STATE_FILE:
                ctx->state = YUM_STATE_BEGIN;
@@ -205,7 +216,9 @@ yum_primary_end_element (void *data, const char *name)
        }
 
        if (strcmp(name, "package") == 0) {
-               razor_importer_add_details(ctx->importer, ctx->summary, ctx->description);
+               razor_importer_add_details(ctx->importer, ctx->summary,
+                                          ctx->description, ctx->url,
+                                          ctx->license);
 
                XML_StopParser(ctx->current_parser, XML_TRUE);
                ctx->current_parser = ctx->filelists_parser;
@@ -222,6 +235,8 @@ yum_character_data (void *data, const XML_Char *s, int len)
        case YUM_STATE_PACKAGE_ARCH:
        case YUM_STATE_SUMMARY:
        case YUM_STATE_DESCRIPTION:
+       case YUM_STATE_URL:
+       case YUM_STATE_LICENSE:
        case YUM_STATE_CHECKSUM:
        case YUM_STATE_FILE:
                memcpy(ctx->p, s, len);