X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=tools%2Frepo2solv.c;h=b3907439c596e95321ad266603052c458865f035;hb=4ddbcf346d1185bacbe63dba6e9317424b5206b9;hp=e055e408007714b7fff8e3e6f7189552ffff1b7c;hpb=e679b515eddb3dd340fb25620de0160211f40fdc;p=platform%2Fupstream%2Flibsolv.git diff --git a/tools/repo2solv.c b/tools/repo2solv.c index e055e40..b390743 100644 --- a/tools/repo2solv.c +++ b/tools/repo2solv.c @@ -169,9 +169,9 @@ read_plaindir_repo(Repo *repo, const char *dir) close(fds[1]); } if (recursive) - execl("/usr/bin/find", ".", "-name", ".", "-o", "-name", ".*", "-prune", "-o", "-name", "*.delta.rpm", "-o", "-name", "*.patch.rpm", "-o", "-name", "*.rpm", "-a", "-type", "f", "-print0", (char *)0); + execl("/usr/bin/find", "/usr/bin/find", ".", "-name", ".", "-o", "-name", ".*", "-prune", "-o", "-name", "*.delta.rpm", "-o", "-name", "*.patch.rpm", "-o", "-name", "*.rpm", "-a", "-type", "f", "-print0", (char *)0); else - execl("/usr/bin/find", ".", "-maxdepth", "1", "-name", ".", "-o", "-name", ".*", "-prune", "-o", "-name", "*.delta.rpm", "-o", "-name", "*.patch.rpm", "-o", "-name", "*.rpm", "-a", "-type", "f", "-print0", (char *)0); + execl("/usr/bin/find", "/usr/bin/find", ".", "-maxdepth", "1", "-name", ".", "-o", "-name", ".*", "-prune", "-o", "-name", "*.delta.rpm", "-o", "-name", "*.patch.rpm", "-o", "-name", "*.rpm", "-a", "-type", "f", "-print0", (char *)0); perror("/usr/bin/find"); _exit(1); } @@ -208,6 +208,7 @@ read_plaindir_repo(Repo *repo, const char *dir) repodata_set_location(data, p, 0, 0, bp[0] == '.' && bp[1] == '/' ? bp + 2 : bp); solv_free(rpm); } + solv_free(buf); fclose(fp); while (waitpid(pid, &wstatus, 0) == -1) { @@ -404,7 +405,7 @@ read_susetags_repo(Repo *repo, const char *dir) filename = susetags_find(files, nfiles, "packages"); if (filename && (fp = susetags_open(ddir, filename, &tmp, 1)) != 0) { - if (repo_add_susetags(repo, fp, defvendor, 0, REPO_NO_INTERNALIZE|SUSETAGS_RECORD_SHARES)) + if (repo_add_susetags(repo, fp, defvendor, 0, SUSETAGS_RECORD_SHARES)) { fprintf(stderr, "%s: %s\n", tmp, pool_errstr(pool)); exit(1); @@ -503,13 +504,42 @@ read_susetags_repo(Repo *repo, const char *dir) #ifdef ENABLE_RPMMD +# ifdef ENABLE_ZCHUNK_COMPRESSION + +static int +repomd_exists(const char *dir, const char *filename) +{ + char *path; + struct stat stb; + int r; + + if (!filename) + return 0; + path = solv_dupjoin(dir, "/", filename); + r = stat(path, &stb) == 0; + solv_free(path); + return r; +} + +# endif + static const char * -repomd_find(Repo *repo, const char *what) +repomd_find(Repo *repo, const char *dir, const char *what, int findzchunk) { Pool *pool = repo->pool; Dataiterator di; const char *filename; +# ifdef ENABLE_ZCHUNK_COMPRESSION + if (findzchunk) + { + char *what_zck = solv_dupjoin(what, "_zck", 0); + filename = repomd_find(repo, dir, what_zck, 0); + solv_free(what_zck); + if (filename && repomd_exists(dir, filename)) + return filename; + } +# endif filename = 0; dataiterator_init(&di, pool, repo, SOLVID_META, REPOSITORY_REPOMD_TYPE, what, SEARCH_STRING); dataiterator_prepend_keyname(&di, REPOSITORY_REPOMD); @@ -554,7 +584,7 @@ repomd_extend(Repo *repo, const char *dir, const char *what, const char *languag FILE *fp; char *tmp; - filename = repomd_find(repo, what); + filename = repomd_find(repo, dir, what, 1); if (!filename) return; fp = repomd_open(dir, filename, &tmp, missingok); @@ -580,8 +610,20 @@ repomd_extend_languages(Repo *repo, const char *dir, int missingok) dataiterator_prepend_keyname(&di, REPOSITORY_REPOMD); while (dataiterator_step(&di)) { + char *str = solv_strdup(di.kv.str); + size_t l = strlen(str); + if (l > 4 && !strcmp(str + l - 4, "_zck")) + str[l - 4] = 0; + for (i = 0; i < nsusedatas; i++) + if (!strcmp(susedatas[i], str)) + break; + if (i < nsusedatas) + { + solv_free(str); + continue; /* already have that entry */ + } susedatas = solv_extend(susedatas, nsusedatas, 1, sizeof(char *), 15); - susedatas[nsusedatas++] = solv_strdup(di.kv.str); + susedatas[nsusedatas++] = str; } dataiterator_free(&di); for (i = 0; i < nsusedatas; i++) @@ -627,7 +669,7 @@ read_rpmmd_repo(Repo *repo, const char *dir) } fclose(fp); tmp = solv_free(tmp); - filename = repomd_find(repo, "suseinfo"); + filename = repomd_find(repo, dir, "suseinfo", 0); if (filename && (fp = repomd_open(dir, filename, &tmp, 0)) != 0) { if (repo_add_repomdxml(repo, fp, REPO_REUSE_REPODATA)) @@ -640,7 +682,7 @@ read_rpmmd_repo(Repo *repo, const char *dir) } /* first all primary packages */ - filename = repomd_find(repo, "primary"); + filename = repomd_find(repo, dir, "primary", 1); if (filename) { add_rpmmd_file(repo, dir, filename, 0); @@ -653,16 +695,16 @@ read_rpmmd_repo(Repo *repo, const char *dir) } /* some legacy stuff */ - filename = repomd_find(repo, "products"); + filename = repomd_find(repo, dir, "products", 0); if (!filename) - filename = repomd_find(repo, "product"); + filename = repomd_find(repo, dir, "product", 0); if (filename) add_rpmmd_file(repo, dir, filename, 1); - filename = repomd_find(repo, "patterns"); + filename = repomd_find(repo, dir, "patterns", 0); add_rpmmd_file(repo, dir, filename, 1); /* updateinfo */ - filename = repomd_find(repo, "updateinfo"); + filename = repomd_find(repo, dir, "updateinfo", 1); if (filename && (fp = repomd_open(dir, filename, &tmp, 0)) != 0) { if (repo_add_updateinfoxml(repo, fp, 0)) @@ -675,9 +717,9 @@ read_rpmmd_repo(Repo *repo, const char *dir) } /* deltainfo */ - filename = repomd_find(repo, "deltainfo"); + filename = repomd_find(repo, dir, "deltainfo", 1); if (!filename) - filename = repomd_find(repo, "prestodelta"); + filename = repomd_find(repo, dir, "prestodelta", 1); if (filename && (fp = repomd_open(dir, filename, &tmp, 1)) != 0) { if (repo_add_deltainfoxml(repo, fp, 0)) @@ -691,7 +733,7 @@ read_rpmmd_repo(Repo *repo, const char *dir) #ifdef ENABLE_APPDATA /* appdata */ - filename = add_appdata ? repomd_find(repo, "appdata") : 0; + filename = add_appdata ? repomd_find(repo, dir, "appdata", 1) : 0; if (filename && (fp = repomd_open(dir, filename, &tmp, 1)) != 0) { if (repo_add_appdata(repo, fp, 0)) @@ -826,13 +868,9 @@ main(int argc, char **argv) #ifdef SUSE if (add_auto) repo_add_autopattern(repo, 0); + repo_mark_retracted_packages(repo, pool_str2id(pool, "retracted-patch-package()", 1)); #endif - tool_write(repo, 0, 0); - if (fflush(stdout)) - { - perror("fflush"); - exit(1); - } + tool_write(repo, stdout); pool_free(pool); solv_free(dir); exit(res);