From 85a8b150edb7d1fca67f7f0abee3400bd57e7d5a Mon Sep 17 00:00:00 2001 From: Chantry Xavier Date: Sat, 5 Jan 2008 10:24:45 +0100 Subject: conflict.c : fix for upgrade042. Thanks to the proactive backup handling, we don't need to add the moving file to the skip_add list. The backup handling will make sure nothing gets overwritten. Ref: http://www.archlinux.org/pipermail/pacman-dev/2007-December/010610.html Signed-off-by: Chantry Xavier Signed-off-by: Dan McGee --- lib/libalpm/conflict.c | 24 +++++++----------------- pactest/tests/upgrade043.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 17 deletions(-) create mode 100644 pactest/tests/upgrade043.py diff --git a/lib/libalpm/conflict.c b/lib/libalpm/conflict.c index 38ab9724..adad324f 100644 --- a/lib/libalpm/conflict.c +++ b/lib/libalpm/conflict.c @@ -440,23 +440,13 @@ alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, pmtrans_t *trans, char *roo if(localp2 && !alpm_list_find_str(pkgfiles, filestr) && alpm_list_find_str(localfiles, filestr)) { - /* check if the file is now in the backup array */ - if(alpm_list_find_str(alpm_pkg_get_backup(p1), filestr)) { - /* keep file intact if it is in backup array */ - trans->skip_add = alpm_list_add(trans->skip_add, strdup(path)); - trans->skip_remove = alpm_list_add(trans->skip_remove, strdup(path)); - _alpm_log(PM_LOG_DEBUG, "file in backup array, adding to add and remove skiplist: %s\n", filestr); - resolved_conflict = 1; - break; - } else { - /* skip removal of file, but not add. this will prevent a second - * package from removing the file when it was already installed - * by its new owner */ - trans->skip_remove = alpm_list_add(trans->skip_remove, strdup(path)); - _alpm_log(PM_LOG_DEBUG, "file changed packages, adding to remove skiplist: %s\n", filestr); - resolved_conflict = 1; - break; - } + /* skip removal of file, but not add. this will prevent a second + * package from removing the file when it was already installed + * by its new owner (whether the file is in backup array or not */ + trans->skip_remove = alpm_list_add(trans->skip_remove, strdup(path)); + _alpm_log(PM_LOG_DEBUG, "file changed packages, adding to remove skiplist: %s\n", filestr); + resolved_conflict = 1; + break; } } if(!resolved_conflict) { diff --git a/pactest/tests/upgrade043.py b/pactest/tests/upgrade043.py new file mode 100644 index 00000000..e76dc463 --- /dev/null +++ b/pactest/tests/upgrade043.py @@ -0,0 +1,28 @@ +self.description = "Backup file relocation (reverse order)" + +lp1 = pmpkg("bash") +lp1.files = ["etc/profile*"] +lp1.backup = ["etc/profile"] +self.addpkg2db("local", lp1) + +p1 = pmpkg("bash", "1.0-2") +p1.depends = [ "filesystem" ] +self.addpkg(p1) + +lp2 = pmpkg("filesystem") +self.addpkg2db("local", lp2) + +p2 = pmpkg("filesystem", "1.0-2") +p2.files = ["etc/profile**"] +p2.backup = ["etc/profile"] +self.addpkg(p2) + +self.args = "-U %s" % " ".join([p.filename() for p in p1, p2]) + +self.filesystem = ["etc/profile"] + +self.addrule("PKG_VERSION=bash|1.0-2") +self.addrule("PKG_VERSION=filesystem|1.0-2") +self.addrule("!FILE_PACSAVE=etc/profile") +self.addrule("FILE_PACNEW=etc/profile") +self.addrule("FILE_EXIST=etc/profile") -- cgit v1.2.3-70-g09d2