struct razor_set *set;
struct razor_package_iterator *pi;
struct razor_package *package;
- const char *pattern, *name, *version;
+ const char *pattern, *name, *version, *arch;
int only_names = 0, i = 0;
if (strcmp(argv[i], "--only-names") == 0) {
pattern = argv[i];
set = razor_set_open(repo_filename);
pi = razor_package_iterator_create(set);
- while (razor_package_iterator_next(pi, &package, &name, &version)) {
+ while (razor_package_iterator_next(pi, &package,
+ &name, &version, &arch)) {
if (pattern && fnmatch(pattern, name, 0) != 0)
continue;
if (only_names)
printf("%s\n", name);
else
- printf("%s-%s\n", name, version);
+ printf("%s-%s.%s\n", name, version, arch);
}
razor_package_iterator_destroy(pi);
razor_set_destroy(set);
struct razor_set *set;
struct razor_package_iterator *pi;
struct razor_package *package;
- const char *name, *version;
+ const char *name, *version, *arch;
set = razor_set_open(repo_filename);
if (set == NULL)
return 1;
pi = razor_package_iterator_create_for_file(set, argv[0]);
- while (razor_package_iterator_next(pi, &package, &name, &version))
+ while (razor_package_iterator_next(pi, &package,
+ &name, &version, &arch))
printf("%s-%s\n", name, version);
razor_package_iterator_destroy(pi);
{
struct razor_package_iterator *pi;
struct razor_package *package;
- const char *name, *version;
+ const char *name, *version, *arch;
pi = razor_package_iterator_create_for_property(set, property);
- while (razor_package_iterator_next(pi, &package, &name, &version))
- printf("%s-%s\n", name, version);
+ while (razor_package_iterator_next(pi, &package,
+ &name, &version, &arch))
+ printf("%s-%s.%s\n", name, version, arch);
razor_package_iterator_destroy(pi);
}
static void
print_diff(const char *name,
- const char *old_version, const char *new_version, void *data)
+ const char *old_version, const char *new_version, const char *arch,
+ void *data)
{
if (old_version)
printf("removing %s %s\n", name, old_version);
{
struct razor_package_iterator *pi;
struct razor_package *package;
- const char *name, *version;
+ const char *name, *version, *arch;
char **packages;
int i;
packages = malloc(count * sizeof *packages);
pi = razor_package_iterator_create(set);
i = 0;
- while (razor_package_iterator_next(pi, &package, &name, &version))
+ while (razor_package_iterator_next(pi, &package,
+ &name, &version, &arch))
packages[i++] = strdup(name);
razor_package_iterator_destroy(pi);
struct razor_set *set;
struct razor_package_iterator *pi;
struct razor_package *package;
- const char *pattern = argv[0], *name, *version;
+ const char *pattern = argv[0], *name, *version, *arch;
char url[256], file[256];
CURL *curl;
set = razor_set_open(rawhide_repo_filename);
pi = razor_package_iterator_create(set);
- while (razor_package_iterator_next(pi, &package, &name, &version)) {
+ while (razor_package_iterator_next(pi, &package,
+ &name, &version, &arch)) {
if (pattern && fnmatch(pattern, name, 0) != 0)
continue;
uint name : 24;
uint flags : 8;
uint32_t version;
+ uint32_t arch;
struct list_head properties;
struct list_head files;
};
void
razor_importer_begin_package(struct razor_importer *importer,
- const char *name, const char *version)
+ const char *name,
+ const char *version,
+ const char *arch)
{
struct razor_package *p;
p->name = hashtable_tokenize(&importer->table, name);
p->flags = 0;
p->version = hashtable_tokenize(&importer->table, version);
+ p->arch = hashtable_tokenize(&importer->table, arch);
importer->package = p;
array_init(&importer->properties);
int
razor_package_iterator_next(struct razor_package_iterator *pi,
struct razor_package **package,
- const char **name, const char **version)
+ const char **name,
+ const char **version,
+ const char **arch)
{
char *pool;
int valid;
*package = p;
*name = &pool[p->name];
*version = &pool[p->version];
+ *arch = &pool[p->arch];
} else {
*package = NULL;
}
{
struct razor_package_iterator *pi;
struct razor_package *p;
- const char *name, *version;
+ const char *name, *version, *arch;
pi = razor_package_iterator_create(set);
- while (razor_package_iterator_next(pi, &p, &name, &version)) {
+ while (razor_package_iterator_next(pi, &p, &name, &version, &arch)) {
if (strcmp(package, name) == 0)
break;
}
p->flags = flags;
p->version = hashtable_tokenize(&merger->table,
&pool[package->version]);
+ p->arch = hashtable_tokenize(&merger->table,
+ &pool[package->arch]);
p->properties = package->properties;
r = list_first(&package->properties, &source->set->property_pool);
{
struct razor_package_iterator *pi1, *pi2;
struct razor_package *p1, *p2;
- const char *name1, *name2, *version1, *version2;
+ const char *name1, *name2, *version1, *version2, *arch1, *arch2;
int res;
pi1 = razor_package_iterator_create(set);
pi2 = razor_package_iterator_create(upstream);
- razor_package_iterator_next(pi1, &p1, &name1, &version1);
- razor_package_iterator_next(pi2, &p2, &name2, &version2);
+ razor_package_iterator_next(pi1, &p1, &name1, &version1, &arch1);
+ razor_package_iterator_next(pi2, &p2, &name2, &version2, &arch2);
while (p1 || p2) {
if (p1 && p2) {
}
if (p2 == NULL || res < 0)
- callback(name1, version1, NULL, data);
+ callback(name1, version1, NULL, arch1, data);
else if (p1 == NULL || res > 0)
- callback(name2, NULL, version2, data);
+ callback(name2, NULL, version2, arch2, data);
if (p1 != NULL && res <= 0)
razor_package_iterator_next(pi1, &p1,
- &name1, &version1);
+ &name1, &version1, &arch1);
if (p2 != NULL && res >= 0)
razor_package_iterator_next(pi2, &p2,
- &name2, &version2);
+ &name2, &version2, &arch2);
}
razor_package_iterator_destroy(pi1);
int razor_package_iterator_next(struct razor_package_iterator *pi,
struct razor_package **package,
- const char **name, const char **version);
+ const char **name,
+ const char **version,
+ const char **arch);
void razor_package_iterator_destroy(struct razor_package_iterator *pi);
struct razor_property_iterator;
typedef void (*razor_package_callback_t)(const char *name,
const char *old_version,
const char *new_version,
+ const char *arch,
void *data);
void
razor_set_diff(struct razor_set *set, struct razor_set *upstream,
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,
+ const char *arch);
void razor_importer_add_property(struct razor_importer *importer,
const char *name,
enum razor_version_relation relation,
int
razor_importer_add_rpm(struct razor_importer *importer, struct razor_rpm *rpm)
{
- const char *name, *version, *release;
+ const char *name, *version, *release, *arch;
const uint_32 *epoch;
char evr[128], buf[16];
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);
+ arch = razor_rpm_get_indirect(rpm, RPMTAG_ARCH, NULL);
if (epoch) {
snprintf(buf, sizeof buf, "%u", ntohl(*epoch));
} else {
razor_build_evr(evr, sizeof evr, NULL, version, release);
}
- razor_importer_begin_package(importer, name, evr);
+ razor_importer_begin_package(importer, name, evr, arch);
import_properties(importer, RAZOR_PROPERTY_REQUIRES, rpm,
RPMTAG_REQUIRENAME,
rpmdbMatchIterator iter;
Header h;
int_32 type, count, i;
- union rpm_entry name, epoch, version, release;
+ union rpm_entry name, epoch, version, release, arch;
union rpm_entry basenames, dirnames, dirindexes;
char filename[PATH_MAX], evr[128], buf[16];
rpmdb db;
headerGetEntry(h, RPMTAG_EPOCH, &type, &epoch.p, &count);
headerGetEntry(h, RPMTAG_VERSION, &type, &version.p, &count);
headerGetEntry(h, RPMTAG_RELEASE, &type, &release.p, &count);
+ headerGetEntry(h, RPMTAG_ARCH, &type, &arch.p, &count);
if (epoch.flags != NULL) {
snprintf(buf, sizeof buf, "%u", *epoch.flags);
NULL, version.string, release.string);
}
- razor_importer_begin_package(importer, name.string, evr);
+ razor_importer_begin_package(importer,
+ name.string, evr, arch.string);
add_properties(importer, RAZOR_PROPERTY_REQUIRES, h,
RPMTAG_REQUIRENAME,
{
const char *name = NULL, *version = NULL, *arch = NULL;
- get_atts(atts, "name", &name, "version", &version, "arch", &arch, NULL);
+ get_atts(atts, "name", &name,
+ "version", &version,
+ "arch", &arch,
+ NULL);
+
if (!name) {
fprintf(stderr, " package with no name\n");
exit(1);
}
- razor_importer_begin_package(ctx->importer, name, version);
+ razor_importer_begin_package(ctx->importer, name, version, arch);
razor_importer_add_property(ctx->importer, name,
RAZOR_VERSION_EQUAL, version,
RAZOR_PROPERTY_PROVIDES);
static void
diff_callback(const char *name,
- const char *old_version, const char *new_version,
+ const char *old_version,
+ const char *new_version,
+ const char *arch,
void *data)
{
struct test_context *ctx = data;
enum {
YUM_STATE_BEGIN,
YUM_STATE_PACKAGE_NAME,
+ YUM_STATE_PACKAGE_ARCH,
YUM_STATE_CHECKSUM,
YUM_STATE_REQUIRES,
YUM_STATE_PROVIDES,
struct razor_importer *importer;
struct import_property_context *current_property_context;
- char name[256], buffer[512], *p;
+ char name[256], arch[64], buffer[512], *p;
char pkgid[128];
int state;
};
if (strcmp(name, "name") == 0) {
ctx->state = YUM_STATE_PACKAGE_NAME;
ctx->p = ctx->name;
+ } else if (strcmp(name, "arch") == 0) {
+ ctx->state = YUM_STATE_PACKAGE_ARCH;
+ ctx->p = ctx->arch;
} else if (strcmp(name, "version") == 0) {
epoch = NULL;
version = NULL;
}
razor_build_evr(buffer, sizeof buffer, epoch, version, release);
- razor_importer_begin_package(ctx->importer, ctx->name, buffer);
+ razor_importer_begin_package(ctx->importer,
+ ctx->name, buffer, ctx->arch);
} else if (strcmp(name, "checksum") == 0) {
ctx->p = ctx->pkgid;
ctx->state = YUM_STATE_CHECKSUM;
switch (ctx->state) {
case YUM_STATE_PACKAGE_NAME:
+ case YUM_STATE_PACKAGE_ARCH:
case YUM_STATE_CHECKSUM:
case YUM_STATE_FILE:
ctx->state = YUM_STATE_BEGIN;
switch (ctx->state) {
case YUM_STATE_PACKAGE_NAME:
+ case YUM_STATE_PACKAGE_ARCH:
case YUM_STATE_CHECKSUM:
case YUM_STATE_FILE:
memcpy(ctx->p, s, len);