diff options
| -rw-r--r-- | lib/libalpm/conflict.c | 17 | ||||
| -rw-r--r-- | pactest/tests/fileconflict003.py | 18 | 
2 files changed, 30 insertions, 5 deletions
diff --git a/lib/libalpm/conflict.c b/lib/libalpm/conflict.c index adad324f..c093705a 100644 --- a/lib/libalpm/conflict.c +++ b/lib/libalpm/conflict.c @@ -386,6 +386,7 @@ alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, pmtrans_t *trans, char *roo  		/* loop over each file to be installed */  		for(j = tmpfiles; j; j = j->next) { +			int skip_conflict = 0;  			filestr = j->data;  			snprintf(path, PATH_MAX, "%s%s", root, filestr); @@ -396,11 +397,17 @@ alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, pmtrans_t *trans, char *roo  			}  			stat(path, &sbuf); -			if(S_ISDIR(lsbuf.st_mode)) { -				_alpm_log(PM_LOG_DEBUG, "%s is a directory, not a conflict\n", path); -			} else if(S_ISLNK(lsbuf.st_mode) && S_ISDIR(sbuf.st_mode)) { -				_alpm_log(PM_LOG_DEBUG, "%s is a symlink to a dir, hopefully not a conflict\n", path); -			} else { +			if(path[strlen(path)-1] == '/') { +				if(S_ISDIR(lsbuf.st_mode)) { +					_alpm_log(PM_LOG_DEBUG, "%s is a directory, not a conflict\n", path); +					skip_conflict = 1; +				} else if(S_ISLNK(lsbuf.st_mode) && S_ISDIR(sbuf.st_mode)) { +					_alpm_log(PM_LOG_DEBUG, +							"%s is a symlink to a dir, hopefully not a conflict\n", path); +					skip_conflict = 1; +				} +			} +			if(!skip_conflict) {  				_alpm_log(PM_LOG_DEBUG, "checking possible conflict: %s\n", path);  				/* Make sure the possible conflict is not a symlink that points to a diff --git a/pactest/tests/fileconflict003.py b/pactest/tests/fileconflict003.py new file mode 100644 index 00000000..89696fcb --- /dev/null +++ b/pactest/tests/fileconflict003.py @@ -0,0 +1,18 @@ +self.description = "FS#8156" + +p1 = pmpkg("pkg1") +p1.files = ["test/", +            "test/file"] +self.addpkg2db("local", p1) + +p2 = pmpkg("pkg2") +p2.files = ["test2/", +            "test2/file2", +            "test -> test2"] +self.addpkg2db("sync", p2) + +self.args = "-S pkg2" + +self.addrule("PACMAN_RETCODE=1") +self.addrule("PKG_EXIST=pkg1") +self.addrule("!PKG_EXIST=pkg2")  | 
