- add rpmdbcookie support
[platform/upstream/libsolv.git] / tools / common_write.c
index a16b1b1..884b417 100644 (file)
@@ -33,6 +33,7 @@ static char *languagetags[] = {
   "solvable:description:",
   "solvable:messageins:",
   "solvable:messagedel:",
+  "solvable:eula:",
   0
 };
 
@@ -42,11 +43,16 @@ static int
 keyfilter_solv(Repo *data, Repokey *key, void *kfdata)
 {
   int i;
+  const char *keyname;
   if (test_separate && key->storage != KEY_STORAGE_SOLVABLE)
     return KEY_STORAGE_DROPPED;
   for (i = 0; verticals[i]; i++)
     if (key->name == verticals[i])
       return KEY_STORAGE_VERTICAL_OFFSET;
+  keyname = id2str(data->pool, key->name);
+  for (i = 0; languagetags[i] != 0; i++)
+    if (!strncmp(keyname, languagetags[i], strlen(languagetags[i])))
+      return KEY_STORAGE_VERTICAL_OFFSET;
   return KEY_STORAGE_INCORE;
 }
 
@@ -54,11 +60,16 @@ static int
 keyfilter_attr(Repo *data, Repokey *key, void *kfdata)
 {
   int i;
+  const char *keyname;
   if (key->storage == KEY_STORAGE_SOLVABLE)
     return KEY_STORAGE_DROPPED;
   for (i = 0; verticals[i]; i++)
     if (key->name == verticals[i])
       return KEY_STORAGE_VERTICAL_OFFSET;
+  keyname = id2str(data->pool, key->name);
+  for (i = 0; languagetags[i] != 0; i++)
+    if (!strncmp(keyname, languagetags[i], strlen(languagetags[i])))
+      return KEY_STORAGE_VERTICAL_OFFSET;
   return KEY_STORAGE_INCORE;
 }
 
@@ -158,7 +169,9 @@ tool_write(Repo *repo, const char *basename, const char *attrname)
 
   fileinfos = sat_zextend(fileinfos, nfileinfos, 1, sizeof(Repodatafile), REPODATAFILE_BLOCK);
   pool_addfileprovides_ids(repo->pool, 0, &fileinfos[nfileinfos].addedfileprovides);
-  if (fileinfos[nfileinfos].addedfileprovides)
+  if (repo->rpmdbcookie)
+    fileinfos[nfileinfos].rpmdbcookie = repo->rpmdbcookie;
+  if (fileinfos[nfileinfos].addedfileprovides || fileinfos[nfileinfos].rpmdbcookie)
     nfileinfos++;
 
   if (basename)
@@ -248,7 +261,7 @@ tool_write(Repo *repo, const char *basename, const char *attrname)
        }
       kd.languages = languages;
       kd.nlanguages = nlanguages;
-      repo_write(repo, fp, keyfilter_other, &kd, fileinfos, nfileinfos);
+      repo_write(repo, fp, keyfilter_other, &kd, nfileinfos ? fileinfos : 0, nfileinfos);
       fclose(fp);
       for (i = 0; i < nlanguages; i++)
        free(languages[i]);
@@ -272,7 +285,7 @@ tool_write(Repo *repo, const char *basename, const char *attrname)
       fclose(fp);
       nfileinfos++;
     }
-  repo_write(repo, stdout, keyfilter_solv, 0, fileinfos, nfileinfos);
+  repo_write(repo, stdout, keyfilter_solv, 0, nfileinfos ? fileinfos : 0, nfileinfos);
   for (i = 0; i < nfileinfos; i++)
     {
       sat_free(fileinfos[i].addedfileprovides);