From: Michael Schroeder Date: Wed, 5 Mar 2008 12:01:30 +0000 (+0000) Subject: - create sourcerpm data X-Git-Tag: BASE-SuSE-Code-12_1-Branch~843 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d1266cd24469eeba46ebe94312db84af4f684323;p=platform%2Fupstream%2Flibsolv.git - create sourcerpm data --- diff --git a/tools/repo_rpmdb.c b/tools/repo_rpmdb.c index 3001f5e..d569ab9 100644 --- a/tools/repo_rpmdb.c +++ b/tools/repo_rpmdb.c @@ -619,6 +619,7 @@ rpm2solv(Pool *pool, Repo *repo, Repodata *repodata, Solvable *s, RpmHead *rpmhe { char *name; char *evr; + char *sourcerpm; name = headstring(rpmhead, TAG_NAME); if (!strcmp(name, "gpg-pubkey")) @@ -629,7 +630,8 @@ rpm2solv(Pool *pool, Repo *repo, Repodata *repodata, Solvable *s, RpmHead *rpmhe fprintf(stderr, "package has no name\n"); exit(1); } - if (headstring(rpmhead, TAG_SOURCERPM)) + sourcerpm = headstring(rpmhead, TAG_SOURCERPM); + if (sourcerpm) s->arch = str2id(pool, headstring(rpmhead, TAG_ARCH), 1); else { @@ -642,7 +644,6 @@ rpm2solv(Pool *pool, Repo *repo, Repodata *repodata, Solvable *s, RpmHead *rpmhe s->arch = ARCH_NOARCH; evr = headtoevr(rpmhead); s->evr = str2id(pool, evr, 1); - sat_free(evr); s->vendor = str2id(pool, headstring(rpmhead, TAG_VENDOR), 1); s->provides = makedeps(pool, repo, rpmhead, TAG_PROVIDENAME, TAG_PROVIDEVERSION, TAG_PROVIDEFLAGS, 0); @@ -722,7 +723,49 @@ rpm2solv(Pool *pool, Repo *repo, Repodata *repodata, Solvable *s, RpmHead *rpmhe u32 = headint32(rpmhead, TAG_SIZE); if (u32) repodata_set_num(repodata, entry, SOLVABLE_INSTALLSIZE, (u32 + 1023) / 1024); + if (sourcerpm) + { + const char *p, *sevr, *sarch; + p = strrchr(sourcerpm, '.'); + if (p && !strcmp(p, ".rpm")) + { + p--; + while (p > sourcerpm && *p != '.') + p--; + if (*p == '.' && p > sourcerpm) + { + sarch = p-- + 1; + while (p > sourcerpm && *p != '-') + p--; + if (*p == '-' && p > sourcerpm) + { + p--; + while (p > sourcerpm && *p != '-') + p--; + if (*p == '-' && p > sourcerpm) + { + sevr = p + 1; + if (!strcmp(sarch, "src.rpm")) + repodata_set_constantid(repodata, entry, SOLVABLE_SOURCEARCH, ARCH_SRC); + else if (!strcmp(sarch, "nosrc.rpm")) + repodata_set_constantid(repodata, entry, SOLVABLE_SOURCEARCH, ARCH_NOSRC); + else + repodata_set_constantid(repodata, entry, SOLVABLE_SOURCEARCH, strn2id(pool, sarch, strlen(sarch) - 4, 1)); + if (!strncmp(sevr, evr, sarch - sevr - 1) && evr[sarch - sevr - 1] == 0) + repodata_set_void(repodata, entry, SOLVABLE_SOURCEEVR); + else + repodata_set_id(repodata, entry, SOLVABLE_SOURCEEVR, strn2id(pool, sevr, sarch - sevr - 1, 1)); + if (!strncmp(sourcerpm, name, sevr - sourcerpm - 1) && name[sevr - sourcerpm - 1] == 0) + repodata_set_void(repodata, entry, SOLVABLE_SOURCENAME); + else + repodata_set_id(repodata, entry, SOLVABLE_SOURCENAME, strn2id(pool, sourcerpm, sevr - sourcerpm - 1, 1)); + } + } + } + } + } } + sat_free(evr); return 1; }