Compare commits
No commits in common. "b51c48040b337fdaf5a7263124fc97e2107d6929" and "6049a99ba5e897652c94eaad21c5bd91f6da17d7" have entirely different histories.
b51c48040b
...
6049a99ba5
BIN
0.7.20.tar.gz
Normal file
BIN
0.7.20.tar.gz
Normal file
Binary file not shown.
BIN
0.7.22.tar.gz
BIN
0.7.22.tar.gz
Binary file not shown.
@ -1,29 +0,0 @@
|
||||
From 9a361f5248557e032f15890aac54c0db53c52098 Mon Sep 17 00:00:00 2001
|
||||
From: banjiuqingshan <63209634+banjiuqingshan@users.noreply.github.com>
|
||||
Date: Sun, 19 Jun 2022 01:43:51 +0800
|
||||
Subject: [PATCH] Fix memory leak when using testsolv to execute cases
|
||||
|
||||
*resultp will only keep the pointer of the last cycle, which will lead to memory leakage.
|
||||
This solves the first memory leak problem in issue #496 "==255147==error..."
|
||||
---
|
||||
ext/testcase.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/ext/testcase.c b/ext/testcase.c
|
||||
index 035cfdbd..c529057a 100644
|
||||
--- a/ext/testcase.c
|
||||
+++ b/ext/testcase.c
|
||||
@@ -2448,7 +2448,10 @@ testcase_read(Pool *pool, FILE *fp, const char *testcase, Queue *job, char **res
|
||||
}
|
||||
}
|
||||
if (resultp)
|
||||
+ {
|
||||
+ solv_free(*resultp);
|
||||
*resultp = result;
|
||||
+ }
|
||||
else
|
||||
solv_free(result);
|
||||
if (resultflagsp)
|
||||
--
|
||||
2.27.0
|
||||
|
||||
@ -1,26 +0,0 @@
|
||||
From 47734e26d67ad236a29c160ff224fcb1910e3a6f Mon Sep 17 00:00:00 2001
|
||||
From: Michael Schroeder <mls@suse.de>
|
||||
Date: Tue, 18 Apr 2023 12:36:40 +0200
|
||||
Subject: [PATCH] Add testcase for last commit
|
||||
|
||||
---
|
||||
test/testcases/cplxdeps/ifelse_rec.t | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
create mode 100644 test/testcases/cplxdeps/ifelse_rec.t
|
||||
|
||||
diff --git a/test/testcases/cplxdeps/ifelse_rec.t b/test/testcases/cplxdeps/ifelse_rec.t
|
||||
new file mode 100644
|
||||
index 000000000..ea467027c
|
||||
--- /dev/null
|
||||
+++ b/test/testcases/cplxdeps/ifelse_rec.t
|
||||
@@ -0,0 +1,10 @@
|
||||
+repo appstream 0 testtags <inline>
|
||||
+#>=Pkg: xorg-x11-server-Xorg 1.20.11 18.el9 noarch
|
||||
+#>=Req: missing-req
|
||||
+#>=Pkg: pass 1.7.4 6.el9 noarch
|
||||
+#>=Rec: xclip <IF> (xorg-x11-server-Xorg <ELSE> wl-clipboard)
|
||||
+repo @System 0 empty
|
||||
+system unset * @System
|
||||
+job install pkg pass-1.7.4-6.el9.noarch@appstream
|
||||
+result transaction,problems <inline>
|
||||
+#>install pass-1.7.4-6.el9.noarch@appstream
|
||||
@ -1,58 +0,0 @@
|
||||
From 2c4ee52a948a9ccff2242cd02ac8ce81a0559deb Mon Sep 17 00:00:00 2001
|
||||
From: David Cantrell <dcantrell@redhat.com>
|
||||
Date: Tue, 26 Mar 2024 12:13:55 -0400
|
||||
Subject: [PATCH] Fix a couple small static analysis findings for uninitialized
|
||||
structs
|
||||
|
||||
The memset() on the KeyValue is more explicit even though if you trace
|
||||
the code you will see it fills out the struct. However, it's possible
|
||||
that not every struct member will be initialized and adding the
|
||||
memset() makes things more obvious and appeases the static analyzer.
|
||||
|
||||
The queue_init() appeared to just be missing.
|
||||
|
||||
Conflict:NA
|
||||
Reference:https://github.com/openSUSE/libsolv/commit/2c4ee52a948a9ccff2242cd02ac8ce81a0559deb
|
||||
---
|
||||
ext/repo_rpmmd.c | 2 ++
|
||||
ext/repo_susetags.c | 1 +
|
||||
ext/testcase.c | 1 +
|
||||
3 files changed, 4 insertions(+)
|
||||
|
||||
diff --git a/ext/repo_rpmmd.c b/ext/repo_rpmmd.c
|
||||
index 1232e4337..5d0f5fe7d 100644
|
||||
--- a/ext/repo_rpmmd.c
|
||||
+++ b/ext/repo_rpmmd.c
|
||||
@@ -609,6 +609,8 @@ fill_cshash_from_new_solvables(struct parsedata *pd)
|
||||
KeyValue kv;
|
||||
Repokey *key;
|
||||
|
||||
+ memset(&kv, 0, sizeof(kv));
|
||||
+
|
||||
for (i = pd->first; i < pool->nsolvables; i++)
|
||||
{
|
||||
if (pool->solvables[i].repo != pd->repo)
|
||||
diff --git a/ext/repo_susetags.c b/ext/repo_susetags.c
|
||||
index dc60aa49c..544974be5 100644
|
||||
--- a/ext/repo_susetags.c
|
||||
+++ b/ext/repo_susetags.c
|
||||
@@ -339,6 +339,7 @@ lookup_shared_id(Repodata *data, Id p, Id keyname, Id voidid, int uninternalized
|
||||
if (uninternalized)
|
||||
{
|
||||
KeyValue kv;
|
||||
+ memset(&kv, 0, sizeof(kv));
|
||||
Repokey *key = repodata_lookup_kv_uninternalized(data, p, keyname, &kv);
|
||||
if (!key)
|
||||
return 0;
|
||||
diff --git a/ext/testcase.c b/ext/testcase.c
|
||||
index f46f738d3..7b6179b5d 100644
|
||||
--- a/ext/testcase.c
|
||||
+++ b/ext/testcase.c
|
||||
@@ -1497,6 +1497,7 @@ testcase_solverresult(Solver *solv, int resultflags)
|
||||
if ((resultflags & TESTCASE_RESULT_USERINSTALLED) != 0)
|
||||
{
|
||||
Queue q;
|
||||
+ queue_init(&q);
|
||||
solver_get_userinstalled(solv, &q, 0);
|
||||
for (i = 0; i < q.count; i++)
|
||||
{
|
||||
@ -1,72 +0,0 @@
|
||||
From bbd1801748e74259f7d8d7d7eee369064961962b Mon Sep 17 00:00:00 2001
|
||||
From: Michael Schroeder <mls@suse.de>
|
||||
Date: Tue, 13 Feb 2024 15:25:47 +0100
|
||||
Subject: [PATCH] Handle installed packages in three passes
|
||||
|
||||
Fixes issue #550
|
||||
|
||||
Conflict:NA
|
||||
Reference:https://github.com/openSUSE/libsolv/commit/bbd1801748e74259f7d8d7d7eee369064961962b
|
||||
---
|
||||
src/solver.c | 21 ++++++++++++++++-----
|
||||
1 file changed, 16 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/solver.c b/src/solver.c
|
||||
index 741aa1b2f..a1a41f677 100644
|
||||
--- a/src/solver.c
|
||||
+++ b/src/solver.c
|
||||
@@ -1836,7 +1836,7 @@ resolve_installed(Solver *solv, int level, int disablerules, Queue *dq)
|
||||
{
|
||||
Pool *pool = solv->pool;
|
||||
Repo *installed = solv->installed;
|
||||
- int i, n, pass;
|
||||
+ int i, n, pass, startpass;
|
||||
int installedpos = solv->installedpos;
|
||||
Solvable *s;
|
||||
Id p, pp;
|
||||
@@ -1845,10 +1845,14 @@ resolve_installed(Solver *solv, int level, int disablerules, Queue *dq)
|
||||
POOL_DEBUG(SOLV_DEBUG_SOLVER, "resolving installed packages\n");
|
||||
if (!installedpos)
|
||||
installedpos = installed->start;
|
||||
- /* we use two passes if we need to update packages
|
||||
- * to create a better user experience */
|
||||
- for (pass = !solv->updatemap_all && solv->updatemap.size ? 0 : 1; pass < 2; )
|
||||
+ /* we use passes if we need to update packages to create a better user experience:
|
||||
+ * pass 0: update the packages requested by the user
|
||||
+ * pass 1: keep the installed packages if we can
|
||||
+ * pass 2: update the packages that could not be kept */
|
||||
+ startpass = solv->updatemap_all ? 2 : solv->updatemap.size ? 0 : 1;
|
||||
+ for (pass = startpass; pass < 3; )
|
||||
{
|
||||
+ int needpass2 = 0;
|
||||
int passlevel = level;
|
||||
Id *specialupdaters = solv->specialupdaters;
|
||||
/* start with installedpos, the position that gave us problems the last time */
|
||||
@@ -1880,6 +1884,11 @@ resolve_installed(Solver *solv, int level, int disablerules, Queue *dq)
|
||||
* the installed package and not replace it with a newer version */
|
||||
if (!MAPTST(&solv->noupdate, i - installed->start) && (solv->decisionmap[i] < 0 || solv->updatemap_all || (solv->updatemap.size && MAPTST(&solv->updatemap, i - installed->start))))
|
||||
{
|
||||
+ if (pass == 1)
|
||||
+ {
|
||||
+ needpass2 = 1; /* first do the packages we do not want/need to update */
|
||||
+ continue;
|
||||
+ }
|
||||
if (dq->count)
|
||||
queue_empty(dq);
|
||||
/* find update candidates */
|
||||
@@ -1964,12 +1973,14 @@ resolve_installed(Solver *solv, int level, int disablerules, Queue *dq)
|
||||
if (level < origlevel)
|
||||
break; /* ran into trouble */
|
||||
/* re-run all passes */
|
||||
- pass = !solv->updatemap_all && solv->updatemap.size ? 0 : 1;
|
||||
+ pass = startpass;
|
||||
continue;
|
||||
}
|
||||
/* reset installedpos, advance to next pass */
|
||||
installedpos = installed->start;
|
||||
pass++;
|
||||
+ if (pass == 2 && !needpass2)
|
||||
+ break;
|
||||
}
|
||||
solv->installedpos = installedpos;
|
||||
return level;
|
||||
@ -1,192 +0,0 @@
|
||||
From 4c7ce065280f062c52ae19d75344c49e5f562108 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Schroeder <mls@suse.de>
|
||||
Date: Tue, 13 Feb 2024 14:42:25 +0100
|
||||
Subject: [PATCH] Move special updaters handling into its own function
|
||||
|
||||
Conflict:NA
|
||||
Reference:https://github.com/openSUSE/libsolv/commit/4c7ce065280f062c52ae19d75344c49e5f562108
|
||||
---
|
||||
src/solver.c | 127 ++++++++++++++++++++++++++++-----------------------
|
||||
1 file changed, 71 insertions(+), 56 deletions(-)
|
||||
|
||||
diff --git a/src/solver.c b/src/solver.c
|
||||
index 0c3333d87..741aa1b2f 100644
|
||||
--- a/src/solver.c
|
||||
+++ b/src/solver.c
|
||||
@@ -1788,6 +1788,49 @@ prune_to_update_targets(Solver *solv, Id *cp, Queue *q)
|
||||
queue_truncate(q, j);
|
||||
}
|
||||
|
||||
+static void
|
||||
+get_special_updaters(Solver *solv, int i, Rule *rr, Queue *dq)
|
||||
+{
|
||||
+ Pool *pool = solv->pool;
|
||||
+ Repo *installed = solv->installed;
|
||||
+ int specoff = solv->specialupdaters[i - installed->start];
|
||||
+ int j, d;
|
||||
+ Id p;
|
||||
+
|
||||
+ /* special multiversion handling, make sure best version is chosen */
|
||||
+ if (rr->p == i && solv->decisionmap[i] >= 0)
|
||||
+ queue_push(dq, i);
|
||||
+ for (d = specoff; (p = pool->whatprovidesdata[d]) != 0; d++)
|
||||
+ if (solv->decisionmap[p] >= 0)
|
||||
+ queue_push(dq, p);
|
||||
+ /* if we have installed packages try to find identical ones to get
|
||||
+ * repo priorities. see issue #343 */
|
||||
+ for (j = 0; j < dq->count; j++)
|
||||
+ {
|
||||
+ Id p2 = dq->elements[j];
|
||||
+ if (pool->solvables[p2].repo != installed)
|
||||
+ continue;
|
||||
+ for (d = specoff; (p = pool->whatprovidesdata[d]) != 0; d++)
|
||||
+ {
|
||||
+ if (solv->decisionmap[p] >= 0 || pool->solvables[p].repo == installed)
|
||||
+ continue;
|
||||
+ if (solvable_identical(pool->solvables + p, pool->solvables + p2))
|
||||
+ queue_push(dq, p); /* identical to installed, put it on the list so we have a repo prio */
|
||||
+ }
|
||||
+ }
|
||||
+ if (dq->count && solv->update_targets && solv->update_targets->elements[i - installed->start])
|
||||
+ prune_to_update_targets(solv, solv->update_targets->elements + solv->update_targets->elements[i - installed->start], dq);
|
||||
+ if (dq->count)
|
||||
+ {
|
||||
+ policy_filter_unwanted(solv, dq, POLICY_MODE_CHOOSE);
|
||||
+ p = dq->elements[0];
|
||||
+ if (p != i && solv->decisionmap[p] == 0)
|
||||
+ dq->count = 1;
|
||||
+ else
|
||||
+ dq->count = 0;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static int
|
||||
resolve_installed(Solver *solv, int level, int disablerules, Queue *dq)
|
||||
{
|
||||
@@ -1804,7 +1847,7 @@ resolve_installed(Solver *solv, int level, int disablerules, Queue *dq)
|
||||
installedpos = installed->start;
|
||||
/* we use two passes if we need to update packages
|
||||
* to create a better user experience */
|
||||
- for (pass = solv->updatemap.size ? 0 : 1; pass < 2; )
|
||||
+ for (pass = !solv->updatemap_all && solv->updatemap.size ? 0 : 1; pass < 2; )
|
||||
{
|
||||
int passlevel = level;
|
||||
Id *specialupdaters = solv->specialupdaters;
|
||||
@@ -1812,7 +1855,6 @@ resolve_installed(Solver *solv, int level, int disablerules, Queue *dq)
|
||||
for (i = installedpos, n = installed->start; n < installed->end; i++, n++)
|
||||
{
|
||||
Rule *r, *rr;
|
||||
- Id d;
|
||||
|
||||
if (i == installed->end)
|
||||
i = installed->start;
|
||||
@@ -1836,48 +1878,20 @@ resolve_installed(Solver *solv, int level, int disablerules, Queue *dq)
|
||||
/* check if we should update this package to the latest version
|
||||
* noupdate is set for erase jobs, in that case we want to deinstall
|
||||
* the installed package and not replace it with a newer version */
|
||||
- if (dq->count)
|
||||
- queue_empty(dq);
|
||||
if (!MAPTST(&solv->noupdate, i - installed->start) && (solv->decisionmap[i] < 0 || solv->updatemap_all || (solv->updatemap.size && MAPTST(&solv->updatemap, i - installed->start))))
|
||||
{
|
||||
- if (specialupdaters && (d = specialupdaters[i - installed->start]) != 0)
|
||||
+ if (dq->count)
|
||||
+ queue_empty(dq);
|
||||
+ /* find update candidates */
|
||||
+ if (specialupdaters && specialupdaters[i - installed->start] != 0)
|
||||
{
|
||||
- int j;
|
||||
- /* special multiversion handling, make sure best version is chosen */
|
||||
- if (rr->p == i && solv->decisionmap[i] >= 0)
|
||||
- queue_push(dq, i);
|
||||
- while ((p = pool->whatprovidesdata[d++]) != 0)
|
||||
- if (solv->decisionmap[p] >= 0)
|
||||
- queue_push(dq, p);
|
||||
- for (j = 0; j < dq->count; j++)
|
||||
- {
|
||||
- Id p2 = dq->elements[j];
|
||||
- if (pool->solvables[p2].repo != installed)
|
||||
- continue;
|
||||
- d = specialupdaters[i - installed->start];
|
||||
- while ((p = pool->whatprovidesdata[d++]) != 0)
|
||||
- {
|
||||
- if (solv->decisionmap[p] >= 0 || pool->solvables[p].repo == installed)
|
||||
- continue;
|
||||
- if (solvable_identical(pool->solvables + p, pool->solvables + p2))
|
||||
- queue_push(dq, p); /* identical to installed, put it on the list so we have a repo prio */
|
||||
- }
|
||||
- }
|
||||
- if (dq->count && solv->update_targets && solv->update_targets->elements[i - installed->start])
|
||||
- prune_to_update_targets(solv, solv->update_targets->elements + solv->update_targets->elements[i - installed->start], dq);
|
||||
+ get_special_updaters(solv, i, rr, dq);
|
||||
+ /* if we have an update set rr to the feature rule */
|
||||
if (dq->count)
|
||||
{
|
||||
- policy_filter_unwanted(solv, dq, POLICY_MODE_CHOOSE);
|
||||
- p = dq->elements[0];
|
||||
- if (p != i && solv->decisionmap[p] == 0)
|
||||
- {
|
||||
- rr = solv->rules + solv->featurerules + (i - solv->installed->start);
|
||||
- if (!rr->p) /* update rule == feature rule? */
|
||||
- rr = rr - solv->featurerules + solv->updaterules;
|
||||
- dq->count = 1;
|
||||
- }
|
||||
- else
|
||||
- dq->count = 0;
|
||||
+ rr = solv->rules + solv->featurerules + (i - solv->installed->start);
|
||||
+ if (!rr->p) /* update rule == feature rule? */
|
||||
+ rr = rr - solv->featurerules + solv->updaterules;
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1894,24 +1908,25 @@ resolve_installed(Solver *solv, int level, int disablerules, Queue *dq)
|
||||
queue_push(dq, p);
|
||||
}
|
||||
}
|
||||
- }
|
||||
- if (dq->count && solv->update_targets && solv->update_targets->elements[i - installed->start])
|
||||
- prune_to_update_targets(solv, solv->update_targets->elements + solv->update_targets->elements[i - installed->start], dq);
|
||||
- /* install best version */
|
||||
- if (dq->count)
|
||||
- {
|
||||
- olevel = level;
|
||||
- level = selectandinstall(solv, level, dq, disablerules, rr - solv->rules, SOLVER_REASON_UPDATE_INSTALLED);
|
||||
- if (level <= olevel)
|
||||
+ if (dq->count && solv->update_targets && solv->update_targets->elements[i - installed->start])
|
||||
+ prune_to_update_targets(solv, solv->update_targets->elements + solv->update_targets->elements[i - installed->start], dq);
|
||||
+ /* install best version */
|
||||
+ if (dq->count)
|
||||
{
|
||||
- if (level < passlevel)
|
||||
- break; /* trouble */
|
||||
- if (level < olevel)
|
||||
- n = installed->start; /* redo all */
|
||||
- i--;
|
||||
- n--;
|
||||
- continue;
|
||||
+ olevel = level;
|
||||
+ level = selectandinstall(solv, level, dq, disablerules, rr - solv->rules, SOLVER_REASON_UPDATE_INSTALLED);
|
||||
+ if (level <= olevel)
|
||||
+ {
|
||||
+ if (level < passlevel)
|
||||
+ break; /* trouble */
|
||||
+ if (level < olevel)
|
||||
+ n = installed->start; /* redo all */
|
||||
+ i--;
|
||||
+ n--;
|
||||
+ continue;
|
||||
+ }
|
||||
}
|
||||
+ /* check original package even if we installed an update */
|
||||
}
|
||||
/* if still undecided keep package */
|
||||
if (solv->decisionmap[i] == 0)
|
||||
@@ -1949,7 +1964,7 @@ resolve_installed(Solver *solv, int level, int disablerules, Queue *dq)
|
||||
if (level < origlevel)
|
||||
break; /* ran into trouble */
|
||||
/* re-run all passes */
|
||||
- pass = solv->updatemap.size ? 0 : 1;
|
||||
+ pass = !solv->updatemap_all && solv->updatemap.size ? 0 : 1;
|
||||
continue;
|
||||
}
|
||||
/* reset installedpos, advance to next pass */
|
||||
|
||||
@ -1,27 +0,0 @@
|
||||
From 1edb35a3bd9abcede3a200471a4d1868f8054c99 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Schroeder <mls@suse.de>
|
||||
Date: Tue, 18 Apr 2023 11:57:50 +0200
|
||||
Subject: [PATCH] Treat condition both as positive and negative literal in
|
||||
pool_add_pos_literals_complex_dep
|
||||
|
||||
That's because (A IF B ELSE C) gets rewritten to (A OR ~B) AND (C OR B) and
|
||||
(A UNLESS B ELSE C) gets rewritten to (A AND ~B) OR (C AND B). In both
|
||||
cases we have A, B, ~B, C.
|
||||
|
||||
This resolves issue #527
|
||||
---
|
||||
src/cplxdeps.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/src/cplxdeps.c b/src/cplxdeps.c
|
||||
index 6c40752e2..26e754d95 100644
|
||||
--- a/src/cplxdeps.c
|
||||
+++ b/src/cplxdeps.c
|
||||
@@ -405,6 +405,7 @@ pool_add_pos_literals_complex_dep(Pool *pool, Id dep, Queue *q, Map *m, int neg)
|
||||
Reldep *rd2 = GETRELDEP(pool, rd->evr);
|
||||
if (rd2->flags == REL_ELSE)
|
||||
{
|
||||
+ pool_add_pos_literals_complex_dep(pool, rd2->name, q, m, !neg);
|
||||
pool_add_pos_literals_complex_dep(pool, rd2->evr, q, m, !neg);
|
||||
dep = rd2->name;
|
||||
}
|
||||
@ -1,50 +0,0 @@
|
||||
From 2c85ed581422e072ad95119f3d7dc19eb45f29ac Mon Sep 17 00:00:00 2001
|
||||
From: Michael Schroeder <mls@suse.de>
|
||||
Date: Fri, 19 May 2023 15:17:53 +0200
|
||||
Subject: [PATCH] choice rules: also do solver_choicerulecheck for package
|
||||
downgrades
|
||||
|
||||
Fixes issue #514
|
||||
---
|
||||
src/rules.c | 13 ++++++++++++-
|
||||
1 file changed, 12 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/rules.c b/src/rules.c
|
||||
index 660656f01..7d57cfdee 100644
|
||||
--- a/src/rules.c
|
||||
+++ b/src/rules.c
|
||||
@@ -3449,6 +3449,7 @@ solver_addchoicerules(Solver *solv)
|
||||
int lastaddedcnt;
|
||||
unsigned int now;
|
||||
int isinstalled;
|
||||
+ int dodowngradecheck = solv->allowdowngrade;
|
||||
|
||||
solv->choicerules = solv->nrules;
|
||||
if (!pool->installed)
|
||||
@@ -3457,6 +3458,8 @@ solver_addchoicerules(Solver *solv)
|
||||
return;
|
||||
}
|
||||
now = solv_timems(0);
|
||||
+ if ((solv->dupinvolvedmap_all || solv->dupinvolvedmap.size) && solv->dup_allowdowngrade)
|
||||
+ dodowngradecheck = 1;
|
||||
queue_init(&q);
|
||||
queue_init(&qi);
|
||||
queue_init(&qcheck);
|
||||
@@ -3532,8 +3535,16 @@ solver_addchoicerules(Solver *solv)
|
||||
/* do extra checking for packages related to installed packages */
|
||||
for (i = j = 0; i < qi.count; i += 2)
|
||||
{
|
||||
+ int isdowngrade = 0;
|
||||
p2 = qi.elements[i];
|
||||
- if (solv->updatemap_all || (solv->updatemap.size && MAPTST(&solv->updatemap, p2 - solv->installed->start)))
|
||||
+ if (dodowngradecheck)
|
||||
+ {
|
||||
+ p = qi.elements[i + 1];
|
||||
+ if (pool->solvables[p2].name == pool->solvables[p].name)
|
||||
+ if (pool_evrcmp(pool, pool->solvables[p2].evr, pool->solvables[p].evr, EVRCMP_COMPARE) > 0)
|
||||
+ isdowngrade = 1;
|
||||
+ }
|
||||
+ if (isdowngrade || solv->updatemap_all || (solv->updatemap.size && MAPTST(&solv->updatemap, p2 - solv->installed->start)))
|
||||
{
|
||||
if (solver_choicerulecheck(solv, p2, r, &m, &qcheck))
|
||||
continue;
|
||||
@ -1,32 +0,0 @@
|
||||
From 553c69b514c1ca85a6311373b48c6096886dcff3 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Schroeder <mls@suse.de>
|
||||
Date: Tue, 13 Feb 2024 12:43:50 +0100
|
||||
Subject: [PATCH] resolve_installed: remove dead code
|
||||
|
||||
Since we simplified our dup handling the update rules always
|
||||
start with the installed package.
|
||||
|
||||
Conflict:NA
|
||||
Reference:https://github.com/openSUSE/libsolv/commit/553c69b514c1ca85a6311373b48c6096886dcff3
|
||||
---
|
||||
src/solver.c | 5 ++---
|
||||
1 file changed, 2 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/solver.c b/src/solver.c
|
||||
index 363d88734..0c3333d87 100644
|
||||
--- a/src/solver.c
|
||||
+++ b/src/solver.c
|
||||
@@ -1835,11 +1835,10 @@ resolve_installed(Solver *solv, int level, int disablerules, Queue *dq)
|
||||
|
||||
/* check if we should update this package to the latest version
|
||||
* noupdate is set for erase jobs, in that case we want to deinstall
|
||||
- * the installed package and not replace it with a newer version
|
||||
- * rr->p != i is for dup jobs where the installed package cannot be kept */
|
||||
+ * the installed package and not replace it with a newer version */
|
||||
if (dq->count)
|
||||
queue_empty(dq);
|
||||
- if (!MAPTST(&solv->noupdate, i - installed->start) && (solv->decisionmap[i] < 0 || solv->updatemap_all || (solv->updatemap.size && MAPTST(&solv->updatemap, i - installed->start)) || (rr->p && rr->p != i)))
|
||||
+ if (!MAPTST(&solv->noupdate, i - installed->start) && (solv->decisionmap[i] < 0 || solv->updatemap_all || (solv->updatemap.size && MAPTST(&solv->updatemap, i - installed->start))))
|
||||
{
|
||||
if (specialupdaters && (d = specialupdaters[i - installed->start]) != 0)
|
||||
{
|
||||
43
libsolv.spec
43
libsolv.spec
@ -14,22 +14,13 @@
|
||||
%bcond_without conda
|
||||
|
||||
Name: libsolv
|
||||
Version: 0.7.22
|
||||
Release: 3
|
||||
Version: 0.7.20
|
||||
Release: 1
|
||||
Summary: Package dependency solver
|
||||
License: BSD
|
||||
URL: https://github.com/openSUSE/libsolv
|
||||
Source: https://github.com/openSUSE/libsolv/archive/refs/tags/%{version}.tar.gz
|
||||
|
||||
Patch0: Fix-memory-leak-when-using-testsolv-to-execute-cases.patch
|
||||
Patch6001: backport-Treat-condition-both-as-positive-and-negative-literal-in-pool_add_pos_literals_complex_dep.patch
|
||||
Patch6002: backport-Add-testcase-for-last-commit.patch
|
||||
Patch6003: backport-choice-rules-also-do-solver_choicerulecheck-for-package-downgrades.patch
|
||||
Patch6004: backport-resolve_installed-remove-dead-code.patch
|
||||
Patch6005: backport-Move-special-updaters-handling-into-its-own-function.patch
|
||||
Patch6006: backport-Handle-installed-packages-in-three-passes.patch
|
||||
Patch6007: backport-Fix-a-couple-small-static-analysis-findings-for-uninitialized-structs.patch
|
||||
|
||||
BuildRequires: cmake gcc-c++ ninja-build pkgconfig(rpm) zlib-devel
|
||||
BuildRequires: libxml2-devel xz-devel bzip2-devel
|
||||
%if %{with zstd}
|
||||
@ -61,7 +52,7 @@ Development files for %{name}.
|
||||
%package tools
|
||||
Summary: Package dependency solver tools
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
Requires: /usr/bin/find
|
||||
Requires: %{_bindir}/find
|
||||
|
||||
%description tools
|
||||
Package dependency solver tools.
|
||||
@ -222,34 +213,6 @@ Python 3 version.
|
||||
%{_mandir}/man3/%{name}*.3*
|
||||
|
||||
%changelog
|
||||
* Tue Jul 16 2024 LuWu<2398491106@qq.com> - 0.7.22-3
|
||||
- Handle installed packages in three passes
|
||||
|
||||
* Sat Aug 19 2023 hanhuihui<hanhuihui5@huawei.com> - 0.7.22-2
|
||||
- Type:bugfix
|
||||
- ID:NA
|
||||
- SUG:NA
|
||||
- DESC:fix requirement error
|
||||
|
||||
* Tue Nov 8 2022 hanhuihui<hanhuihui5@huawei.com> - 0.7.22-1
|
||||
- Type:bugfix
|
||||
- ID:NA
|
||||
- SUG:NA
|
||||
- DESC:update libsolv to 0.7.22-1
|
||||
|
||||
* Fri Oct 21 2022 hanhuihui<hanhuihui5@huawei.com> - 0.7.20-3
|
||||
- Type:bugfix
|
||||
- ID:NA
|
||||
- SUG:NA
|
||||
- DESC:ensure-duplinvolvedmap_all-is-reset.patch
|
||||
|
||||
* Tue Oct 11 2022 zhangjun<zhangjun@kylinos.cn> - 0.7.20-2
|
||||
- Type:bugfix
|
||||
- ID:NA
|
||||
- SUG:NA
|
||||
- DESC:Fix memory leak when using testsolv to execute cases
|
||||
Fix segfault on conflict resolution when using bindings
|
||||
|
||||
* Sat Dec 25 2021 wangkerong<wangkerong@huawei.com> - 0.7.20-1
|
||||
- update to 0.7.20
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user