mirror of
https://github.com/moparisthebest/pacman
synced 2024-12-23 08:18:51 -05:00
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>
This commit is contained in:
parent
14e4366c78
commit
85a8b150ed
@ -440,25 +440,15 @@ alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, pmtrans_t *trans, char *roo
|
|||||||
|
|
||||||
if(localp2 && !alpm_list_find_str(pkgfiles, filestr)
|
if(localp2 && !alpm_list_find_str(pkgfiles, filestr)
|
||||||
&& alpm_list_find_str(localfiles, 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
|
/* skip removal of file, but not add. this will prevent a second
|
||||||
* package from removing the file when it was already installed
|
* package from removing the file when it was already installed
|
||||||
* by its new owner */
|
* by its new owner (whether the file is in backup array or not */
|
||||||
trans->skip_remove = alpm_list_add(trans->skip_remove, strdup(path));
|
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);
|
_alpm_log(PM_LOG_DEBUG, "file changed packages, adding to remove skiplist: %s\n", filestr);
|
||||||
resolved_conflict = 1;
|
resolved_conflict = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if(!resolved_conflict) {
|
if(!resolved_conflict) {
|
||||||
_alpm_log(PM_LOG_DEBUG, "file found in conflict: %s\n", path);
|
_alpm_log(PM_LOG_DEBUG, "file found in conflict: %s\n", path);
|
||||||
conflicts = add_fileconflict(conflicts, PM_FILECONFLICT_FILESYSTEM,
|
conflicts = add_fileconflict(conflicts, PM_FILECONFLICT_FILESYSTEM,
|
||||||
|
28
pactest/tests/upgrade043.py
Normal file
28
pactest/tests/upgrade043.py
Normal file
@ -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")
|
Loading…
Reference in New Issue
Block a user