summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChantry Xavier <shiningxc@gmail.com>2008-01-05 10:24:45 +0100
committerDan McGee <dan@archlinux.org>2008-01-05 16:49:09 -0600
commit85a8b150edb7d1fca67f7f0abee3400bd57e7d5a (patch)
tree196ee95be6fc28c85a7ab2f76aa086b019bbc2f3
parent14e4366c781250092a5131b8fbbeda3aab67bd9d (diff)
downloadpacman-85a8b150edb7d1fca67f7f0abee3400bd57e7d5a.tar.xz
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 <shiningxc@gmail.com> Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r--lib/libalpm/conflict.c24
-rw-r--r--pactest/tests/upgrade043.py28
2 files changed, 35 insertions, 17 deletions
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")