static void doquery(Pool *pool, Repo *repo, const char *query) { Id id, type = 0; char qbuf[256]; const char *qp; Dataiterator di; qp = strchr(query, ':'); if (qp) { type = strn2id(pool, query, qp - query, 0); if (!type) exit(0); qp++; } else qp = query; snprintf(qbuf, sizeof(qbuf), "repository:repomd:%s", qp); id = str2id(pool, qbuf, 0); if (!id) exit(0); dataiterator_init(&di, pool, repo, SOLVID_META, id, 0, 0); dataiterator_prepend_keyname(&di, REPOSITORY_REPOMD); while (dataiterator_step(&di)) { if (type) { dataiterator_setpos_parent(&di); if (pool_lookup_id(pool, SOLVID_POS, REPOSITORY_REPOMD_TYPE) != type) continue; } switch (di.key->type) { case REPOKEY_TYPE_ID: case REPOKEY_TYPE_CONSTANTID: printf("%s\n", id2str(pool, di.kv.id)); break; case REPOKEY_TYPE_STR: printf("%s\n", di.kv.str); break; case REPOKEY_TYPE_NUM: printf("%d\n", di.kv.num); break; case REPOKEY_TYPE_SHA1: printf("sha1:%s\n", repodata_chk2str(di.data, di.key->type, (unsigned char *)di.kv.str)); break; case REPOKEY_TYPE_SHA256: printf("sha256:%s\n", repodata_chk2str(di.data, di.key->type, (unsigned char *)di.kv.str)); break; default: break; } } dataiterator_free(&di); }
static void set_sourcerpm(Repodata *data, Solvable *s, Id handle, char *sourcerpm) { const char *p, *sevr, *sarch, *name, *evr; Pool *pool; p = strrchr(sourcerpm, '.'); if (!p || strcmp(p, ".rpm") != 0) return; p--; while (p > sourcerpm && *p != '.') p--; if (*p != '.' || p == sourcerpm) return; sarch = p-- + 1; while (p > sourcerpm && *p != '-') p--; if (*p != '-' || p == sourcerpm) return; p--; while (p > sourcerpm && *p != '-') p--; if (*p != '-' || p == sourcerpm) return; sevr = p + 1; pool = s->repo->pool; if (!strcmp(sarch, "src.rpm")) repodata_set_constantid(data, handle, SOLVABLE_SOURCEARCH, ARCH_SRC); else if (!strcmp(sarch, "nosrc.rpm")) repodata_set_constantid(data, handle, SOLVABLE_SOURCEARCH, ARCH_NOSRC); else repodata_set_constantid(data, handle, SOLVABLE_SOURCEARCH, strn2id(pool, sarch, strlen(sarch) - 4, 1)); evr = id2str(pool, s->evr); if (evr && !strncmp(sevr, evr, sarch - sevr - 1) && evr[sarch - sevr - 1] == 0) repodata_set_void(data, handle, SOLVABLE_SOURCEEVR); else repodata_set_id(data, handle, SOLVABLE_SOURCEEVR, strn2id(pool, sevr, sarch - sevr - 1, 1)); name = id2str(pool, s->name); if (name && !strncmp(sourcerpm, name, sevr - sourcerpm - 1) && name[sevr - sourcerpm - 1] == 0) repodata_set_void(data, handle, SOLVABLE_SOURCENAME); else repodata_set_id(data, handle, SOLVABLE_SOURCENAME, strn2id(pool, sourcerpm, sevr - sourcerpm - 1, 1)); }