#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "pool.h"
#include "repo.h"
#include "repo_write.h"
#include "common_write.h"
#include "solvversion.h"
static int
keyfilter_solv(Repo *repo, Repokey *key, void *kfdata)
{
if (key->name == SUSETAGS_SHARE_NAME || key->name == SUSETAGS_SHARE_EVR || key->name == SUSETAGS_SHARE_ARCH)
return KEY_STORAGE_DROPPED;
return repo_write_stdkeyfilter(repo, key, kfdata);
}
void
tool_write(Repo *repo, FILE *fp)
{
Repodata *info;
Queue addedfileprovides;
Repowriter *writer;
info = repo_add_repodata(repo, 0);
repodata_set_str(info, SOLVID_META, REPOSITORY_TOOLVERSION, LIBSOLV_TOOLVERSION);
repodata_unset(info, SOLVID_META, REPOSITORY_EXTERNAL);
queue_init(&addedfileprovides);
pool_addfileprovides_queue(repo->pool, &addedfileprovides, 0);
if (addedfileprovides.count)
repodata_set_idarray(info, SOLVID_META, REPOSITORY_ADDEDFILEPROVIDES, &addedfileprovides);
else
repodata_unset(info, SOLVID_META, REPOSITORY_ADDEDFILEPROVIDES);
queue_free(&addedfileprovides);
pool_freeidhashes(repo->pool);
repodata_internalize(info);
writer = repowriter_create(repo);
repowriter_set_keyfilter(writer, keyfilter_solv, 0);
if (repowriter_write(writer, fp) != 0)
{
fprintf(stderr, "repo write failed: %s\n", pool_errstr(repo->pool));
exit(1);
}
if (fflush(fp))
{
perror("fflush");
exit(1);
}
repowriter_free(writer);
repodata_free(info);
}