- be more careful when merging susetags attrs
authorMichael Schroeder <mls@suse.de>
Wed, 15 Jul 2009 13:57:52 +0000 (15:57 +0200)
committerMichael Schroeder <mls@suse.de>
Wed, 15 Jul 2009 13:57:52 +0000 (15:57 +0200)
ext/repo_susetags.c
src/repodata.c
src/repodata.h

index db4a590..242e7c4 100644 (file)
@@ -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);
index 5178fe0..747fe36 100644 (file)
@@ -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);
+}
 
 
 
index 527043d..a224ad7 100644 (file)
@@ -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);