#include "chksum.h"
#include "repo_content.h"
#define DISABLE_SPLIT
+#define DISABLE_JOIN2
#include "tools_util.h"
/* split off a word, return null terminated pointer to it.
char *defvendor = 0;
int i = 0;
+ int res = 0;
/* architectures
we use the first architecture in BASEARCHS or noarch
repodata_add_poolstr_array(data, SOLVID_META, REPOSITORY_REPOID, value);
continue;
}
+ if (istag ("DISTRO"))
+ {
+ Id dh = repodata_new_handle(data);
+ char *p;
+ /* like with createrepo --distro */
+ if ((p = strchr(value, ',')) != 0)
+ {
+ *p++ = 0;
+ if (*value)
+ repodata_set_poolstr(data, dh, REPOSITORY_PRODUCT_CPEID, value);
+ }
+ else
+ p = value;
+ if (*p)
+ repodata_set_str(data, dh, REPOSITORY_PRODUCT_LABEL, p);
+ repodata_add_flexarray(data, SOLVID_META, REPOSITORY_DISTROS, dh);
+ continue;
+ }
if (istag ("DESCRDIR"))
{
repodata_set_str(data, SOLVID_META, SUSETAGS_DESCRDIR, value);
if (s)
repodata_set_str(data, s - pool->solvables, SUSETAGS_DESCRDIR, value);
- descrdir = strdup(value);
+ descrdir = solv_strdup(value);
continue;
}
if (istag ("DATADIR"))
repodata_set_str(data, SOLVID_META, SUSETAGS_DATADIR, value);
if (s)
repodata_set_str(data, s - pool->solvables, SUSETAGS_DATADIR, value);
- datadir = strdup(value);
+ datadir = solv_strdup(value);
continue;
}
if (istag ("VENDOR"))
repodata_set_poolstr(data, SOLVID_META, SUSETAGS_DEFAULTVENDOR, value);
if (s)
s->vendor = pool_str2id(pool, value, 1);
- defvendor = strdup(value);
+ defvendor = solv_strdup(value);
continue;
}
type = solv_chksum_str2type(checksumtype);
if (!type)
{
- fprintf(stderr, "Unknown checksum type: %s: %s\n", value, checksumtype);
+ pool_error(pool, -1, "%s: unknown checksum type '%s'", value, checksumtype);
+ res = 1;
continue;
}
l = solv_chksum_len(type);
if (strlen(checksum) != 2 * l)
{
- fprintf(stderr, "Invalid checksum length: %s: for %s\n", value, checksum);
+ pool_error(pool, -1, "%s: invalid checksum length for %s", value, checksumtype);
+ res = 1;
continue;
}
fh = repodata_new_handle(data);
}
if (istag ("VERSION"))
- pd.tmpvers = strdup(value);
+ pd.tmpvers = solv_strdup(value);
else if (istag ("RELEASE"))
- pd.tmprel = strdup(value);
+ pd.tmprel = solv_strdup(value);
else if (code11 && istag ("DISTRIBUTION"))
- repodata_set_str(data, s - pool->solvables, SOLVABLE_DISTRIBUTION, value);
+ repodata_set_poolstr(data, s - pool->solvables, SOLVABLE_DISTRIBUTION, value);
else if (istag ("UPDATEURLS"))
add_multiple_urls(data, handle, value, pool_str2id(pool, "update", 1));
else if (istag ("EXTRAURLS"))
}
}
}
+ if (!code10)
+ continue;
/*
* Every tag below is Code10 only
*
*/
- if (code10 && istag ("DISTPRODUCT"))
- /* DISTPRODUCT is for registration and Yast, not for the solver. */
- repodata_set_str(data, s - pool->solvables, PRODUCT_DISTPRODUCT, value);
- else if (code10 && istag ("DISTVERSION"))
- /* DISTVERSION is for registration and Yast, not for the solver. */
- repodata_set_str(data, s - pool->solvables, PRODUCT_DISTVERSION, value);
- else if (code10 && istag ("ARCH"))
+ if (istag ("ARCH"))
/* Theoretically we want to have the best arch of the given
modifiers which still is compatible with the system
arch. We don't know the latter here, though. */
s->arch = ARCH_NOARCH;
- else if (code10 && istag ("PREREQUIRES"))
+ else if (istag ("PREREQUIRES"))
s->requires = adddep(pool, &pd, s->requires, value, SOLVABLE_PREREQMARKER);
- else if (code10 && istag ("REQUIRES"))
+ else if (istag ("REQUIRES"))
s->requires = adddep(pool, &pd, s->requires, value, -SOLVABLE_PREREQMARKER);
- else if (code10 && istag ("PROVIDES"))
+ else if (istag ("PROVIDES"))
s->provides = adddep(pool, &pd, s->provides, value, 0);
- else if (code10 && istag ("CONFLICTS"))
+ else if (istag ("CONFLICTS"))
s->conflicts = adddep(pool, &pd, s->conflicts, value, 0);
- else if (code10 && istag ("OBSOLETES"))
+ else if (istag ("OBSOLETES"))
s->obsoletes = adddep(pool, &pd, s->obsoletes, value, 0);
- else if (code10 && istag ("RECOMMENDS"))
+ else if (istag ("RECOMMENDS"))
s->recommends = adddep(pool, &pd, s->recommends, value, 0);
- else if (code10 && istag ("SUGGESTS"))
+ else if (istag ("SUGGESTS"))
s->suggests = adddep(pool, &pd, s->suggests, value, 0);
- else if (code10 && istag ("SUPPLEMENTS"))
+ else if (istag ("SUPPLEMENTS"))
s->supplements = adddep(pool, &pd, s->supplements, value, 0);
- else if (code10 && istag ("ENHANCES"))
+ else if (istag ("ENHANCES"))
s->enhances = adddep(pool, &pd, s->enhances, value, 0);
/* FRESHENS doesn't seem to exist. */
- else if (code10 && istag ("TYPE"))
+ else if (istag ("TYPE"))
repodata_set_str(data, s - pool->solvables, PRODUCT_TYPE, value);
/* XXX do something about LINGUAS and ARCH?
if (s && !s->name)
{
pool_debug(pool, SOLV_FATAL, "repo_content: 'content' incomplete, no product solvable created!\n");
- repo_free_solvable_block(repo, s - pool->solvables, 1, 1);
+ repo_free_solvable(repo, s - pool->solvables, 1);
s = 0;
}
if (s)
solv_free(pd.tmp);
solv_free(line);
solv_free(otherarchs);
- join_freemem();
if (!(flags & REPO_NO_INTERNALIZE))
repodata_internalize(data);
- return 0;
+ return res;
}