Author: mlschroe Date: Wed Mar 5 13:01:30 2008 New Revision: 9017 URL: http://svn.opensuse.org/viewcvs/zypp?rev=9017&view=rev Log: - create sourcerpm data Modified: trunk/sat-solver/tools/repo_rpmdb.c Modified: trunk/sat-solver/tools/repo_rpmdb.c URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/tools/repo_rpmdb.c?rev=9017&r1=9016&r2=9017&view=diff ============================================================================== --- trunk/sat-solver/tools/repo_rpmdb.c (original) +++ trunk/sat-solver/tools/repo_rpmdb.c Wed Mar 5 13:01:30 2008 @@ -619,6 +619,7 @@ { char *name; char *evr; + char *sourcerpm; name = headstring(rpmhead, TAG_NAME); if (!strcmp(name, "gpg-pubkey")) @@ -629,7 +630,8 @@ 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 @@ 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 @@ 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; } -- To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org For additional commands, e-mail: zypp-commit+help@opensuse.org