From: Duncan Mac-Vicar P Date: Fri, 12 Sep 2008 13:12:34 +0000 (+0000) Subject: make url ids extensible and fix parsers. X-Git-Tag: BASE-SuSE-Code-12_1-Branch~511 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4b7c0040cd9237f3de3958e9e175646aa9a7fb08;p=platform%2Fupstream%2Flibsolv.git make url ids extensible and fix parsers. parse urls in products --- diff --git a/package/libsatsolver.changes b/package/libsatsolver.changes index 1db4a86..05ae0e7 100644 --- a/package/libsatsolver.changes +++ b/package/libsatsolver.changes @@ -3,6 +3,7 @@ Fri Sep 12 14:01:11 CEST 2008 - dmacvicar@suse.de - add repo_add_poolstr_array - move updates="key,key.." to repomd.xml +- make product url ids more extensible - 0.10.11 ------------------------------------------------------------------- diff --git a/src/knownid.h b/src/knownid.h index b8c6902..9db847d 100644 --- a/src/knownid.h +++ b/src/knownid.h @@ -156,6 +156,7 @@ KNOWNID(PRODUCT_URL_TYPE_SMOLT, "product:url:type:smolt"), KNOWNID(PRODUCT_URL_TYPE_RELNOTES, "product:url:type:relnotes"), KNOWNID(PRODUCT_URL_TYPE_EXTRA, "product:url:type:extra"), KNOWNID(PRODUCT_URL_TYPE_OPTIONAL, "product:url:type:optional"), +KNOWNID(PRODUCT_URL_TYPE_UPDATE, "product:url:type:update"), KNOWNID(PRODUCT_FLAGS, "product:flags"), KNOWNID(PRODUCT_FLAVOR, "product:flavor"), KNOWNID(PRODUCT_REFERENCES, "product:references"), diff --git a/tools/repo_content.c b/tools/repo_content.c index c7f48ef..297efa3 100644 --- a/tools/repo_content.c +++ b/tools/repo_content.c @@ -203,6 +203,28 @@ add_multiple_strings(Repodata *data, Id handle, Id name, char *value) } } +/* + * split value and add to pool + */ + +static void +add_multiple_urls(Repodata *data, Id handle, char *value, Id type) +{ + char *sp[2]; + while (value) + { + int words = split(value, sp, 2); + if (!words) + break; + repodata_add_poolstr_array(data, handle, PRODUCT_URL, sp[0]); + repodata_add_idarray(data, handle, PRODUCT_URL_TYPE, type); + if (words == 1) + break; + value = sp[1]; + } +} + + /* * add 'content' to repo @@ -333,11 +355,13 @@ repo_add_content(Repo *repo, FILE *fp) else if (istag ("DATADIR")) repo_set_str(repo, s - pool->solvables, SUSETAGS_DATADIR, value); else if (istag ("UPDATEURLS")) - add_multiple_strings(data, handle, PRODUCT_UPDATEURLS, value); + add_multiple_urls(data, handle, value, PRODUCT_URL_TYPE_UPDATE); else if (istag ("EXTRAURLS")) - add_multiple_strings(data, handle, PRODUCT_EXTRAURLS, value); + add_multiple_urls(data, handle, value, PRODUCT_URL_TYPE_EXTRA); else if (istag ("OPTIONALURLS")) - add_multiple_strings(data, handle, PRODUCT_OPTIONALURLS, value); + add_multiple_urls(data, handle, value, PRODUCT_URL_TYPE_OPTIONAL); + else if (istag ("RELNOTESURL")) + add_multiple_urls(data, handle, value, PRODUCT_URL_TYPE_RELNOTES); else if (istag ("SHORTLABEL")) repo_set_str(repo, s - pool->solvables, PRODUCT_SHORTLABEL, value); else if (istag ("LABEL")) /* LABEL is the products SUMMARY. */ @@ -346,8 +370,6 @@ repo_add_content(Repo *repo, FILE *fp) repo_set_str(repo, s - pool->solvables, pool_id2langid(pool, SOLVABLE_SUMMARY, key + 6, 1), value); else if (istag ("FLAGS")) add_multiple_strings(data, handle, PRODUCT_FLAGS, value); - else if (istag ("RELNOTESURL")) - repodata_add_poolstr_array(data, handle, PRODUCT_RELNOTESURL, value); else if (istag ("VENDOR")) s->vendor = str2id(pool, value, 1); else if (istag ("BASEARCHS")) diff --git a/tools/repo_products.c b/tools/repo_products.c index 6b58826..0b9098f 100644 --- a/tools/repo_products.c +++ b/tools/repo_products.c @@ -91,7 +91,7 @@ static struct stateswitch stateswitches[] = { #endif { STATE_PRODUCT, "linguas", STATE_LINGUAS, 0 }, { STATE_PRODUCT, "updaterepokey", STATE_UPDATEREPOKEY, 1 }, - { STATE_URLS, "url", STATE_URL, 0 }, + { STATE_URLS, "url", STATE_URL, 1 }, /* { STATE_BUILDCONFIG,"linguas", STATE_LINGUAS, 0 }, */ { STATE_LINGUAS, "lang", STATE_LANG, 0 }, { STATE_REGISTER, "flavor", STATE_FLAVOR, 1 }, @@ -306,8 +306,21 @@ endElement(void *userData, const char *name) case STATE_URL: if (pd->tmpurltype) { + Id type = 0; repodata_add_poolstr_array(pd->data, pd->handle, PRODUCT_URL, pd->content); - repodata_add_poolstr_array(pd->data, pd->handle, PRODUCT_URL_TYPE, pd->content); + + if ( pd->tmpurltype[0] == 's' ) + type = PRODUCT_URL_TYPE_SMOLT; + else if ( pd->tmpurltype[0] == 'u' ) + type = PRODUCT_URL_TYPE_UPDATE; + else if ( pd->tmpurltype[0] == 'o' ) + type = PRODUCT_URL_TYPE_OPTIONAL; + else if ( pd->tmpurltype[0] == 'r' ) + type = PRODUCT_URL_TYPE_RELNOTES; + else + type = PRODUCT_URL_TYPE_EXTRA; + + repodata_add_idarray(pd->data, pd->handle, PRODUCT_URL_TYPE, type); } break; case STATE_TARGET: diff --git a/tools/repo_rpmmd.c b/tools/repo_rpmmd.c index 8cf4b65..181bfa3 100644 --- a/tools/repo_rpmmd.c +++ b/tools/repo_rpmmd.c @@ -1012,15 +1012,24 @@ endElement(void *userData, const char *name) break; case STATE_RELNOTESURL: if (pd->content[0]) - repodata_set_poolstr(pd->data, handle, PRODUCT_RELNOTESURL, pd->content); + { + repodata_add_poolstr_array(pd->data, pd->handle, PRODUCT_URL, pd->content); + repodata_add_idarray(pd->data, pd->handle, PRODUCT_URL_TYPE, PRODUCT_URL_TYPE_RELNOTES); + } break; case STATE_UPDATEURL: if (pd->content[0]) - repodata_set_poolstr(pd->data, handle, PRODUCT_EXTRAURLS, pd->content); + { + repodata_add_poolstr_array(pd->data, pd->handle, PRODUCT_URL, pd->content); + repodata_add_idarray(pd->data, pd->handle, PRODUCT_URL_TYPE, PRODUCT_URL_TYPE_UPDATE); + } break; case STATE_OPTIONALURL: if (pd->content[0]) - repodata_set_poolstr(pd->data, handle, PRODUCT_OPTIONALURLS, pd->content); + { + repodata_add_poolstr_array(pd->data, pd->handle, PRODUCT_URL, pd->content); + repodata_add_idarray(pd->data, pd->handle, PRODUCT_URL_TYPE, PRODUCT_URL_TYPE_OPTIONAL); + } break; case STATE_FLAG: if (pd->content[0])