diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d28fe0d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/libsolv-0.6.35.tar.gz diff --git a/.libsolv.metadata b/.libsolv.metadata new file mode 100644 index 0000000..185b58a --- /dev/null +++ b/.libsolv.metadata @@ -0,0 +1 @@ +4f53d60467ddab4099cfe5eb91a3fe7260666209 SOURCES/libsolv-0.6.35.tar.gz diff --git a/SOURCES/0001-Make-sure-that-targeted-updates-dont-do-reinstalls.patch b/SOURCES/0001-Make-sure-that-targeted-updates-dont-do-reinstalls.patch new file mode 100644 index 0000000..1cd418a --- /dev/null +++ b/SOURCES/0001-Make-sure-that-targeted-updates-dont-do-reinstalls.patch @@ -0,0 +1,61 @@ +From 0e29e1188c19609e117478a0df1cb995a2f9e745 Mon Sep 17 00:00:00 2001 +From: Michael Schroeder +Date: Fri, 28 Sep 2018 14:48:14 +0200 +Subject: [PATCH] Make sure that targeted updates don't do reinstalls + +--- + src/solver.c | 16 +++++++++++++--- + 1 file changed, 13 insertions(+), 3 deletions(-) + +diff --git a/src/solver.c b/src/solver.c +index 6405f4a..a4e0c4b 100644 +--- a/src/solver.c ++++ b/src/solver.c +@@ -2957,7 +2957,9 @@ add_update_target(Solver *solv, Id p, Id how) + Pool *pool = solv->pool; + Solvable *s = pool->solvables + p; + Repo *installed = solv->installed; +- Id pi, pip; ++ Id pi, pip, identicalp; ++ int startcnt, endcnt; ++ + if (!solv->update_targets) + { + solv->update_targets = solv_calloc(1, sizeof(Queue)); +@@ -2968,6 +2970,8 @@ add_update_target(Solver *solv, Id p, Id how) + queue_push2(solv->update_targets, p, p); + return; + } ++ identicalp = 0; ++ startcnt = solv->update_targets->count; + FOR_PROVIDES(pi, pip, s->name) + { + Solvable *si = pool->solvables + pi; +@@ -2982,9 +2986,9 @@ add_update_target(Solver *solv, Id p, Id how) + if (how & SOLVER_CLEANDEPS) + add_cleandeps_updatepkg(solv, pi); + queue_push2(solv->update_targets, pi, p); +- /* check if it's ok to keep the installed package */ ++ /* remember an installed package that is identical to p */ + if (s->evr == si->evr && solvable_identical(s, si)) +- queue_push2(solv->update_targets, pi, pi); ++ identicalp = pi; + } + if (s->obsoletes) + { +@@ -3014,6 +3018,12 @@ add_update_target(Solver *solv, Id p, Id how) + } + } + } ++ /* also allow upgrading to an identical installed package */ ++ if (identicalp) ++ { ++ for (endcnt = solv->update_targets->count; startcnt < endcnt; startcnt += 2) ++ queue_push2(solv->update_targets, solv->update_targets->elements[startcnt], identicalp); ++ } + } + + static int +-- +libgit2 0.26.6 + diff --git a/SOURCES/0002-Fix-memory-leaks-memory-access.patch b/SOURCES/0002-Fix-memory-leaks-memory-access.patch new file mode 100644 index 0000000..732448e --- /dev/null +++ b/SOURCES/0002-Fix-memory-leaks-memory-access.patch @@ -0,0 +1,412 @@ +From b581b8e135b3d381d6df7e392a3f31b88697ea26 Mon Sep 17 00:00:00 2001 +From: Jaroslav Rohel +Date: Fri, 7 Dec 2018 07:05:10 +0100 +Subject: [PATCH 1/7] Fix: Dereference of null pointer + +--- + ext/repo_repomdxml.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/ext/repo_repomdxml.c b/ext/repo_repomdxml.c +index 760d481f..b2a5b8dd 100644 +--- a/ext/repo_repomdxml.c ++++ b/ext/repo_repomdxml.c +@@ -181,7 +181,7 @@ startElement(struct solv_xmlparser *xmlp, int state, const char *name, const cha + while (value) + { + char *p = strchr(value, ','); +- if (*p) ++ if (p) + *p++ = 0; + if (*value) + repodata_add_poolstr_array(pd->data, SOLVID_META, REPOSITORY_UPDATES, value); +-- +2.19.2 + + +From 17ebf9e87309e8815df865fef8c6e44f185cb16b Mon Sep 17 00:00:00 2001 +From: Jaroslav Rohel +Date: Tue, 11 Dec 2018 09:50:06 +0100 +Subject: [PATCH 2/7] Fix: Add va_end() before return + +The va_end() performs cleanup. +If va_end() is not called before a function that calls va_start() returns, +the behavior is undefined. +--- + src/pool.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/pool.c b/src/pool.c +index 60cc0f49..f03b43f9 100644 +--- a/src/pool.c ++++ b/src/pool.c +@@ -1505,6 +1505,7 @@ pool_debug(Pool *pool, int type, const char *format, ...) + vprintf(format, args); + else + vfprintf(stderr, format, args); ++ va_end(args); + return; + } + vsnprintf(buf, sizeof(buf), format, args); +-- +2.19.2 + + +From 24acb5dea18bef01fae13db414b2369dfae951b4 Mon Sep 17 00:00:00 2001 +From: Jaroslav Rohel +Date: Tue, 11 Dec 2018 10:14:04 +0100 +Subject: [PATCH 3/7] Fix: Memory leaks + +--- + ext/repo_rpmdb.c | 16 ++++++++++++++++ + ext/testcase.c | 4 ++++ + tools/repo2solv.c | 1 + + 3 files changed, 21 insertions(+) + +diff --git a/ext/repo_rpmdb.c b/ext/repo_rpmdb.c +index 75bb6780..ff939978 100644 +--- a/ext/repo_rpmdb.c ++++ b/ext/repo_rpmdb.c +@@ -1939,6 +1939,8 @@ repo_add_rpm(Repo *repo, const char *rpm, int flags) + if (fread(lead, 96 + 16, 1, fp) != 1 || getu32(lead) != 0xedabeedb) + { + pool_error(pool, -1, "%s: not a rpm", rpm); ++ solv_chksum_free(leadsigchksumh, NULL); ++ solv_chksum_free(chksumh, NULL); + fclose(fp); + return 0; + } +@@ -1951,12 +1953,16 @@ repo_add_rpm(Repo *repo, const char *rpm, int flags) + if (lead[78] != 0 || lead[79] != 5) + { + pool_error(pool, -1, "%s: not a rpm v5 header", rpm); ++ solv_chksum_free(leadsigchksumh, NULL); ++ solv_chksum_free(chksumh, NULL); + fclose(fp); + return 0; + } + if (getu32(lead + 96) != 0x8eade801) + { + pool_error(pool, -1, "%s: bad signature header", rpm); ++ solv_chksum_free(leadsigchksumh, NULL); ++ solv_chksum_free(chksumh, NULL); + fclose(fp); + return 0; + } +@@ -1965,6 +1971,8 @@ repo_add_rpm(Repo *repo, const char *rpm, int flags) + if (sigcnt >= MAX_SIG_CNT || sigdsize >= MAX_SIG_DSIZE) + { + pool_error(pool, -1, "%s: bad signature header", rpm); ++ solv_chksum_free(leadsigchksumh, NULL); ++ solv_chksum_free(chksumh, NULL); + fclose(fp); + return 0; + } +@@ -1975,6 +1983,8 @@ repo_add_rpm(Repo *repo, const char *rpm, int flags) + { + if (!headfromfp(&state, rpm, fp, lead + 96, sigcnt, sigdsize, sigpad, chksumh, leadsigchksumh)) + { ++ solv_chksum_free(leadsigchksumh, NULL); ++ solv_chksum_free(chksumh, NULL); + fclose(fp); + return 0; + } +@@ -2014,6 +2024,8 @@ repo_add_rpm(Repo *repo, const char *rpm, int flags) + if (fread(lead, l, 1, fp) != 1) + { + pool_error(pool, -1, "%s: unexpected EOF", rpm); ++ solv_chksum_free(leadsigchksumh, NULL); ++ solv_chksum_free(chksumh, NULL); + fclose(fp); + return 0; + } +@@ -2034,6 +2046,7 @@ repo_add_rpm(Repo *repo, const char *rpm, int flags) + if (fread(lead, 16, 1, fp) != 1) + { + pool_error(pool, -1, "%s: unexpected EOF", rpm); ++ solv_chksum_free(chksumh, NULL); + fclose(fp); + return 0; + } +@@ -2042,6 +2055,7 @@ repo_add_rpm(Repo *repo, const char *rpm, int flags) + if (getu32(lead) != 0x8eade801) + { + pool_error(pool, -1, "%s: bad header", rpm); ++ solv_chksum_free(chksumh, NULL); + fclose(fp); + return 0; + } +@@ -2050,6 +2064,7 @@ repo_add_rpm(Repo *repo, const char *rpm, int flags) + if (sigcnt >= MAX_HDR_CNT || sigdsize >= MAX_HDR_DSIZE) + { + pool_error(pool, -1, "%s: bad header", rpm); ++ solv_chksum_free(chksumh, NULL); + fclose(fp); + return 0; + } +@@ -2057,6 +2072,7 @@ repo_add_rpm(Repo *repo, const char *rpm, int flags) + + if (!headfromfp(&state, rpm, fp, lead, sigcnt, sigdsize, 0, chksumh, 0)) + { ++ solv_chksum_free(chksumh, NULL); + fclose(fp); + return 0; + } +diff --git a/ext/testcase.c b/ext/testcase.c +index aa72a8d7..3901d90d 100644 +--- a/ext/testcase.c ++++ b/ext/testcase.c +@@ -2348,6 +2348,7 @@ testcase_write_mangled(Solver *solv, const char *dir, int resultflags, const cha + if (fclose(fp)) + { + pool_error(solv->pool, 0, "testcase_write: write error"); ++ solv_free(result); + strqueue_free(&sq); + return 0; + } +@@ -2360,12 +2361,14 @@ testcase_write_mangled(Solver *solv, const char *dir, int resultflags, const cha + if (!(fp = fopen(out, "w"))) + { + pool_error(solv->pool, 0, "testcase_write: could not open '%s' for writing", out); ++ solv_free(cmd); + strqueue_free(&sq); + return 0; + } + if (*cmd && fwrite(cmd, strlen(cmd), 1, fp) != 1) + { + pool_error(solv->pool, 0, "testcase_write: write error"); ++ solv_free(cmd); + strqueue_free(&sq); + fclose(fp); + return 0; +@@ -2373,6 +2376,7 @@ testcase_write_mangled(Solver *solv, const char *dir, int resultflags, const cha + if (fclose(fp)) + { + pool_error(solv->pool, 0, "testcase_write: write error"); ++ solv_free(cmd); + strqueue_free(&sq); + return 0; + } +diff --git a/tools/repo2solv.c b/tools/repo2solv.c +index e055e408..30a41f42 100644 +--- a/tools/repo2solv.c ++++ b/tools/repo2solv.c +@@ -208,6 +208,7 @@ read_plaindir_repo(Repo *repo, const char *dir) + repodata_set_location(data, p, 0, 0, bp[0] == '.' && bp[1] == '/' ? bp + 2 : bp); + solv_free(rpm); + } ++ solv_free(buf); + fclose(fp); + while (waitpid(pid, &wstatus, 0) == -1) + { +-- +2.19.2 + + +From 6800ad0aaaf709df45c22d92320be42d51b6c704 Mon Sep 17 00:00:00 2001 +From: Jaroslav Rohel +Date: Tue, 11 Dec 2018 10:22:09 +0100 +Subject: [PATCH 4/7] Fix: testsolv segfault + +ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x7fab0e11bf2b bp 0x7ffdfc044b70 sp 0x7ffdfc044a90 T0) +0 0x7fab0e11bf2a in testcase_str2dep_complex /home/company/real_sanitize/libsolv-master/ext/testcase.c:577 +1 0x7fab0e11c80f in testcase_str2dep /home/company/real_sanitize/libsolv-master/ext/testcase.c:656 +2 0x7fab0e12e64a in testcase_read /home/company/real_sanitize/libsolv-master/ext/testcase.c:2952 +3 0x402aa5 in main /home/company/real_sanitize/libsolv-master/tools/testsolv.c:148 +4 0x7fab0d9d2a3f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x20a3f) +5 0x401bb8 in _start (/home/company/real_sanitize/libsolv-master/build/install/bin/testsolv+0x401bb8) +--- + ext/testcase.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/ext/testcase.c b/ext/testcase.c +index 3901d90d..dd20de14 100644 +--- a/ext/testcase.c ++++ b/ext/testcase.c +@@ -571,6 +571,8 @@ testcase_str2dep_complex(Pool *pool, const char **sp, int relop) + Id flags, id, id2, namespaceid = 0; + struct oplist *op; + ++ if (!s) ++ return 0; + while (*s == ' ' || *s == '\t') + s++; + if (!strncmp(s, "namespace:", 10)) +-- +2.19.2 + + +From 3c43749d26145e26e0337238ca566aeae157a654 Mon Sep 17 00:00:00 2001 +From: Jaroslav Rohel +Date: Tue, 11 Dec 2018 10:27:15 +0100 +Subject: [PATCH 5/7] Fix: testsolv segfaults + +ERROR: AddressSanitizer: SEGV on unknown address 0x0000000002f0 (pc 0x7f31501d3bd2 bp 0x7ffcfe4d4a50 sp 0x7ffcfe4d4a30 T0) +0 0x7f31501d3bd1 in pool_whatprovides /home/company/real_sanitize/libsolv-master/src/pool.h:331 +1 0x7f31501d895e in testcase_str2solvid /home/company/real_sanitize/libsolv-master/ext/testcase.c:793 +2 0x7f31501e8388 in testcase_read /home/company/real_sanitize/libsolv-master/ext/testcase.c:2807 +3 0x402aa5 in main /home/company/real_sanitize/libsolv-master/tools/testsolv.c:148 +4 0x7f314fa8da3f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x20a3f) +5 0x401bb8 in _start (/home/company/real_sanitize/libsolv-master/build/install/bin/testsolv+0x401bb8) + +ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x7f5af9e7815f bp 0x7ffc4c843a40 sp 0x7ffc4c8436c0 T0) +0 0x7f5af9e7815e in testcase_read /home/company/real_sanitize/libsolv-master/ext/testcase.c:2799 +1 0x402aa5 in main /home/company/real_sanitize/libsolv-master/tools/testsolv.c:148 +2 0x7f5af971da3f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x20a3f) +3 0x401bb8 in _start (/home/company/real_sanitize/libsolv-master/build/install/bin/testsolv+0x401bb8) +--- + ext/testcase.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/ext/testcase.c b/ext/testcase.c +index dd20de14..83467fe2 100644 +--- a/ext/testcase.c ++++ b/ext/testcase.c +@@ -2772,7 +2772,7 @@ testcase_read(Pool *pool, FILE *fp, const char *testcase, Queue *job, char **res + { + int i = strlen(pieces[1]); + s = strchr(pieces[1], '('); +- if (!s && pieces[1][i - 1] != ')') ++ if (!s || pieces[1][i - 1] != ')') + { + pool_error(pool, 0, "testcase_read: bad namespace '%s'", pieces[1]); + } +-- +2.19.2 + + +From 3723154d0cca4ee9b08e35dfa48a90a6659d05c8 Mon Sep 17 00:00:00 2001 +From: Jaroslav Rohel +Date: Tue, 11 Dec 2018 12:40:42 +0100 +Subject: [PATCH 6/7] Fix: Be sure that NONBLOCK is set + +--- + examples/solv/fastestmirror.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/examples/solv/fastestmirror.c b/examples/solv/fastestmirror.c +index d2ebd97a..0ee4e73b 100644 +--- a/examples/solv/fastestmirror.c ++++ b/examples/solv/fastestmirror.c +@@ -68,7 +68,11 @@ findfastest(char **urls, int nurls) + socks[i] = socket(result->ai_family, result->ai_socktype, result->ai_protocol); + if (socks[i] >= 0) + { +- fcntl(socks[i], F_SETFL, O_NONBLOCK); ++ if (fcntl(socks[i], F_SETFL, O_NONBLOCK) == -1) ++ { ++ close(socks[i]); ++ socks[i] = -1; ++ } + if (connect(socks[i], result->ai_addr, result->ai_addrlen) == -1) + { + if (errno != EINPROGRESS) +-- +2.19.2 + + +From 52bf7e7e56e16928b449cad7fb803eb38555db0a Mon Sep 17 00:00:00 2001 +From: Jaroslav Rohel +Date: Tue, 11 Dec 2018 12:58:34 +0100 +Subject: [PATCH 7/7] Don't set values that are never read + +--- + ext/pool_fileconflicts.c | 1 - + ext/repo_appdata.c | 2 +- + ext/repo_comps.c | 2 +- + src/cleandeps.c | 1 - + src/dirpool.c | 2 +- + src/order.c | 1 - + src/repopage.c | 1 - + 7 files changed, 3 insertions(+), 7 deletions(-) + +diff --git a/ext/pool_fileconflicts.c b/ext/pool_fileconflicts.c +index eaeb52b2..2fd3d540 100644 +--- a/ext/pool_fileconflicts.c ++++ b/ext/pool_fileconflicts.c +@@ -590,7 +590,6 @@ findfileconflicts_alias_cb(void *cbdatav, const char *fn, struct filelistinfo *i + + if (!info->dirlen) + return; +- dp = fn + info->dirlen; + if (info->diridx != cbdata->lastdiridx) + { + cbdata->lastdiridx = info->diridx; +diff --git a/ext/repo_appdata.c b/ext/repo_appdata.c +index 62faf2d8..69d46386 100644 +--- a/ext/repo_appdata.c ++++ b/ext/repo_appdata.c +@@ -103,7 +103,7 @@ startElement(struct solv_xmlparser *xmlp, int state, const char *name, const cha + { + struct parsedata *pd = xmlp->userdata; + Pool *pool = pd->pool; +- Solvable *s = pd->solvable; ++ Solvable *s; + const char *type; + + /* ignore all language tags */ +diff --git a/ext/repo_comps.c b/ext/repo_comps.c +index 255ecb16..e59f8d12 100644 +--- a/ext/repo_comps.c ++++ b/ext/repo_comps.c +@@ -107,7 +107,7 @@ startElement(struct solv_xmlparser *xmlp, int state, const char *name, const cha + { + struct parsedata *pd = xmlp->userdata; + Pool *pool = pd->pool; +- Solvable *s = pd->solvable; ++ Solvable *s; + + switch(state) + { +diff --git a/src/cleandeps.c b/src/cleandeps.c +index 1da28f6e..b2fde317 100644 +--- a/src/cleandeps.c ++++ b/src/cleandeps.c +@@ -748,7 +748,6 @@ solver_createcleandepsmap(Solver *solv, Map *cleandepsmap, int unneeded) + continue; + if (strncmp(pool_id2str(pool, s->name), "pattern:", 8) != 0) + continue; +- dp = s->repo->idarraydata + s->requires; + for (dp = s->repo->idarraydata + s->requires; *dp; dp++) + FOR_PROVIDES(p, pp, *dp) + if (pool->solvables[p].repo == installed) +diff --git a/src/dirpool.c b/src/dirpool.c +index afb26ea5..bed9435e 100644 +--- a/src/dirpool.c ++++ b/src/dirpool.c +@@ -85,7 +85,7 @@ dirpool_make_dirtraverse(Dirpool *dp) + return; + dp->dirs = solv_extend_resize(dp->dirs, dp->ndirs, sizeof(Id), DIR_BLOCK); + dirtraverse = solv_calloc_block(dp->ndirs, sizeof(Id), DIR_BLOCK); +- for (parent = 0, i = 0; i < dp->ndirs; i++) ++ for (i = 0; i < dp->ndirs; i++) + { + if (dp->dirs[i] > 0) + continue; +diff --git a/src/order.c b/src/order.c +index c92c3328..cfde40c9 100644 +--- a/src/order.c ++++ b/src/order.c +@@ -1066,7 +1066,6 @@ transaction_order(Transaction *trans, int flags) + #if 0 + printf("do %s [%d]\n", pool_solvid2str(pool, te->p), temedianr[i]); + #endif +- s = pool->solvables + te->p; + for (j = te->edges; od.invedgedata[j]; j++) + { + struct _TransactionElement *te2 = od.tes + od.invedgedata[j]; +diff --git a/src/repopage.c b/src/repopage.c +index 2b7a863b..85d53eb9 100644 +--- a/src/repopage.c ++++ b/src/repopage.c +@@ -399,7 +399,6 @@ match_done: + litlen -= 32; + } + } +- litofs = 0; + } + return oo; + } +-- +2.19.2 + diff --git a/SOURCES/0003-Fix-off-by-one-error-in-the-oneof-parsing-code.patch b/SOURCES/0003-Fix-off-by-one-error-in-the-oneof-parsing-code.patch new file mode 100644 index 0000000..f46a156 --- /dev/null +++ b/SOURCES/0003-Fix-off-by-one-error-in-the-oneof-parsing-code.patch @@ -0,0 +1,25 @@ +From 0302dce36cb5066a5c818d616a047dc93cfd025d Mon Sep 17 00:00:00 2001 +From: Michael Schroeder +Date: Thu, 22 Nov 2018 12:02:00 +0100 +Subject: [PATCH] Fix off-by-one error in the "oneof" parsing code + +--- + ext/testcase.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/ext/testcase.c b/ext/testcase.c +index ffc8b8a..469218d 100644 +--- a/ext/testcase.c ++++ b/ext/testcase.c +@@ -1071,7 +1071,7 @@ testcase_str2job(Pool *pool, const char *str, Id *whatp) + Queue q; + job |= SOLVER_SOLVABLE_ONE_OF; + queue_init(&q); +- if (npieces > 3 && strcmp(pieces[2], "nothing") != 0) ++ if (npieces > 2 && strcmp(pieces[2], "nothing") != 0) + { + for (i = 2; i < npieces; i++) + { +-- +libgit2 0.27.7 + diff --git a/SOURCES/0004-Do-not-disable-infarch-rules-when-they-dont-conflict-with-the-job.patch b/SOURCES/0004-Do-not-disable-infarch-rules-when-they-dont-conflict-with-the-job.patch new file mode 100644 index 0000000..dc7af19 --- /dev/null +++ b/SOURCES/0004-Do-not-disable-infarch-rules-when-they-dont-conflict-with-the-job.patch @@ -0,0 +1,46 @@ +From 5323eb7e5c0c8dcdf339113f091317afaed810cc Mon Sep 17 00:00:00 2001 +From: Michael Schroeder +Date: Tue, 15 Jan 2019 14:06:08 +0100 +Subject: [PATCH] Do not disable infarch rules when they don't conflict with the job + +--- + src/rules.c | 16 +++++++++++++--- + 1 file changed, 13 insertions(+), 3 deletions(-) + +diff --git a/src/rules.c b/src/rules.c +index 2087b35..175cb8d 100644 +--- a/src/rules.c ++++ b/src/rules.c +@@ -2126,7 +2126,13 @@ jobtodisablelist(Solver *solv, Id how, Id what, Queue *q) + if ((set & SOLVER_SETARCH) != 0 && solv->infarchrules != solv->infarchrules_end) + { + if (select == SOLVER_SOLVABLE) +- queue_push2(q, DISABLE_INFARCH, pool->solvables[what].name); ++ { ++ for (i = solv->infarchrules; i < solv->infarchrules_end; i++) ++ if (solv->rules[i].p == -what) ++ break; ++ if (i < solv->infarchrules_end) ++ queue_push2(q, DISABLE_INFARCH, pool->solvables[what].name); ++ } + else + { + int qcnt = q->count; +@@ -2140,8 +2146,12 @@ jobtodisablelist(Solver *solv, Id how, Id what, Queue *q) + if (q->elements[i + 1] == s->name) + break; + if (i < q->count) +- continue; +- queue_push2(q, DISABLE_INFARCH, s->name); ++ continue; /* already have that DISABLE_INFARCH element */ ++ for (i = solv->infarchrules; i < solv->infarchrules_end; i++) ++ if (solv->rules[i].p == -p) ++ break; ++ if (i < solv->infarchrules_end) ++ queue_push2(q, DISABLE_INFARCH, s->name); + } + } + } +-- +libgit2 0.27.7 + diff --git a/SOURCES/0005-Add-testcase-for-last-commit.patch b/SOURCES/0005-Add-testcase-for-last-commit.patch new file mode 100644 index 0000000..e3b206e --- /dev/null +++ b/SOURCES/0005-Add-testcase-for-last-commit.patch @@ -0,0 +1,39 @@ +From 2e88b25f5419d686b1d817cb1edecbb3305a0d1b Mon Sep 17 00:00:00 2001 +From: Michael Schroeder +Date: Tue, 15 Jan 2019 14:10:38 +0100 +Subject: [PATCH] Add testcase for last commit + +--- + test/testcases/lockstep/infarch_install_best.t | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) + create mode 100644 test/testcases/lockstep/infarch_install_best.t + +diff --git a/test/testcases/lockstep/infarch_install_best.t b/test/testcases/lockstep/infarch_install_best.t +new file mode 100644 +index 0000000..e9c4859 +--- /dev/null ++++ b/test/testcases/lockstep/infarch_install_best.t +@@ -0,0 +1,20 @@ ++# test for issue 292 ++repo system 0 testtags ++#>=Pkg: nss 3.39.0 2.fc29 x86_64 ++#>=Pkg: nss-sysinit 3.39.0 2.fc29 x86_64 ++#>=Req: nss = 3.39.0-2.fc29 ++repo available 0 testtags ++#>=Pkg: nss 3.39.0 2.fc29 i686 ++#>=Pkg: nss 3.41.0 1.fc29 x86_64 ++#>=Pkg: nss-sysinit 3.41.0 1.fc29 x86_64 ++#>=Req: nss = 3.41.0-1.fc29 ++ ++system x86_64 rpm system ++ ++poolflags implicitobsoleteusescolors ++solverflags allowvendorchange keepexplicitobsoletes bestobeypolicy keeporphans yumobsoletes ++ ++job install oneof nss-3.41.0-1.fc29.x86_64@available [setevr,setarch] ++result transaction,problems ++#>upgrade nss-3.39.0-2.fc29.x86_64@system nss-3.41.0-1.fc29.x86_64@available ++#>upgrade nss-sysinit-3.39.0-2.fc29.x86_64@system nss-sysinit-3.41.0-1.fc29.x86_64@available +-- +libgit2 0.27.7 + diff --git a/SOURCES/0006-Add-support-for-modular-updateinfoxml-data.patch b/SOURCES/0006-Add-support-for-modular-updateinfoxml-data.patch new file mode 100644 index 0000000..b50f028 --- /dev/null +++ b/SOURCES/0006-Add-support-for-modular-updateinfoxml-data.patch @@ -0,0 +1,101 @@ +From c14beb31bea06d0a46176a20cef4261067d5fc63 Mon Sep 17 00:00:00 2001 +From: Jaroslav Mracek +Date: Thu, 17 Jan 2019 12:48:05 +0100 +Subject: [PATCH] Add support for modular updateinfo.xml data + +--- + ext/repo_updateinfoxml.c | 37 +++++++++++++++++++++++++++++++++++++ + src/knownid.h | 8 ++++++++ + 2 files changed, 45 insertions(+) + +diff --git a/ext/repo_updateinfoxml.c b/ext/repo_updateinfoxml.c +index 7ba0062..5e03105 100644 +--- a/ext/repo_updateinfoxml.c ++++ b/ext/repo_updateinfoxml.c +@@ -37,6 +37,7 @@ + * + * + * Fedora 8 ++ * + * + * imlib-debuginfo-1.9.15-6.fc8.ppc64.rpm + * True +@@ -70,6 +71,7 @@ enum state { + STATE_RELOGIN, + STATE_RIGHTS, + STATE_SEVERITY, ++ STATE_MODULE, + NUMSTATES + }; + +@@ -92,6 +94,7 @@ static struct solv_xmlparser_element stateswitches[] = { + { STATE_PKGLIST, "collection", STATE_COLLECTION, 0 }, + { STATE_COLLECTION, "name", STATE_NAME, 1 }, + { STATE_COLLECTION, "package", STATE_PACKAGE, 0 }, ++ { STATE_COLLECTION, "module", STATE_MODULE, 0 }, + { STATE_PACKAGE, "filename", STATE_FILENAME, 1 }, + { STATE_PACKAGE, "reboot_suggested",STATE_REBOOT, 1 }, + { STATE_PACKAGE, "restart_suggested",STATE_RESTART, 1 }, +@@ -321,6 +324,40 @@ startElement(struct solv_xmlparser *xmlp, int state, const char *name, const cha + repodata_set_id(pd->data, pd->collhandle, UPDATE_COLLECTION_ARCH, a); + break; + } ++ case STATE_MODULE: ++ { ++ const char *name = 0, *stream = 0, *version = 0, *context = 0, *arch = 0; ++ Id name_id, stream_id, version_id, context_id, arch_id = 0; ++ for (; *atts; atts += 2) ++ { ++ if (!strcmp(*atts, "arch")) ++ arch = atts[1]; ++ else if (!strcmp(*atts, "name")) ++ name = atts[1]; ++ else if (!strcmp(*atts, "stream")) ++ stream = atts[1]; ++ else if (!strcmp(*atts, "version")) ++ version = atts[1]; ++ else if (!strcmp(*atts, "context")) ++ context = atts[1]; ++ } ++ name_id = pool_str2id(pool, name, 1); ++ if (arch) ++ arch_id = pool_str2id(pool, arch, 1); ++ stream_id = pool_str2id(pool, stream, 1); ++ version_id = pool_str2id(pool, version, 1); ++ context_id = pool_str2id(pool, context, 1); ++ ++ Id module_handle = repodata_new_handle(pd->data); ++ repodata_set_id(pd->data, module_handle, UPDATE_MODULE_NAME, name_id); ++ repodata_set_id(pd->data, module_handle, UPDATE_MODULE_STREAM, stream_id); ++ repodata_set_id(pd->data, module_handle, UPDATE_MODULE_VERSION, version_id); ++ repodata_set_id(pd->data, module_handle, UPDATE_MODULE_CONTEXT, context_id); ++ if (arch_id) ++ repodata_set_id(pd->data, module_handle, UPDATE_MODULE_ARCH, arch_id); ++ repodata_add_flexarray(pd->data, pd->handle, UPDATE_MODULE, module_handle); ++ break; ++ } + + default: + break; +diff --git a/src/knownid.h b/src/knownid.h +index 64cc6fc..14d2ded 100644 +--- a/src/knownid.h ++++ b/src/knownid.h +@@ -262,6 +262,14 @@ KNOWNID(SOLVABLE_INSTALLSTATUS, "solvable:installstatus"), /* debian install st + + KNOWNID(SOLVABLE_PREREQ_IGNOREINST, "solvable:prereq_ignoreinst"), /* ignore these pre-requires for installed packages */ + ++/* 'content' of patch, usually list of modules */ ++KNOWNID(UPDATE_MODULE, "update:module"), /* "name stream version context arch" */ ++KNOWNID(UPDATE_MODULE_NAME, "update:module:name"), /* name */ ++KNOWNID(UPDATE_MODULE_STREAM, "update:module:stream"), /* stream */ ++KNOWNID(UPDATE_MODULE_VERSION, "update:module:version"), /* version */ ++KNOWNID(UPDATE_MODULE_CONTEXT, "update:module:context"), /* context */ ++KNOWNID(UPDATE_MODULE_ARCH, "update:module:arch"), /* architecture */ ++ + KNOWNID(ID_NUM_INTERNAL, 0) + + #ifdef KNOWNID_INITIALIZE +-- +libgit2 0.27.7 + diff --git a/SPECS/libsolv.spec b/SPECS/libsolv.spec new file mode 100644 index 0000000..59c03b3 --- /dev/null +++ b/SPECS/libsolv.spec @@ -0,0 +1,688 @@ +%global libname solv + +%if (0%{?rhel} && 0%{?rhel} <= 7) || (0%{?fedora} && 0%{?fedora} <= 29) +%bcond_without python2_bindings +%else +%bcond_with python2_bindings +%endif +%if 0%{?rhel} && 0%{?rhel} <= 7 +%bcond_with perl_bindings +%bcond_with ruby_bindings +%bcond_with python3_bindings +%else +%bcond_without perl_bindings +%bcond_without ruby_bindings +%bcond_without python3_bindings +%endif +# Creates special prefixed pseudo-packages from appdata metadata +%bcond_without appdata +# Creates special prefixed "group:", "category:" pseudo-packages +%bcond_without comps +# For rich dependencies +%bcond_without complex_deps +%if 0%{?rhel} +%bcond_with helix_repo +%bcond_with suse_repo +%bcond_with debian_repo +%bcond_with arch_repo +# For handling deb + rpm at the same time +%bcond_with multi_semantics +%else +%bcond_without helix_repo +%bcond_without suse_repo +%bcond_without debian_repo +%bcond_without arch_repo +# For handling deb + rpm at the same time +%bcond_without multi_semantics +%endif + +#global commitnum 2901 +#global commit 47fbaa2a0892866d30ec0e1b4c885532d0aca7b8 +#global shortcommit %(c=%{commit}; echo ${c:0:7}) + +Name: lib%{libname} +Version: 0.6.35 +Release: 6%{?commit:.git.%{commitnum}.%{?shortcommit}}%{?dist} +Summary: Package dependency solver + +License: BSD +URL: https://github.com/openSUSE/libsolv +%if %{defined commit} +Source: %{url}/archive/%{commit}/%{name}-%{shortcommit}.tar.gz +%else +Source: %{url}/archive/%{version}/%{name}-%{version}.tar.gz +%endif +Patch0: 0001-Make-sure-that-targeted-updates-dont-do-reinstalls.patch +Patch1: 0002-Fix-memory-leaks-memory-access.patch +Patch2: 0003-Fix-off-by-one-error-in-the-oneof-parsing-code.patch +Patch3: 0004-Do-not-disable-infarch-rules-when-they-dont-conflict-with-the-job.patch +Patch4: 0005-Add-testcase-for-last-commit.patch +Patch5: 0006-Add-support-for-modular-updateinfoxml-data.patch + +BuildRequires: cmake +BuildRequires: gcc-c++ +BuildRequires: ninja-build +BuildRequires: pkgconfig(rpm) +BuildRequires: zlib-devel +# -DWITH_LIBXML2=ON +BuildRequires: libxml2-devel +# -DENABLE_LZMA_COMPRESSION=ON +BuildRequires: xz-devel +# -DENABLE_BZIP2_COMPRESSION=ON +BuildRequires: bzip2-devel + +%description +A free package dependency solver using a satisfiability algorithm. The +library is based on two major, but independent, blocks: + +- Using a dictionary approach to store and retrieve package + and dependency information. + +- Using satisfiability, a well known and researched topic, for + resolving package dependencies. + +%package devel +Summary: Development files for %{name} +Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: rpm-devel%{?_isa} + +%description devel +Development files for %{name}. + +%package tools +Summary: Package dependency solver tools +Requires: %{name}%{?_isa} = %{version}-%{release} +# repo2solv dependencies. All of those are used in shell-script. +Requires: %{_bindir}/gzip +Requires: %{_bindir}/bzip2 +Requires: %{_bindir}/lzma +Requires: %{_bindir}/xz +Requires: %{_bindir}/cat +Requires: %{_bindir}/find + +%description tools +Package dependency solver tools. + +%package demo +Summary: Applications demoing the %{name} library +Requires: %{name}%{?_isa} = %{version}-%{release} +# solv dependencies. Used as execlp() and system() +Requires: %{_bindir}/curl +Requires: %{_bindir}/gpg2 + +%description demo +Applications demoing the %{name} library. + +%if %{with perl_bindings} +%package -n perl-%{libname} +Summary: Perl bindings for the %{name} library +BuildRequires: swig +BuildRequires: perl-devel +BuildRequires: perl-generators +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description -n perl-%{libname} +Perl bindings for the %{name} library. +%endif + +%if %{with ruby_bindings} +%package -n ruby-%{libname} +Summary: Ruby bindings for the %{name} library +BuildRequires: swig +BuildRequires: ruby-devel +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description -n ruby-%{libname} +Ruby bindings for the %{name} library. +%endif + +%if %{with python2_bindings} +%package -n python2-%{libname} +Summary: Python bindings for the %{name} library +%{?python_provide:%python_provide python2-%{libname}} +BuildRequires: swig +BuildRequires: python2-devel +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description -n python2-%{libname} +Python bindings for the %{name} library. + +Python 2 version. +%endif + +%if %{with python3_bindings} +%package -n python3-%{libname} +Summary: Python bindings for the %{name} library +%{?python_provide:%python_provide python3-%{libname}} +BuildRequires: swig +BuildRequires: python3-devel +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description -n python3-%{libname} +Python bindings for the %{name} library. + +Python 3 version. +%endif + +%prep +%autosetup -p1 %{?commit:-n %{name}-%{commit}} + +%build +%cmake . -B"%{_vpath_builddir}" -GNinja \ + -DFEDORA=1 \ + -DENABLE_RPMDB=ON \ + -DENABLE_RPMDB_BYRPMHEADER=ON \ + -DENABLE_RPMDB_LIBRPM=ON \ + -DENABLE_RPMPKG_LIBRPM=ON \ + -DENABLE_RPMMD=ON \ + %{?with_comps:-DENABLE_COMPS=ON} \ + %{?with_appdata:-DENABLE_APPDATA=ON} \ + -DUSE_VENDORDIRS=ON \ + -DWITH_LIBXML2=ON \ + -DENABLE_LZMA_COMPRESSION=ON \ + -DENABLE_BZIP2_COMPRESSION=ON \ + %{?with_helix_repo:-DENABLE_HELIXREPO=ON} \ + %{?with_suse_repo:-DENABLE_SUSEREPO=ON} \ + %{?with_debian_repo:-DENABLE_DEBIAN=ON} \ + %{?with_arch_repo:-DENABLE_ARCHREPO=ON} \ + %{?with_multi_semantics:-DMULTI_SEMANTICS=ON} \ + %{?with_complex_deps:-DENABLE_COMPLEX_DEPS=1} \ + %{?with_perl_bindings:-DENABLE_PERL=ON} \ + %{?with_ruby_bindings:-DENABLE_RUBY=ON} \ +%if %{with python2_bindings} || %{with python3_bindings} + -DENABLE_PYTHON=ON \ +%if %{with python2_bindings} + -DPythonLibs_FIND_VERSION=%{python2_version} \ + -DPythonLibs_FIND_VERSION_MAJOR=2 \ +%if %{with python3_bindings} + -DENABLE_PYTHON3=ON \ + -DPYTHON3_EXECUTABLE=%{__python3} \ +%endif +%else + -DPythonLibs_FIND_VERSION=%{python3_version} \ + -DPythonLibs_FIND_VERSION_MAJOR=3 \ +%endif +%endif + %{nil} +%ninja_build -C "%{_vpath_builddir}" + +%install +%ninja_install -C "%{_vpath_builddir}" + +%check +%ninja_test -C "%{_vpath_builddir}" + +%ldconfig_scriptlets + +%files +%license LICENSE* +%doc README +%{_libdir}/%{name}.so.* +%{_libdir}/%{name}ext.so.* + +%files devel +%{_libdir}/%{name}.so +%{_libdir}/%{name}ext.so +%{_includedir}/%{libname}/ +%{_libdir}/pkgconfig/%{name}.pc +%{_libdir}/pkgconfig/%{name}ext.pc +# Own directory because we don't want to depend on cmake +%dir %{_datadir}/cmake/Modules/ +%{_datadir}/cmake/Modules/FindLibSolv.cmake +%{_mandir}/man3/%{name}*.3* + +# Some small macro to list tools with mans +%global solv_tool() \ +%{_bindir}/%{1}\ +%{_mandir}/man1/%{1}.1* + +%files tools +%solv_tool deltainfoxml2solv +%solv_tool dumpsolv +%solv_tool installcheck +%solv_tool mergesolv +%solv_tool repomdxml2solv +%solv_tool rpmdb2solv +%solv_tool rpmmd2solv +%solv_tool rpms2solv +%solv_tool testsolv +%solv_tool updateinfoxml2solv +%solv_tool repo2solv +%if %{with comps} + %solv_tool comps2solv +%endif +%if %{with appdata} + %solv_tool appdata2solv +%endif +%if %{with debian_repo} + %solv_tool deb2solv +%endif +%if %{with arch_repo} + %solv_tool archpkgs2solv + %solv_tool archrepo2solv +%endif +%if %{with helix_repo} + %solv_tool helix2solv +%endif +%if %{with suse_repo} + %solv_tool susetags2solv +%endif + +%files demo +%solv_tool solv + +%if %{with perl_bindings} +%files -n perl-%{libname} +%{perl_vendorarch}/%{libname}.pm +%{perl_vendorarch}/%{libname}.so +%endif + +%if %{with ruby_bindings} +%files -n ruby-%{libname} +%{ruby_vendorarchdir}/%{libname}.so +%endif + +%if %{with python2_bindings} +%files -n python2-%{libname} +%{python2_sitearch}/_%{libname}.so +%{python2_sitearch}/%{libname}.py* +%endif + +%if %{with python3_bindings} +%files -n python3-%{libname} +%{python3_sitearch}/_%{libname}.so +%{python3_sitearch}/%{libname}.py +%{python3_sitearch}/__pycache__/%{libname}.* +%endif + +%changelog +* Fri Feb 08 2019 Jaroslav Mracek - 0.6.35-6 +- Backport patch to add support for modular updateinfoxml data + +* Wed Feb 06 2019 Jaroslav Mracek - 0.6.35-5 +- Backport patches for: Install of update of nss.x86_64 adds i686 into transaction (RhBug:1663136) + +* Wed Dec 12 2018 Pavla Kratochvilova - 0.6.35-4 +- Backport patch: Fix memory leaks, memory access, not used values + +* Mon Oct 15 2018 Jaroslav Mracek - 0.6.35-3 +- Update to 0.6.35 +- Backport patch: Make sure that targeted updates don't do reinstalls + +* Sun Jun 10 2018 Charalampos Stratakis - 0.6.34-2 +- Conditionalize the python2 subpackage + +* Mon Mar 26 2018 Igor Gnatenko - 0.6.34-1 +- Update to 0.6.34 + +* Wed Feb 28 2018 Igor Gnatenko - 0.6.33-1 +- Update to 0.6.33 + +* Tue Feb 13 2018 Igor Gnatenko - 0.6.32-1 +- Update to 0.6.32 + +* Wed Feb 07 2018 Fedora Release Engineering - 0.6.31-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Wed Jan 31 2018 Igor Gnatenko - 0.6.31-1 +- Update to 0.6.31 + +* Tue Jan 30 2018 Igor Gnatenko - 0.6.30-9.git.2901.47fbaa2 +- Use librpm to access rpm headers + +* Tue Jan 30 2018 Igor Gnatenko - 0.6.30-8.git.2900.8bdcce1 +- Use librpm to access DB + +* Tue Jan 30 2018 Igor Gnatenko - 0.6.30-7.git.2898.ae214a6 +- Switch to %%ldconfig_scriptlets + +* Mon Jan 29 2018 Igor Gnatenko - 0.6.30-6.git.2898.ae214a6 +- Disable librpm from accessing DB + +* Mon Jan 29 2018 Igor Gnatenko - 0.6.30-5.git.2898.ae214a6 +- Allow disabling python2 bindings + +* Mon Jan 29 2018 Igor Gnatenko - 0.6.30-4.git.2898.ae214a6 +- Switch to ninja-build + +* Mon Jan 29 2018 Igor Gnatenko - 0.6.30-3.git.2898.ae214a6 +- Update to latest git version +- Switch to use librpm for accessing headers / rpmdb + +* Mon Nov 20 2017 Igor Gnatenko - 0.6.30-3.git.2887.97b8c0c +- Update to latest snapshot + +* Mon Nov 06 2017 Panu Matilainen - 0.6.30-2 +- Better error message on DB_VERSION_MISMATCH errors + +* Tue Oct 24 2017 Igor Gnatenko - 0.6.30-1 +- Update to 0.6.30 + +* Tue Sep 19 2017 Panu Matilainen - 0.6.29-2 +- Band-aid for DB_VERSION_MISMATCH errors on glibc updates + +* Thu Sep 07 2017 Igor Gnatenko - 0.6.29-1 +- Update to 0.6.29 + +* Fri Aug 11 2017 Igor Gnatenko - 0.6.28-8 +- Rebuilt after RPM update (№ 3) + +* Thu Aug 10 2017 Igor Gnatenko - 0.6.28-7 +- Rebuilt for RPM soname bump + +* Thu Aug 10 2017 Igor Gnatenko - 0.6.28-6 +- Rebuilt for RPM soname bump + +* Thu Aug 03 2017 Igor Gnatenko - 0.6.28-5 +- Add support for REL_WITHOUT + +* Thu Aug 03 2017 Fedora Release Engineering - 0.6.28-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 0.6.28-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Fri Jul 21 2017 Igor Gnatenko - 0.6.28-2 +- Backport patch for fixing yumobs + +* Sat Jul 01 2017 Igor Gnatenko - 0.6.28-1 +- Update to 0.6.28 + +* Mon May 29 2017 Igor Gnatenko - 0.6.27-2 +- Backport few fixes for bindings + +* Thu May 04 2017 Igor Gnatenko - 0.6.27-1 +- Update to 0.6.27 + +* Mon Mar 27 2017 Igor Gnatenko - 0.6.26-5.git.20.668e249 +- Update to latest snapshot + +* Sat Mar 18 2017 Neal Gompa - 0.6.26-4.git.19.2262346 +- Enable AppData support (#1427171) + +* Thu Mar 16 2017 Igor Gnatenko - 0.6.26-3.git.19.2262346 +- Update to latest git +- Switch to libxml2 + +* Mon Mar 06 2017 Igor Gnatenko - 0.6.26-2 +- Use %%{__python3} as PYTHON3_EXECUTABLE + +* Wed Feb 15 2017 Igor Gnatenko - 0.6.26-1 +- Update to 0.6.26 + +* Tue Feb 07 2017 Igor Gnatenko - 0.6.25-1 +- Update to 0.6.25 + +* Fri Jan 13 2017 Vít Ondruch - 0.6.24-4 +- Rebuilt for https://fedoraproject.org/wiki/Changes/Ruby_2.4 + +* Mon Dec 12 2016 Charalampos Stratakis - 0.6.24-3 +- Rebuild for Python 3.6 + +* Fri Dec 09 2016 Orion Poplawski - 0.6.24-2 +- Use upstream python build options + +* Fri Nov 11 2016 Igor Gnatenko - 0.6.24-1 +- Update to 0.6.24 + +* Sat Oct 29 2016 Denis Ollier - 0.6.23-6 +- Typo fixes in spec: s/MULTI_SYMANTICS/MULTI_SEMANTICS/ + +* Tue Sep 13 2016 Igor Gnatenko - 0.6.23-5 +- Trivial fixes in spec + +* Sat Aug 27 2016 Neal Gompa - 0.6.23-4 +- Enable suserepo on Fedora to enable making openSUSE containers with Zypper + +* Fri Aug 12 2016 Igor Gnatenko - 0.6.23-3 +- Enable helixrepo on Fedora + +* Wed Aug 03 2016 Igor Gnatenko - 0.6.23-2 +- Backport patch to fix dnf --debugsolver crash (RHBZ #1361831) + +* Wed Jul 27 2016 Igor Gnatenko - 0.6.23-1 +- Update to 0.6.23 + +* Wed Jul 20 2016 Igor Gnatenko - 0.6.22-3 +- Backport couple of patches from upstream + +* Tue Jul 19 2016 Fedora Release Engineering - 0.6.22-2 +- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages + +* Tue Jun 14 2016 Igor Gnatenko - 0.6.22-1 +- Update to 0.6.22 +- Backport patch which will help to not autoremove needed packages + (RHBZ #1227066, #1284349) + +* Mon Jun 06 2016 Igor Gnatenko - 0.6.21-3 +- Enable deb/arch support for non-rhel distros + +* Mon May 30 2016 Igor Gnatenko - 0.6.21-2 +- Modify enabled/disabled features + +* Wed May 18 2016 Igor Gnatenko - 0.6.21-1 +- Update to 0.6.21 + +* Tue May 17 2016 Igor Gnatenko - 0.6.20-2 +- Backport patch to fix crashing on reading some repos (RHBZ #1318662) +- Backport patch to fix installing multilib packages with weak deps + (RHBZ #1325471) + +* Sat Apr 09 2016 Igor Gnatenko - 0.6.20-1 +- Update to 0.6.20 + +* Tue Apr 05 2016 Igor Gnatenko - 0.6.19-3 +- Reorganize spec file +- Enable helixrepo feature +- enable appdata feature + +* Tue Mar 8 2016 Jaroslav Mracek - 0.6.19-2 +- Apply 9 patches from upstream + +* Sat Feb 27 2016 Igor Gnatenko - 0.6.19-1 +- Update to 0.6.19 + +* Tue Feb 2 2016 Peter Robinson 0.6.15-6 +- Explicitly add rubypick and ruubygems build dependencies + +* Tue Jan 12 2016 Vít Ondruch - 0.6.15-5 +- Rebuilt for https://fedoraproject.org/wiki/Changes/Ruby_2.3 + +* Sun Jan 10 2016 Dan Horák - 0.6.15-4 +- fix build on non-Fedora with python3 + +* Tue Jan 05 2016 Jaroslav Mracek - 0.6.15-3 +- Fix bz2 compression support for python3 (RhBug:1293652) + +* Fri Dec 18 2015 Michal Luscon - 0.6.15-2 +- Revert reworked multiversion orphaned handling + +* Thu Dec 17 2015 Igor Gnatenko - 0.6.15-1 +- Update to 0.6.15 + +* Tue Dec 08 2015 Jaroslav Mracek - 0.6.14-7 +- Rebase to upstream b1ea392 +- Enable bz2 compression support (Mikolaj Izdebski ) (RhBug:1226647) + +* Thu Nov 26 2015 Adam Williamson - 0.6.14-6 +- revert obsolete, as %%python_provide does it (undocumented) + +* Wed Nov 18 2015 Adam Williamson - 0.6.14-5 +- adjust obsolete for stupid packaging + +* Wed Nov 18 2015 Adam Williamson - 0.6.14-4 +- python2-solv obsoletes python-solv (#1263230) + +* Tue Nov 10 2015 Fedora Release Engineering - 0.6.14-3 +- Rebuilt for https://fedoraproject.org/wiki/Changes/python3.5 + +* Wed Oct 14 2015 Michal Luscon - 0.6.14-2 +- Backport patches from upstream + +* Mon Oct 12 2015 Igor Gnatenko - 0.6.14-1 +- Update to 0.6.14 +- Backport patches from upstream + +* Thu Sep 10 2015 Igor Gnatenko - 0.6.12-1 +- Update to 0.6.12 + +* Wed Aug 05 2015 Jan Silhan - 0.6.11-3 +- added compile flag to support rich dependencies +- new version adding MIPS support +- Distribute testsolv in -tools subpackage (Igor Gnatenko) +- Enable python3 bindings for fedora (Igor Gnatenko) + +* Tue Aug 04 2015 Adam Williamson - 0.6.11-2 +- make bindings require the exact matching version of the lib (#1243737) + +* Mon Jun 22 2015 Jan Silhan - 0.6.11-1 +- new version fixing segfault +- RbConfig fixed in the upstream (1928f1a), libsolv-ruby22-rbconfig.patch erased + +* Wed Jun 17 2015 Fedora Release Engineering - 0.6.10-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Wed Mar 25 2015 Jan Silhan - 0.6.10-1 +- new version fixing segfault + +* Fri Mar 6 2015 Jan Silhan - 0.6.8-3 +- Rebuilt with new provides selection feature + +* Mon Jan 19 2015 Vít Ondruch - 0.6.8-2 +- Rebuilt for https://fedoraproject.org/wiki/Changes/Ruby_2.2 + +* Fri Jan 16 2015 Richard Hughes - 0.6.8-2 +- Update to latest upstream release to fix a crash in PackageKit. + +* Sun Aug 17 2014 Fedora Release Engineering - 0.6.4-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + + +* Mon Aug 11 2014 Jan Silhan - 0.6.4-2 +- Rebase to upstream 12af31a + +* Mon Jul 28 2014 Aleš Kozumplík - 0.6.4-1 +- Rebase to upstream 5bd9589 + +* Mon Jul 14 2014 Jan Silhan - 0.6.4-0.git2a5c1c4 +- Rebase to upstream 2a5c1c4 +- Filename selector can start with a star + +* Sat Jun 07 2014 Fedora Release Engineering - 0.6.1-2.git6d968f1 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Tue May 27 2014 Aleš Kozumplík - 0.6.1-1.git6d968f1 +- Rebase to upstream 6d968f1 +- Fix RhBug:1049209 + +* Fri Apr 25 2014 Jan Silhan - 0.6.1-0.gitf78f5de +- Rebase to 0.6.0, upstream commit f78f5de. + +* Thu Apr 24 2014 Vít Ondruch - 0.6.0-0.git05baf54.1 +- Rebuilt for https://fedoraproject.org/wiki/Changes/Ruby_2.1 + +* Wed Apr 9 2014 Jan Silhan - 0.6.0-0.git05baf54 +- Rebase to 0.6.0, upstream commit 05baf54. + +* Mon Dec 16 2013 Aleš Kozumplík - 0.4.1-1.gitbcedc98 +- Rebase upstream bcedc98 +- Fix RhBug:1051917. + +* Mon Dec 16 2013 Aleš Kozumplík - 0.4.1-0.gita8e47f1 +- Rebase to 0.4.1, upstream commit a8e47f1. + +* Fri Nov 22 2013 Zdenek Pavlas - 0.4.0-2.git4442b7f +- Rebase to 0.4.0, upstream commit 4442b7f. +- support DELTA_LOCATION_BASE for completeness + +* Tue Oct 29 2013 Aleš Kozumplík - 0.4.0-1.gitd49d319 +- Rebase to 0.4.0, upstream commit d49d319. + +* Sat Aug 03 2013 Petr Pisar - 0.3.0-9.gita59d11d +- Perl 5.18 rebuild + +* Wed Jul 31 2013 Aleš Kozumplík - 0.3.0-8.gita59d11d +- Rebase to upstream a59d11d. + +* Fri Jul 19 2013 Aleš Kozumplík - 0.3.0-7.git228d412 +- Add build flags, including Deb, Arch, LZMA and MULTI_SEMANTICS. (RhBug:985905) + +* Wed Jul 17 2013 Petr Pisar - 0.3.0-6.git228d412 +- Perl 5.18 rebuild + +* Mon Jun 24 2013 Aleš Kozumplík - 0.3.0-5.git228d412 +- Rebase to upstream 228d412. +- Fixes hawkey github issue https://github.com/akozumpl/hawkey/issues/13 + +* Thu Jun 20 2013 Aleš Kozumplík - 0.3.0-4.git209e9cb +- Rebase to upstream 209e9cb. +- Package the new man pages. + +* Thu May 16 2013 Aleš Kozumplík - 0.3.0-3.git7399ad1 +- Run 'make test' with libsolv build. + +* Mon Apr 8 2013 Aleš Kozumplík - 0.3.0-2.git7399ad1 +- Rebase to upstream 7399ad1. +- Fixes RhBug:905209 + +* Mon Apr 8 2013 Aleš Kozumplík - 0.3.0-1.gite372b78 +- Rebase to upstream e372b78. +- Fixes RhBug:e372b78 + +* Thu Feb 14 2013 Fedora Release Engineering - 0.2.3-2.gitf663ca2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Thu Aug 23 2012 Aleš Kozumplík - 0.0.0-17.git6c9d3eb +- Rebase to upstream 6c9d3eb. +- Drop the solv.i stdbool.h fix integrated upstream. +- Dropped the job reasons fix. + +* Mon Jul 23 2012 Aleš Kozumplík - 0.0.0-16.git1617994 +- Fix build problems with Perl bindings. + +* Mon Jul 23 2012 Aleš Kozumplík - 0.0.0-15.git1617994 +- Rebuilt after a failed mass rebuild. + +* Thu Jul 19 2012 Fedora Release Engineering - 0.0.0-14.git1617994 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Mon Jul 16 2012 Aleš Kozumplik - 0.0.0-13.git1617994%{?dist} +- preliminary fix for JOB resons in solver_describe_decision(). + +* Sun Jul 1 2012 Aleš Kozumplik - 0.0.0-12.git1617994%{?dist} +- Rebase to upstream 1617994. +- Support for RPM_ADD_WITH_HDRID. + +* Thu Jun 7 2012 Aleš Kozumplik - 0.0.0-11.gitd39a42b%{?dist} +- Rebase to upstream d39a42b. +- Fix the epochs. +- Move the ruby modules into vendorarch dir, where they are expected. + +* Thu May 17 2012 Aleš Kozumplik - 0.0.0-9.git8cf7650%{?dist} +- Rebase to upstream 8cf7650. +- ruby bindings: fix USE_VENDORDIRS for Fedora. + +* Thu Apr 12 2012 Aleš Kozumplik - 0.0.0-7.gitaf1465a2%{?dist} +- Rebase to the upstream. +- Make repo_add_solv() work without stub repodata. + +* Thu Apr 5 2012 Karel Klíč - 0.0.0-6.git80afaf7%{?dist} +- Rebuild for the new libdb package. + +* Mon Apr 2 2012 Karel Klíč - 0.0.0-5.git80afaf7%{?dist} +- Rebuild for the new rpm package. + +* Wed Mar 21 2012 Aleš Kozumplík - 0.0.0-4.git80afaf7%{?dist} +- New upstream version, fix the .rpm release number. + +* Wed Mar 21 2012 Aleš Kozumplík - 0.0.0-3.git80afaf7%{?dist} +- New upstream version. + +* Tue Feb 7 2012 Karel Klíč - 0.0.0-2.git857fe28%{?dist} +- Adapted to Ruby 1.9.3 (workaround for broken CMake in Fedora and + ruby template correction in bindings) + +* Thu Feb 2 2012 Karel Klíč - 0.0.0-1.git857fe28 +- Initial packaging +- Based on Jindra Novy's spec file +- Based on upstream spec file