X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=tools%2Fcommon_write.c;h=577b1aba564154b19506902ba92b6f45c6984d3d;hb=refs%2Fchanges%2F89%2F194389%2F1;hp=ba45e6f362a0df2c9fed55624b9cf60816bcb89b;hpb=5b0d7883a182851bee1f5d67164d747ba00e4d6d;p=platform%2Fupstream%2Flibsolv.git diff --git a/tools/common_write.c b/tools/common_write.c index ba45e6f..577b1ab 100644 --- a/tools/common_write.c +++ b/tools/common_write.c @@ -6,8 +6,6 @@ */ #include -#include -#include #include #include #include @@ -16,8 +14,12 @@ #include "repo.h" #include "repo_write.h" #include "common_write.h" +#include "solvversion.h" -#define LIBSOLV_TOOLVERSION "1.0" +/* toolversion history + * 1.0: initial tool version + * 1.1: changed PRODUCT_ENDOFLIFE parsing +*/ static Id verticals[] = { SOLVABLE_AUTHORS, @@ -27,6 +29,8 @@ static Id verticals[] = { SOLVABLE_EULA, SOLVABLE_DISKUSAGE, SOLVABLE_FILELIST, + SOLVABLE_CHANGELOG_AUTHOR, + SOLVABLE_CHANGELOG_TEXT, 0 }; @@ -61,6 +65,8 @@ keyfilter_solv(Repo *data, Repokey *key, void *kfdata) return KEY_STORAGE_DROPPED; if (!kd->haveexternal && key->name == REPOSITORY_EXTERNAL) return KEY_STORAGE_DROPPED; + if (key->name == SUSETAGS_SHARE_NAME || key->name == SUSETAGS_SHARE_EVR || key->name == SUSETAGS_SHARE_ARCH) + return KEY_STORAGE_DROPPED; for (i = 0; verticals[i]; i++) if (key->name == verticals[i]) return KEY_STORAGE_VERTICAL_OFFSET; @@ -176,22 +182,24 @@ keyfilter_other(Repo *repo, Repokey *key, void *kfdata) static void write_info(Repo *repo, FILE *fp, int (*keyfilter)(Repo *repo, Repokey *key, void *kfdata), void *kfdata, Repodata *info, const char *location) { - Id h, *keyarray = 0; - int i; + Id h; + Queue keyq; - repo_write(repo, fp, keyfilter, kfdata, &keyarray); - h = repodata_new_handle(info); - if (keyarray) + queue_init(&keyq); + if (repo_write_filtered(repo, fp, keyfilter, kfdata, &keyq) != 0) { - for (i = 0; keyarray[i]; i++) - repodata_add_idarray(info, h, REPOSITORY_KEYS, keyarray[i]); + fprintf(stderr, "repo_write failed\n"); + exit(1); } - solv_free(keyarray); + h = repodata_new_handle(info); + if (keyq.count) + repodata_set_idarray(info, h, REPOSITORY_KEYS, &keyq); + queue_free(&keyq); repodata_set_str(info, h, REPOSITORY_LOCATION, location); repodata_add_flexarray(info, SOLVID_META, REPOSITORY_EXTERNAL, h); } -int +void tool_write(Repo *repo, const char *basename, const char *attrname) { Repodata *data; @@ -200,20 +208,20 @@ tool_write(Repo *repo, const char *basename, const char *attrname) char **languages = 0; int nlanguages = 0; int i, j, k, l; - Id *addedfileprovides = 0; struct keyfilter_data kd; + Queue addedfileprovides; memset(&kd, 0, sizeof(kd)); info = repo_add_repodata(repo, 0); repodata_set_str(info, SOLVID_META, REPOSITORY_TOOLVERSION, LIBSOLV_TOOLVERSION); - pool_addfileprovides_ids(repo->pool, 0, &addedfileprovides); - if (addedfileprovides && *addedfileprovides) + queue_init(&addedfileprovides); + pool_addfileprovides_queue(repo->pool, &addedfileprovides, 0); + if (addedfileprovides.count) { kd.haveaddedfileprovides = 1; - for (i = 0; addedfileprovides[i]; i++) - repodata_add_idarray(info, SOLVID_META, REPOSITORY_ADDEDFILEPROVIDES, addedfileprovides[i]); + repodata_set_idarray(info, SOLVID_META, REPOSITORY_ADDEDFILEPROVIDES, &addedfileprovides); } - solv_free(addedfileprovides); + queue_free(&addedfileprovides); pool_freeidhashes(repo->pool); /* free some mem */ @@ -300,13 +308,20 @@ tool_write(Repo *repo, const char *basename, const char *attrname) kd.languages = languages; kd.nlanguages = nlanguages; repodata_internalize(info); - repo_write(repo, fp, keyfilter_other, &kd, 0); - fclose(fp); + if (repo_write_filtered(repo, fp, keyfilter_other, &kd, 0) != 0) + { + fprintf(stderr, "repo_write failed\n"); + exit(1); + } + if (fclose(fp) != 0) + { + perror("fclose"); + exit(1); + } for (i = 0; i < nlanguages; i++) free(languages[i]); solv_free(languages); repodata_free(info); - return 0; } if (attrname) { @@ -318,7 +333,10 @@ tool_write(Repo *repo, const char *basename, const char *attrname) kd.haveexternal = 1; } repodata_internalize(info); - repo_write(repo, stdout, keyfilter_solv, &kd, 0); + if (repo_write_filtered(repo, stdout, keyfilter_solv, &kd, 0) != 0) + { + fprintf(stderr, "repo_write failed\n"); + exit(1); + } repodata_free(info); - return 0; }