- if (npieces < 4)
- {
- pool_debug(pool, SOLV_ERROR, "selstr2job: no selection flags\n");
- return -1;
- }
- selflags = str2selflags(pool, pieces[3]);
- queue_init(&sel);
- r = selection_make(pool, &sel, pieces[2], selflags);
- for (i = 0; i < sel.count; i += 2)
- queue_push2(jobqueue, job | sel.elements[i], sel.elements[i + 1]);
- queue_free(&sel);
- return r;
-}
-
-static void
-writedeps(Repo *repo, FILE *fp, const char *tag, Id key, Solvable *s, Offset off)
-{
- Pool *pool = repo->pool;
- Id id, *dp, *prvdp;
- int tagwritten = 0;
- const char *idstr;
-
- if (!off)
- return;
- dp = repo->idarraydata + off;
- prvdp = 0;
- while ((id = *dp++) != 0)
- {
- if (key == SOLVABLE_REQUIRES && id == SOLVABLE_PREREQMARKER)
- {
- if (tagwritten)
- fprintf(fp, "-%s\n", tag);
- tagwritten = 0;
- tag = "Prq:";
- continue;
- }
- if (key == SOLVABLE_PROVIDES && id == SOLVABLE_FILEMARKER)
- {
- prvdp = dp;
- continue;
- }
- idstr = pool_dep2str(pool, id);
- if (ISRELDEP(id))
- {
- Reldep *rd = GETRELDEP(pool, id);
- if (key == SOLVABLE_CONFLICTS && rd->flags == REL_NAMESPACE && rd->name == NAMESPACE_OTHERPROVIDERS)
- {
- if (!strncmp(idstr, "namespace:", 10))
- idstr += 10;
- }
- if (key == SOLVABLE_SUPPLEMENTS)
- {
- if (rd->flags == REL_NAMESPACE && rd->name == NAMESPACE_FILESYSTEM)
- {
- if (!strncmp(idstr, "namespace:", 10))
- idstr += 10;
- }
- else if (rd->flags == REL_NAMESPACE && rd->name == NAMESPACE_MODALIAS)
- {
- if (!strncmp(idstr, "namespace:", 10))
- idstr += 10;
- }
- else if (rd->flags == REL_AND)
- {
- /* either packageand chain or modalias */
- idstr = 0;
- if (ISRELDEP(rd->evr))
- {
- Reldep *mrd = GETRELDEP(pool, rd->evr);
- if (mrd->flags == REL_NAMESPACE && mrd->name == NAMESPACE_MODALIAS)
- {
- idstr = pool_tmpjoin(pool, "modalias(", pool_dep2str(pool, rd->name), ":");
- idstr = pool_tmpappend(pool, idstr, pool_dep2str(pool, mrd->evr), ")");
- }
- else if (mrd->flags >= 8)
- continue;
- }
- if (!idstr)
- {
- /* must be and chain */
- idstr = pool_dep2str(pool, rd->evr);
- for (;;)
- {
- id = rd->name;
- if (!ISRELDEP(id))
- break;
- rd = GETRELDEP(pool, id);
- if (rd->flags != REL_AND)
- break;
- idstr = pool_tmpjoin(pool, pool_dep2str(pool, rd->evr), ":", idstr);
- }
- idstr = pool_tmpjoin(pool, pool_dep2str(pool, id), ":", idstr);
- idstr = pool_tmpjoin(pool, "packageand(", idstr, ")");
- }
- }
- else if (rd->flags >= 8)
- continue;
- }
- }
- if (!tagwritten)
- {
- fprintf(fp, "+%s\n", tag);
- tagwritten = 1;
- }
- fprintf(fp, "%s\n", idstr);
- }
- if (key == SOLVABLE_PROVIDES)
- {
- /* add the filelist */
- Dataiterator di;
- dataiterator_init(&di, pool, repo, s - pool->solvables, SOLVABLE_FILELIST, 0, 0);
- while (dataiterator_step(&di))
- {
- const char *s = repodata_dir2str(di.data, di.kv.id, di.kv.str);
- if (prvdp)
- {
- Id id = pool_str2id(pool, s, 0);
- if (id)
- {
- for (dp = prvdp; *dp; dp++)
- if (*dp == id)
- break;
- if (*dp)
- continue; /* already included */
- }
- }
- if (!tagwritten)
- {
- fprintf(fp, "+%s", tag);
- tagwritten = 1;
- }
- fprintf(fp, "%s\n", s);
- }
- }
- if (tagwritten)
- fprintf(fp, "-%s\n", tag);
-}
-
-int
-testcase_write_testtags(Repo *repo, FILE *fp)
-{
- Pool *pool = repo->pool;
- Solvable *s;
- Id p;
- const char *name;
- const char *evr;
- const char *arch;
- const char *release;
- const char *tmp;
- unsigned int ti;
-
- fprintf(fp, "=Ver: 2.0\n");
- FOR_REPO_SOLVABLES(repo, p, s)
- {
- name = pool_id2str(pool, s->name);
- evr = pool_id2str(pool, s->evr);
- arch = pool_id2str(pool, s->arch);
- release = strrchr(evr, '-');
- if (!release)
- release = evr + strlen(evr);
- fprintf(fp, "=Pkg: %s %.*s %s %s\n", name, (int)(release - evr), evr, *release && release[1] ? release + 1 : "-", arch);
- tmp = solvable_lookup_str(s, SOLVABLE_SUMMARY);
- if (tmp)
- fprintf(fp, "=Sum: %s\n", tmp);
- writedeps(repo, fp, "Req:", SOLVABLE_REQUIRES, s, s->requires);
- writedeps(repo, fp, "Prv:", SOLVABLE_PROVIDES, s, s->provides);
- writedeps(repo, fp, "Obs:", SOLVABLE_OBSOLETES, s, s->obsoletes);
- writedeps(repo, fp, "Con:", SOLVABLE_CONFLICTS, s, s->conflicts);
- writedeps(repo, fp, "Rec:", SOLVABLE_RECOMMENDS, s, s->recommends);
- writedeps(repo, fp, "Sup:", SOLVABLE_SUPPLEMENTS, s, s->supplements);
- writedeps(repo, fp, "Sug:", SOLVABLE_SUGGESTS, s, s->suggests);
- writedeps(repo, fp, "Enh:", SOLVABLE_ENHANCES, s, s->enhances);
- if (s->vendor)
- fprintf(fp, "=Vnd: %s\n", pool_id2str(pool, s->vendor));
- ti = solvable_lookup_num(s, SOLVABLE_BUILDTIME, 0);
- if (ti)
- fprintf(fp, "=Tim: %u\n", ti);
- }
- return 0;