From: Michael Schroeder Date: Tue, 8 Sep 2020 10:00:21 +0000 (+0200) Subject: Add testcase_mangle_repo_names function X-Git-Tag: 0.7.15~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f1e8659a25ca8e046bf82ed45c37c90b1d553bf2;p=thirdparty%2Flibsolv.git Add testcase_mangle_repo_names function This will return an array containing the mangled names testcase_write will use. --- diff --git a/ext/libsolvext.ver b/ext/libsolvext.ver index 5e9b0799..41023018 100644 --- a/ext/libsolvext.ver +++ b/ext/libsolvext.ver @@ -67,6 +67,7 @@ SOLV_1.0 { testcase_add_testtags; testcase_dep2str; testcase_job2str; + testcase_mangle_repo_names; testcase_solvid2str; testcase_str2dep; testcase_str2job; diff --git a/ext/testcase.c b/ext/testcase.c index 16727068..bbed5ab0 100644 --- a/ext/testcase.c +++ b/ext/testcase.c @@ -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; } diff --git a/ext/testcase.h b/ext/testcase.h index 997feafe..5b2e573d 100644 --- a/ext/testcase.h +++ b/ext/testcase.h @@ -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); +