}
void
+razor_build_evr(char *evr_buf, int size, const char *epoch,
+ const char *version, const char *release)
+{
+ int len;
+
+ if (!version || !*version) {
+ *evr_buf = '\0';
+ return;
+ }
+
+ if (epoch && *epoch && strcmp(epoch, "0") != 0) {
+ len = snprintf(evr_buf, size, "%s:", epoch);
+ evr_buf += len;
+ size -= len;
+ }
+ len = snprintf(evr_buf, size, "%s", version);
+ evr_buf += len;
+ size -= len;
+ if (release && *release)
+ snprintf(evr_buf, size, "-%s", release);
+}
+
+void
razor_importer_begin_package(struct razor_importer *importer,
const char *name, const char *version)
{
struct razor_importer *razor_importer_new(void);
void razor_importer_destroy(struct razor_importer *importer);
void razor_importer_begin_package(struct razor_importer *importer,
- const char *name, const char *version);
+ const char *name, const char *version);
void razor_importer_add_property(struct razor_importer *importer,
const char *name,
enum razor_version_relation relation,
struct razor_set *razor_importer_finish(struct razor_importer *importer);
+void razor_build_evr(char *evr_buf, int size, const char *epoch,
+ const char *version, const char *release);
+
struct razor_set *razor_set_create_from_yum(void);
struct razor_set *razor_set_create_from_rpmdb(void);
flags = *(uint_32 *)razor_rpm_get_indirect(rpm, flags_tag, &count);
- /* FIXME: Concat version and release. */
version = razor_rpm_get_indirect(rpm, version_tag, &count);
for (i = 0; i < count; i++) {
razor_importer_add_property(importer, name,
int
razor_importer_add_rpm(struct razor_importer *importer, struct razor_rpm *rpm)
{
- const char *name, *version, *release;
+ const char *name, *epoch, *version, *release;
+ char evr[128];
name = razor_rpm_get_indirect(rpm, RPMTAG_NAME, NULL);
+ epoch = razor_rpm_get_indirect(rpm, RPMTAG_EPOCH, NULL);
version = razor_rpm_get_indirect(rpm, RPMTAG_VERSION, NULL);
release = razor_rpm_get_indirect(rpm, RPMTAG_RELEASE, NULL);
- /* FIXME: Concatenate version and release. */
- razor_importer_begin_package(importer, name, version);
+ razor_build_evr(evr, sizeof evr, epoch, version, release);
+ razor_importer_begin_package(importer, name, evr);
import_properties(importer, RAZOR_PROPERTY_REQUIRES, rpm,
RPMTAG_REQUIRENAME,
rpmdbMatchIterator iter;
Header h;
int_32 type, count, i;
- union rpm_entry name, version, release;
+ union rpm_entry name, epoch, version, release;
union rpm_entry basenames, dirnames, dirindexes;
- char filename[PATH_MAX];
+ char filename[PATH_MAX], evr[128];
rpmdb db;
rpmReadConfigFiles(NULL, NULL);
iter = rpmdbInitIterator(db, 0, NULL, 0);
while (h = rpmdbNextIterator(iter), h != NULL) {
headerGetEntry(h, RPMTAG_NAME, &type, &name.p, &count);
+ headerGetEntry(h, RPMTAG_EPOCH, &type, &epoch.p, &count);
headerGetEntry(h, RPMTAG_VERSION, &type, &version.p, &count);
headerGetEntry(h, RPMTAG_RELEASE, &type, &release.p, &count);
- snprintf(filename, sizeof filename, "%s-%s",
- version.string, release.string);
- razor_importer_begin_package(importer, name.string, filename);
+ razor_build_evr(evr, sizeof evr, epoch.string, version.string,
+ release.string);
+ razor_importer_begin_package(importer, name.string, evr);
add_properties(importer, RAZOR_PROPERTY_REQUIRES, h,
RPMTAG_REQUIRENAME,
yum_primary_start_element(void *data, const char *name, const char **atts)
{
struct yum_context *ctx = data;
- const char *n, *version, *release, *flags;
+ const char *n, *epoch, *version, *release, *flags;
char buffer[128];
int i;
ctx->state = YUM_STATE_PACKAGE_NAME;
ctx->p = ctx->name;
} else if (strcmp(name, "version") == 0) {
+ epoch = NULL;
version = NULL;
release = NULL;
for (i = 0; atts[i]; i += 2) {
- if (strcmp(atts[i], "ver") == 0)
+ if (strcmp(atts[i], "epoch") == 0)
+ epoch = atts[i + 1];
+ else if (strcmp(atts[i], "ver") == 0)
version = atts[i + 1];
else if (strcmp(atts[i], "rel") == 0)
release = atts[i + 1];
return;
}
- snprintf(buffer, sizeof buffer, "%s-%s", version, release);
+ razor_build_evr(buffer, sizeof buffer, epoch, version, release);
razor_importer_begin_package(ctx->importer, ctx->name, buffer);
} else if (strcmp(name, "checksum") == 0) {
ctx->p = ctx->pkgid;
} else if (strcmp(name, "rpm:entry") == 0 &&
ctx->state != YUM_STATE_BEGIN) {
n = NULL;
+ epoch = NULL;
version = NULL;
release = NULL;
flags = NULL;
for (i = 0; atts[i]; i += 2) {
if (strcmp(atts[i], "name") == 0)
n = atts[i + 1];
+ else if (strcmp(atts[i], "epoch") == 0)
+ epoch = atts[i + 1];
else if (strcmp(atts[i], "ver") == 0)
version = atts[i + 1];
else if (strcmp(atts[i], "rel") == 0)
return;
}
- if (version && release)
- snprintf(buffer, sizeof buffer,
- "%s-%s", version, release);
- else if (version)
- strcpy(buffer, version);
- else
- buffer[0] = '\0';
-
+ razor_build_evr(buffer, sizeof buffer, epoch, version, release);
switch (ctx->state) {
case YUM_STATE_REQUIRES:
razor_importer_add_property(ctx->importer, n,