From 772a525a41907396f60f6642975a5fff193bd1c1 Mon Sep 17 00:00:00 2001 From: Michael Schroeder Date: Tue, 23 Apr 2013 15:49:53 +0200 Subject: [PATCH] add repodata_translate_id to get rid of some "implement me" assertions --- ext/repo_rpmdb.c | 11 ++++------- src/libsolv.ver | 1 + src/repodata.c | 17 +++++++++++++++++ src/repodata.h | 2 ++ 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/ext/repo_rpmdb.c b/ext/repo_rpmdb.c index e33ad32..0c3323e 100644 --- a/ext/repo_rpmdb.c +++ b/ext/repo_rpmdb.c @@ -1396,8 +1396,8 @@ copydir_complex(Pool *pool, Repodata *data, Repodata *fromdata, Id did, Id *cach Id compid = dirpool_compid(&fromdata->dirpool, did); if (parent) parent = copydir(pool, data, fromdata, parent, cache); - if (fromdata->localpool) - compid = repodata_globalize_id(fromdata, compid, 1); + if (data->localpool || fromdata->localpool) + compid = repodata_translate_id(data, fromdata, compid, 1); compid = dirpool_add_dir(&data->dirpool, parent, compid, 1); if (cache) { @@ -1430,9 +1430,8 @@ solvable_copy_cb(void *vcbdata, Solvable *r, Repodata *fromdata, Repokey *key, K case REPOKEY_TYPE_CONSTANTID: case REPOKEY_TYPE_IDARRAY: /* used for triggers */ id = kv->id; - if (fromdata->localpool) - id = repodata_globalize_id(fromdata, id, 1); - assert(!data->localpool); /* implement me! */ + if (data->localpool || fromdata->localpool) + id = repodata_translate_id(data, fromdata, id, 1); if (key->type == REPOKEY_TYPE_ID) repodata_set_id(data, handle, keyname, id); else if (key->type == REPOKEY_TYPE_CONSTANTID) @@ -1455,13 +1454,11 @@ solvable_copy_cb(void *vcbdata, Solvable *r, Repodata *fromdata, Repokey *key, K case REPOKEY_TYPE_DIRNUMNUMARRAY: id = kv->id; id = copydir(pool, data, fromdata, id, cbdata->dircache); - assert(!data->localpool); /* implement me! */ repodata_add_dirnumnum(data, handle, keyname, id, kv->num, kv->num2); break; case REPOKEY_TYPE_DIRSTRARRAY: id = kv->id; id = copydir(pool, data, fromdata, id, cbdata->dircache); - assert(!data->localpool); /* implement me! */ repodata_add_dirstr(data, handle, keyname, id, kv->str); break; case REPOKEY_TYPE_FLEXARRAY: diff --git a/src/libsolv.ver b/src/libsolv.ver index ffeb498..e17bb7e 100644 --- a/src/libsolv.ver +++ b/src/libsolv.ver @@ -227,6 +227,7 @@ SOLV_1.0 { repodata_str2dir; repodata_stringify; repodata_swap_attrs; + repodata_translate_id; repodata_unset; repodata_unset_uninternalized; repodata_write; diff --git a/src/repodata.c b/src/repodata.c index 2462c10..c150e6f 100644 --- a/src/repodata.c +++ b/src/repodata.c @@ -782,6 +782,23 @@ repodata_localize_id(Repodata *data, Id id, int create) } Id +repodata_translate_id(Repodata *data, Repodata *fromdata, Id id, int create) +{ + if (!id || !data || !fromdata) + return id; + if (!data->localpool || !fromdata->localpool) + { + if (fromdata->localpool) + id = repodata_globalize_id(fromdata, id, create); + if (data->localpool) + id = repodata_localize_id(data, id, create); + return id; + } + /* localpool is set in both data and fromdata */ + return stringpool_str2id(&data->spool, stringpool_id2str(&fromdata->spool, id), create); +} + +Id repodata_lookup_id_uninternalized(Repodata *data, Id solvid, Id keyname, Id voidid) { Id *ap; diff --git a/src/repodata.h b/src/repodata.h index 2b45886..029a7f9 100644 --- a/src/repodata.h +++ b/src/repodata.h @@ -289,6 +289,8 @@ void repodata_disable_paging(Repodata *data); /* helper functions */ Id repodata_globalize_id(Repodata *data, Id id, int create); Id repodata_localize_id(Repodata *data, Id id, int create); +Id repodata_translate_id(Repodata *data, Repodata *fromdata, Id id, int create); + Id repodata_str2dir(Repodata *data, const char *dir, int create); const char *repodata_dir2str(Repodata *data, Id did, const char *suf); const char *repodata_chk2str(Repodata *data, Id type, const unsigned char *buf); -- 2.7.4