index : pacman | |
Archlinux32 fork of pacman | gitolite user |
summaryrefslogtreecommitdiff |
author | Allan McRae <allan@archlinux.org> | 2018-07-19 13:54:54 +1000 |
---|---|---|
committer | Allan McRae <allan@archlinux.org> | 2018-07-27 10:24:57 +1000 |
commit | 0827aff85ee3ac9a02031cbeeb49cae2ae088529 (patch) | |
tree | 78fb8df628d8d488da984a732f87ee5e766e4b3f | |
parent | 316b031b7c1c8b9a6f4194b1378c58106b2a34dd (diff) |
-rw-r--r-- | lib/libalpm/conflict.c | 9 |
diff --git a/lib/libalpm/conflict.c b/lib/libalpm/conflict.c index 35946de5..716d0088 100644 --- a/lib/libalpm/conflict.c +++ b/lib/libalpm/conflict.c @@ -399,10 +399,11 @@ static alpm_pkg_t *_alpm_find_file_owner(alpm_handle_t *handle, const char *path return NULL; } -static int _alpm_can_overwrite_file(alpm_handle_t *handle, const char *path) +static int _alpm_can_overwrite_file(alpm_handle_t *handle, const char *path, const char *rootedpath) { return handle->trans->flags & ALPM_TRANS_FLAG_FORCE - || _alpm_fnmatch_patterns(handle->overwrite_files, path) == 0; + || _alpm_fnmatch_patterns(handle->overwrite_files, path) == 0 + || _alpm_fnmatch_patterns(handle->overwrite_files, rootedpath) == 0; } /** @@ -468,7 +469,7 @@ alpm_list_t *_alpm_db_find_fileconflicts(alpm_handle_t *handle, /* can skip file-file conflicts when forced * * checking presence in p2_files detects dir-file or file-dir * conflicts as the path from p1 is returned */ - if(_alpm_can_overwrite_file(handle, filename) + if(_alpm_can_overwrite_file(handle, filename, path) && alpm_filelist_contains(p2_files, filename)) { _alpm_log(handle, ALPM_LOG_DEBUG, "%s exists in both '%s' and '%s'\n", filename, @@ -675,7 +676,7 @@ alpm_list_t *_alpm_db_find_fileconflicts(alpm_handle_t *handle, /* skip file-file conflicts when being forced */ if(!S_ISDIR(lsbuf.st_mode) - && _alpm_can_overwrite_file(handle, filestr)) { + && _alpm_can_overwrite_file(handle, filestr, path)) { _alpm_log(handle, ALPM_LOG_DEBUG, "conflict with file on filesystem being forced\n"); resolved_conflict = 1; |