From ce6d40a2570a7dcff6e05264cd40c1fb3b1e596e Mon Sep 17 00:00:00 2001 From: Michael Schroeder Date: Mon, 13 Jun 2016 15:14:38 +0200 Subject: [PATCH] Make sure that all repos have different names in a testcase --- ext/testcase.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/ext/testcase.c b/ext/testcase.c index 6e2b5746..6157c554 100644 --- a/ext/testcase.c +++ b/ext/testcase.c @@ -2099,8 +2099,8 @@ testcase_solverresult(Solver *solv, int resultflags) } -int -testcase_write(Solver *solv, const char *dir, int resultflags, const char *testcasename, const char *resultname) +static int +testcase_write_mangled(Solver *solv, const char *dir, int resultflags, const char *testcasename, const char *resultname) { Pool *pool = solv->pool; Repo *repo; @@ -2132,6 +2132,9 @@ testcase_write(Solver *solv, const char *dir, int resultflags, const char *testc else sprintf(priobuf, "%d", repo->priority); out = pool_tmpjoin(pool, name, ".repo", ".gz"); + for (i = 0; out[i]; i++) + if (out[i] == '/') + out[i] = '_'; cmd = pool_tmpjoin(pool, "repo ", name, " "); cmd = pool_tmpappend(pool, cmd, priobuf, " "); cmd = pool_tmpappend(pool, cmd, "testtags ", out); @@ -2320,6 +2323,52 @@ testcase_write(Solver *solv, const char *dir, int resultflags, const char *testc return 1; } +int +testcase_write(Solver *solv, const char *dir, int resultflags, const char *testcasename, const char *resultname) +{ + 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++) + { + Repo *repo = pool_id2repo(pool, repoid); + char *buf = solv_malloc((repo->name ? strlen(repo->name) : 0) + 40); + char *mp; + orignames[i] = repo->name; + 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 (;;) + { + for (i = 1; i < repoid; i++) + if (!strcmp(buf, pool_id2repo(pool, i)->name)) + break; + if (i == repoid) + break; + sprintf(mp, "_%d", mangle++); + } + repo->name = buf; + } + r = testcase_write_mangled(solv, dir, resultflags, testcasename, resultname); + for (repoid = 1; repoid < pool->nrepos; repoid++) + { + Repo *repo = pool_id2repo(pool, repoid); + solv_free((void *)repo->name); + repo->name = orignames[i]; + } + solv_free(orignames); + return r; +} + static char * read_inline_file(FILE *fp, char **bufp, char **bufpp, int *buflp) { -- 2.47.2