ref: refs/heads/master
commit 7433044cf3103c52aa589518b408d2abc85ab485
Author: Michael Schroeder
Date: Wed Jul 15 15:57:52 2009 +0200
- be more careful when merging susetags attrs
---
ext/repo_susetags.c | 22 ++++++++++++++++++++--
src/repodata.c | 10 ++++++++++
src/repodata.h | 1 +
3 files changed, 31 insertions(+), 2 deletions(-)
diff --git a/ext/repo_susetags.c b/ext/repo_susetags.c
index db4a590..242e7c4 100644
--- a/ext/repo_susetags.c
+++ b/ext/repo_susetags.c
@@ -676,7 +676,6 @@ repo_add_susetags(Repo *repo, FILE *fp, Id defvendor, const char *language, int
s->arch = str2id(pool, sp[3], 1);
s->vendor = defvendor;
}
- else
last_found_pack = (s - pool->solvables) - repo->start;
if (data)
handle = s - pool->solvables;
@@ -946,6 +945,24 @@ repo_add_susetags(Repo *repo, FILE *fp, Id defvendor, const char *language, int
{
int i, last_found;
last_found = 0;
+ Map keyidmap;
+
+ map_init(&keyidmap, data->nkeys);
+ for (i = 1; i < data->nkeys; i++)
+ {
+ Id keyname = data->keys[i].name;
+ if (keyname == SOLVABLE_INSTALLSIZE || keyname == SOLVABLE_DISKUSAGE || keyname == SOLVABLE_FILELIST)
+ continue;
+ if (keyname == SOLVABLE_MEDIADIR || keyname == SOLVABLE_MEDIAFILE || keyname == SOLVABLE_MEDIANR)
+ continue;
+ if (keyname == SOLVABLE_DOWNLOADSIZE || keyname == SOLVABLE_CHECKSUM)
+ continue;
+ if (keyname == SOLVABLE_SOURCENAME || keyname == SOLVABLE_SOURCEARCH || keyname == SOLVABLE_SOURCEEVR)
+ continue;
+ if (keyname == SOLVABLE_PKGID || keyname == SOLVABLE_HDRID || keyname == SOLVABLE_LEADSIGID)
+ continue;
+ MAPSET(&keyidmap, i);
+ }
for (i = 0; i < pd.nshare; i++)
if (pd.share_with[i])
{
@@ -976,10 +993,11 @@ repo_add_susetags(Repo *repo, FILE *fp, Id defvendor, const char *language, int
}
}
if (n != repo->end)
- repodata_merge_attrs(data, repo->start + i, repo->start + last_found);
+ repodata_merge_some_attrs(data, repo->start + i, repo->start + last_found, &keyidmap, 0);
free(pd.share_with[i]);
}
free(pd.share_with);
+ map_free(&keyidmap);
}
sat_free(joinhash);
diff --git a/src/repodata.c b/src/repodata.c
index 5178fe0..747fe36 100644
--- a/src/repodata.c
+++ b/src/repodata.c
@@ -2234,6 +2234,16 @@ repodata_merge_attrs(Repodata *data, Id dest, Id src)
repodata_insert_keyid(data, dest, keyp[0], keyp[1], 0);
}
+void
+repodata_merge_some_attrs(Repodata *data, Id dest, Id src, Map *keyidmap, int overwrite)
+{
+ Id *keyp;
+ if (dest == src || !(keyp = data->attrs[src - data->start]))
+ return;
+ for (; *keyp; keyp += 2)
+ if (!keyidmap || MAPTST(keyidmap, keyp[0]))
+ repodata_insert_keyid(data, dest, keyp[0], keyp[1], overwrite);
+}
diff --git a/src/repodata.h b/src/repodata.h
index 527043d..a224ad7 100644
--- a/src/repodata.h
+++ b/src/repodata.h
@@ -231,6 +231,7 @@ void repodata_add_flexarray(Repodata *data, Id solvid, Id keyname, Id ghandle);
works only if the data is not yet internalized
*/
void repodata_merge_attrs(Repodata *data, Id dest, Id src);
+void repodata_merge_some_attrs(Repodata *data, Id dest, Id src, Map *keyidmap, int overwrite);
void repodata_create_stubs(Repodata *data);
void repodata_join(Repodata *data, Id joinkey);
--
To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org
For additional commands, e-mail: zypp-commit+help@opensuse.org