]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
repo_testcase: support reading/writing of repository meta data
authorMichael Schroeder <mls@suse.de>
Thu, 3 Sep 2020 12:05:05 +0000 (14:05 +0200)
committerMichael Schroeder <mls@suse.de>
Thu, 3 Sep 2020 12:16:35 +0000 (14:16 +0200)
The meta data is stored in a REPOSITORY_TESTCASE_META flexarray.
We currently only read/write strings.

ext/repo_testcase.c
src/knownid.h

index 5cc03271458ff051da38a5cc1b245e2214cd2d7c..90607cf2f9e91915c7e7c7cddda343f6ad46d16c 100644 (file)
@@ -432,6 +432,23 @@ testcase_write_testtags(Repo *repo, FILE *fp)
   Queue q;
 
   fprintf(fp, "=Ver: 3.0\n");
+  if (repo_lookup_type(repo, SOLVID_META, REPOSITORY_TESTCASE_META))
+   {
+     Dataiterator di;
+     dataiterator_init(&di, pool, repo, SOLVID_META, 0, 0, 0);
+     dataiterator_prepend_keyname(&di, REPOSITORY_TESTCASE_META);
+     while (dataiterator_step(&di))
+       {
+        const char *value = repodata_stringify(pool, di.data, di.key, &di.kv, di.flags);
+        if (!value)
+          continue;
+        if (strchr(value, '\n'))
+          continue;
+        fprintf(fp, "=Met: %s %s\n", pool_id2str(pool, di.key->name), value);
+       }
+     dataiterator_free(&di);
+   }
+
   queue_init(&q);
   FOR_REPO_SOLVABLES(repo, p, s)
     {
@@ -537,6 +554,7 @@ testcase_add_testtags(Repo *repo, FILE *fp, int flags)
   int nfilelist = 0;
   int tagsversion = 0;
   int addselfprovides = 1;     /* for compat reasons */
+  Id metah = 0;
 
   data = repo_add_repodata(repo, flags);
   s = 0;
@@ -610,6 +628,16 @@ testcase_add_testtags(Repo *repo, FILE *fp, int flags)
          s->evr = makeevr(pool, sp[1]);
          s->arch = strcmp(sp[3], "-") ? pool_str2id(pool, sp[3], 1) : 0;
          continue;
+       case 'M' << 16 | 'e' << 8 | 't':
+         if (split(line + 5, sp, 2) != 2 || !sp[0][0])
+           break;
+         if (!metah)
+           {
+             metah = repodata_new_handle(data);
+             repodata_add_flexarray(data, SOLVID_META, REPOSITORY_TESTCASE_META, metah);
+           }
+         repodata_set_str(data, metah, pool_str2id(pool, sp[0], 1), sp[1]);
+         break;
        default:
          break;
        }
index 4c1730b579f16789cec6302ecb16bbc1dcca6cde..07b3a9c2ceb717a67e09886cd7646adcdb6433f2 100644 (file)
@@ -268,6 +268,8 @@ KNOWNID(LIBSOLV_SELF_DESTRUCT_PKG,      "libsolv-self-destruct-pkg()"),     /* this
 KNOWNID(SOLVABLE_CONSTRAINS,           "solvable:constrains"),         /* conda */
 KNOWNID(SOLVABLE_TRACK_FEATURES,       "solvable:track_features"),     /* conda */
 
+KNOWNID(REPOSITORY_TESTCASE_META,      "repository:testcase:meta"),
+
 KNOWNID(ID_NUM_INTERNAL,               0)
 
 #ifdef KNOWNID_INITIALIZE