1.1 --- a/razor.c Mon Mar 03 16:19:56 2008 -0500
1.2 +++ b/razor.c Tue Mar 04 10:55:01 2008 -0500
1.3 @@ -229,6 +229,29 @@
1.4 }
1.5
1.6 void
1.7 +razor_build_evr(char *evr_buf, int size, const char *epoch,
1.8 + const char *version, const char *release)
1.9 +{
1.10 + int len;
1.11 +
1.12 + if (!version || !*version) {
1.13 + *evr_buf = '\0';
1.14 + return;
1.15 + }
1.16 +
1.17 + if (epoch && *epoch && strcmp(epoch, "0") != 0) {
1.18 + len = snprintf(evr_buf, size, "%s:", epoch);
1.19 + evr_buf += len;
1.20 + size -= len;
1.21 + }
1.22 + len = snprintf(evr_buf, size, "%s", version);
1.23 + evr_buf += len;
1.24 + size -= len;
1.25 + if (release && *release)
1.26 + snprintf(evr_buf, size, "-%s", release);
1.27 +}
1.28 +
1.29 +void
1.30 razor_importer_begin_package(struct razor_importer *importer,
1.31 const char *name, const char *version)
1.32 {
2.1 --- a/razor.h Mon Mar 03 16:19:56 2008 -0500
2.2 +++ b/razor.h Tue Mar 04 10:55:01 2008 -0500
2.3 @@ -130,7 +130,7 @@
2.4 struct razor_importer *razor_importer_new(void);
2.5 void razor_importer_destroy(struct razor_importer *importer);
2.6 void razor_importer_begin_package(struct razor_importer *importer,
2.7 - const char *name, const char *version);
2.8 + const char *name, const char *version);
2.9 void razor_importer_add_property(struct razor_importer *importer,
2.10 const char *name,
2.11 enum razor_version_relation relation,
2.12 @@ -145,6 +145,9 @@
2.13
2.14 struct razor_set *razor_importer_finish(struct razor_importer *importer);
2.15
2.16 +void razor_build_evr(char *evr_buf, int size, const char *epoch,
2.17 + const char *version, const char *release);
2.18 +
2.19 struct razor_set *razor_set_create_from_yum(void);
2.20 struct razor_set *razor_set_create_from_rpmdb(void);
2.21
3.1 --- a/rpm.c Mon Mar 03 16:19:56 2008 -0500
3.2 +++ b/rpm.c Tue Mar 04 10:55:01 2008 -0500
3.3 @@ -109,7 +109,6 @@
3.4
3.5 flags = *(uint_32 *)razor_rpm_get_indirect(rpm, flags_tag, &count);
3.6
3.7 - /* FIXME: Concat version and release. */
3.8 version = razor_rpm_get_indirect(rpm, version_tag, &count);
3.9 for (i = 0; i < count; i++) {
3.10 razor_importer_add_property(importer, name,
3.11 @@ -525,14 +524,16 @@
3.12 int
3.13 razor_importer_add_rpm(struct razor_importer *importer, struct razor_rpm *rpm)
3.14 {
3.15 - const char *name, *version, *release;
3.16 + const char *name, *epoch, *version, *release;
3.17 + char evr[128];
3.18
3.19 name = razor_rpm_get_indirect(rpm, RPMTAG_NAME, NULL);
3.20 + epoch = razor_rpm_get_indirect(rpm, RPMTAG_EPOCH, NULL);
3.21 version = razor_rpm_get_indirect(rpm, RPMTAG_VERSION, NULL);
3.22 release = razor_rpm_get_indirect(rpm, RPMTAG_RELEASE, NULL);
3.23
3.24 - /* FIXME: Concatenate version and release. */
3.25 - razor_importer_begin_package(importer, name, version);
3.26 + razor_build_evr(evr, sizeof evr, epoch, version, release);
3.27 + razor_importer_begin_package(importer, name, evr);
3.28
3.29 import_properties(importer, RAZOR_PROPERTY_REQUIRES, rpm,
3.30 RPMTAG_REQUIRENAME,
3.31 @@ -595,9 +596,9 @@
3.32 rpmdbMatchIterator iter;
3.33 Header h;
3.34 int_32 type, count, i;
3.35 - union rpm_entry name, version, release;
3.36 + union rpm_entry name, epoch, version, release;
3.37 union rpm_entry basenames, dirnames, dirindexes;
3.38 - char filename[PATH_MAX];
3.39 + char filename[PATH_MAX], evr[128];
3.40 rpmdb db;
3.41
3.42 rpmReadConfigFiles(NULL, NULL);
3.43 @@ -612,11 +613,12 @@
3.44 iter = rpmdbInitIterator(db, 0, NULL, 0);
3.45 while (h = rpmdbNextIterator(iter), h != NULL) {
3.46 headerGetEntry(h, RPMTAG_NAME, &type, &name.p, &count);
3.47 + headerGetEntry(h, RPMTAG_EPOCH, &type, &epoch.p, &count);
3.48 headerGetEntry(h, RPMTAG_VERSION, &type, &version.p, &count);
3.49 headerGetEntry(h, RPMTAG_RELEASE, &type, &release.p, &count);
3.50 - snprintf(filename, sizeof filename, "%s-%s",
3.51 - version.string, release.string);
3.52 - razor_importer_begin_package(importer, name.string, filename);
3.53 + razor_build_evr(evr, sizeof evr, epoch.string, version.string,
3.54 + release.string);
3.55 + razor_importer_begin_package(importer, name.string, evr);
3.56
3.57 add_properties(importer, RAZOR_PROPERTY_REQUIRES, h,
3.58 RPMTAG_REQUIRENAME,
4.1 --- a/yum.c Mon Mar 03 16:19:56 2008 -0500
4.2 +++ b/yum.c Tue Mar 04 10:55:01 2008 -0500
4.3 @@ -62,7 +62,7 @@
4.4 yum_primary_start_element(void *data, const char *name, const char **atts)
4.5 {
4.6 struct yum_context *ctx = data;
4.7 - const char *n, *version, *release, *flags;
4.8 + const char *n, *epoch, *version, *release, *flags;
4.9 char buffer[128];
4.10 int i;
4.11
4.12 @@ -70,10 +70,13 @@
4.13 ctx->state = YUM_STATE_PACKAGE_NAME;
4.14 ctx->p = ctx->name;
4.15 } else if (strcmp(name, "version") == 0) {
4.16 + epoch = NULL;
4.17 version = NULL;
4.18 release = NULL;
4.19 for (i = 0; atts[i]; i += 2) {
4.20 - if (strcmp(atts[i], "ver") == 0)
4.21 + if (strcmp(atts[i], "epoch") == 0)
4.22 + epoch = atts[i + 1];
4.23 + else if (strcmp(atts[i], "ver") == 0)
4.24 version = atts[i + 1];
4.25 else if (strcmp(atts[i], "rel") == 0)
4.26 release = atts[i + 1];
4.27 @@ -84,7 +87,7 @@
4.28 return;
4.29 }
4.30
4.31 - snprintf(buffer, sizeof buffer, "%s-%s", version, release);
4.32 + razor_build_evr(buffer, sizeof buffer, epoch, version, release);
4.33 razor_importer_begin_package(ctx->importer, ctx->name, buffer);
4.34 } else if (strcmp(name, "checksum") == 0) {
4.35 ctx->p = ctx->pkgid;
4.36 @@ -100,12 +103,15 @@
4.37 } else if (strcmp(name, "rpm:entry") == 0 &&
4.38 ctx->state != YUM_STATE_BEGIN) {
4.39 n = NULL;
4.40 + epoch = NULL;
4.41 version = NULL;
4.42 release = NULL;
4.43 flags = NULL;
4.44 for (i = 0; atts[i]; i += 2) {
4.45 if (strcmp(atts[i], "name") == 0)
4.46 n = atts[i + 1];
4.47 + else if (strcmp(atts[i], "epoch") == 0)
4.48 + epoch = atts[i + 1];
4.49 else if (strcmp(atts[i], "ver") == 0)
4.50 version = atts[i + 1];
4.51 else if (strcmp(atts[i], "rel") == 0)
4.52 @@ -120,14 +126,7 @@
4.53 return;
4.54 }
4.55
4.56 - if (version && release)
4.57 - snprintf(buffer, sizeof buffer,
4.58 - "%s-%s", version, release);
4.59 - else if (version)
4.60 - strcpy(buffer, version);
4.61 - else
4.62 - buffer[0] = '\0';
4.63 -
4.64 + razor_build_evr(buffer, sizeof buffer, epoch, version, release);
4.65 switch (ctx->state) {
4.66 case YUM_STATE_REQUIRES:
4.67 razor_importer_add_property(ctx->importer, n,