[pacman-dev] [PATCH] libalpm: Fix installing update of a replaced package
Olivier Brunel
i.am.jack.mail at gmail.com
Thu Feb 28 13:06:47 EST 2013
During a sysupgrade, if a package is replaced by another, and an update for the
former package is found (on another repo) the replaced package would be
re-installed.
Signed-off-by: Olivier Brunel <i.am.jack.mail at gmail.com>
---
I'm not really familiar with inner workings of ALPM, so this is probably not the
best way to do this.
lib/libalpm/sync.c | 13 ++++++++++++-
test/pacman/tests/sync1104.py | 18 ++++++++++++++++++
2 files changed, 30 insertions(+), 1 deletion(-)
create mode 100644 test/pacman/tests/sync1104.py
diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c
index 204456d..31f5870 100644
--- a/lib/libalpm/sync.c
+++ b/lib/libalpm/sync.c
@@ -351,6 +351,16 @@ finish:
return ret;
}
+static int _cmp_pkg (alpm_pkg_t *pkg1, alpm_pkg_t *pkg2)
+{
+ if (!pkg1)
+ return 1;
+ else if (!pkg2)
+ return -1;
+ else
+ return strcmp (pkg1->name, pkg2->name);
+}
+
int _alpm_sync_prepare(alpm_handle_t *handle, alpm_list_t **data)
{
alpm_list_t *i, *j;
@@ -408,7 +418,8 @@ int _alpm_sync_prepare(alpm_handle_t *handle, alpm_list_t **data)
building up a list of packages which could not be resolved. */
for(i = trans->add; i; i = i->next) {
alpm_pkg_t *pkg = i->data;
- if(_alpm_resolvedeps(handle, localpkgs, pkg, trans->add,
+ if(!alpm_list_find(remove, pkg, (alpm_list_fn_cmp) _cmp_pkg)
+ && _alpm_resolvedeps(handle, localpkgs, pkg, trans->add,
&resolved, remove, data) == -1) {
unresolvable = alpm_list_add(unresolvable, pkg);
}
diff --git a/test/pacman/tests/sync1104.py b/test/pacman/tests/sync1104.py
new file mode 100644
index 0000000..5cec98a
--- /dev/null
+++ b/test/pacman/tests/sync1104.py
@@ -0,0 +1,18 @@
+self.description = "Don't update (reinstall) a replaced package"
+
+lp = pmpkg("old", "1-1")
+self.addpkg2db("local", lp)
+
+p1 = pmpkg("new")
+p1.provides = ["old"]
+p1.replaces = ["old"]
+self.addpkg2db("sync1", p1)
+
+p2 = pmpkg("old", "1-2")
+self.addpkg2db("sync2", p2)
+
+self.args = "-Su"
+
+self.addrule("PACMAN_RETCODE=0")
+self.addrule("!PKG_EXIST=old")
+self.addrule("PKG_EXIST=new")
--
1.8.1.4
More information about the pacman-dev
mailing list