]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
Add testcase_mangle_repo_names function
authorMichael Schroeder <mls@suse.de>
Tue, 8 Sep 2020 10:00:21 +0000 (12:00 +0200)
committerMichael Schroeder <mls@suse.de>
Tue, 8 Sep 2020 10:00:21 +0000 (12:00 +0200)
This will return an array containing the mangled names testcase_write
will use.

ext/libsolvext.ver
ext/testcase.c
ext/testcase.h

index 5e9b0799948c8b4c3b37865904b74c473c09bc9a..4102301851f8ff393b36fa2ad2355bced492f457 100644 (file)
@@ -67,6 +67,7 @@ SOLV_1.0 {
                testcase_add_testtags;
                testcase_dep2str;
                testcase_job2str;
+               testcase_mangle_repo_names;
                testcase_solvid2str;
                testcase_str2dep;
                testcase_str2job;
index 16727068fc62fc9defdd9b1c3e7c921c7f1841b3..bbed5ab02dd529097f6b7b564395b4b19fb1fb43 100644 (file)
@@ -1809,49 +1809,65 @@ testcase_write_mangled(Solver *solv, const char *dir, int resultflags, const cha
   return 1;
 }
 
-int
-testcase_write(Solver *solv, const char *dir, int resultflags, const char *testcasename, const char *resultname)
+const char **
+testcase_mangle_repo_names(Pool *pool)
 {
-  Pool *pool = solv->pool;
-  int i, r, repoid;
-  int mangle = 1;
-  const char **orignames;
-
-  /* mangle repo names so that there are no conflicts */
-  orignames = solv_calloc(pool->nrepos, sizeof(char *));
-  for (repoid = 1; repoid < pool->nrepos; repoid++)
+  int i, repoid, mangle = 1;
+  Repo *repo;
+  const char **names = solv_calloc(pool->nrepos, sizeof(char *));
+  FOR_REPOS(repoid, repo)
     {
-      Repo *repo = pool_id2repo(pool, repoid);
-      char *buf = solv_malloc((repo->name ? strlen(repo->name) : 0) + 40);
-      char *mp;
-      orignames[repoid] = repo->name;
+      char *buf, *mp;
+      buf = solv_malloc((repo->name ? strlen(repo->name) : 0) + 40);
       if (!repo->name || !repo->name[0])
         sprintf(buf, "#%d", repoid);
       else
        strcpy(buf, repo->name);
-      for (i = 0; buf[i]; i++)
-       if (buf[i] == ' ' || buf[i] == '\t' || buf[i] == '/')
-         buf[i] = '_';
-      mp = buf + strlen(buf);
+      for (mp = buf; *mp; mp++)
+       if (*mp == ' ' || *mp == '\t' || *mp == '/')
+         *mp = '_';
       for (;;)
        {
          for (i = 1; i < repoid; i++)
-           if (!strcmp(buf, pool_id2repo(pool, i)->name))
+           if (!strcmp(buf, names[i]))
              break;
          if (i == repoid)
            break;
           sprintf(mp, "_%d", mangle++);
        }
-      repo->name = buf;
+      names[repoid] = buf;
     }
-  r = testcase_write_mangled(solv, dir, resultflags, testcasename, resultname);
-  for (repoid = 1; repoid < pool->nrepos; repoid++)
+  return names;
+}
+
+static void
+swap_repo_names(Pool *pool, const char **names)
+{
+  int repoid;
+  Repo *repo;
+  FOR_REPOS(repoid, repo)
     {
-      Repo *repo = pool_id2repo(pool, repoid);
-      solv_free((void *)repo->name);
-      repo->name = orignames[repoid];
+      const char *n = repo->name;
+      repo->name = names[repoid];
+      names[repoid] = n;
     }
-  solv_free(orignames);
+}
+
+int
+testcase_write(Solver *solv, const char *dir, int resultflags, const char *testcasename, const char *resultname)
+{
+  Pool *pool = solv->pool;
+  int r, repoid;
+  const char **names;
+
+  /* mangle repo names so that there are no conflicts */
+  names = testcase_mangle_repo_names(pool);
+  swap_repo_names(pool, names);
+  r = testcase_write_mangled(solv, dir, resultflags, testcasename, resultname);
+  swap_repo_names(pool, names);
+  for (repoid = 1; repoid < pool->nrepos; repoid++)
+    solv_free((void *)names[repoid]);
+  solv_free((void *)names);
   return r;
 }
 
index 997feafe90d10774017b4333e57297e2a29e744f..5b2e573dcf997faf95bc1e18486ace46f62ad56a 100644 (file)
@@ -42,3 +42,5 @@ extern char *testcase_solverresult(Solver *solv, int flags);
 extern int testcase_write(Solver *solv, const char *dir, int resultflags, const char *testcasename, const char *resultname);
 extern Solver *testcase_read(Pool *pool, FILE *fp, const char *testcase, Queue *job, char **resultp, int *resultflagsp);
 extern char *testcase_resultdiff(const char *result1, const char *result2);
+extern const char **testcase_mangle_repo_names(Pool *pool);
+