2 * Copyright (c) 2007, Novell Inc.
4 * This program is licensed under the BSD license, read LICENSE.BSD
5 * for further information
15 #include "repo_write.h"
16 #include "common_write.h"
17 #include "solvversion.h"
19 /* toolversion history
20 * 1.0: initial tool version
21 * 1.1: changed PRODUCT_ENDOFLIFE parsing
25 keyfilter_solv(Repo *repo, Repokey *key, void *kfdata)
27 if (key->name == SUSETAGS_SHARE_NAME || key->name == SUSETAGS_SHARE_EVR || key->name == SUSETAGS_SHARE_ARCH)
28 return KEY_STORAGE_DROPPED;
29 return repo_write_stdkeyfilter(repo, key, kfdata);
36 tool_write(Repo *repo, FILE *fp)
39 Queue addedfileprovides;
42 info = repo_add_repodata(repo, 0); /* add new repodata for our meta info */
43 repodata_set_str(info, SOLVID_META, REPOSITORY_TOOLVERSION, LIBSOLV_TOOLVERSION);
44 repodata_unset(info, SOLVID_META, REPOSITORY_EXTERNAL); /* do not propagate this */
46 queue_init(&addedfileprovides);
47 pool_addfileprovides_queue(repo->pool, &addedfileprovides, 0);
48 if (addedfileprovides.count)
49 repodata_set_idarray(info, SOLVID_META, REPOSITORY_ADDEDFILEPROVIDES, &addedfileprovides);
51 repodata_unset(info, SOLVID_META, REPOSITORY_ADDEDFILEPROVIDES);
52 queue_free(&addedfileprovides);
54 pool_freeidhashes(repo->pool); /* free some mem */
56 repodata_internalize(info);
57 writer = repowriter_create(repo);
58 repowriter_set_keyfilter(writer, keyfilter_solv, 0);
59 if (repowriter_write(writer, fp) != 0)
61 fprintf(stderr, "repo write failed: %s\n", pool_errstr(repo->pool));
69 repowriter_free(writer);
70 repodata_free(info); /* delete meta info repodata again */