Handle root prefix in overwrite operations
The pacman --overwrite operation currently expects a path without the root prefix specified. This is unexpected, particularly given our conflict error message reports the path with the root prefix included. This patch allows libalpm to overwrite files with the root prefix specified. Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
parent
316b031b7c
commit
0827aff85e
1 changed files with 5 additions and 4 deletions
|
@ -399,10 +399,11 @@ static alpm_pkg_t *_alpm_find_file_owner(alpm_handle_t *handle, const char *path
|
||||||
return NULL;
|
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
|
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 *
|
/* can skip file-file conflicts when forced *
|
||||||
* checking presence in p2_files detects dir-file or file-dir
|
* checking presence in p2_files detects dir-file or file-dir
|
||||||
* conflicts as the path from p1 is returned */
|
* 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_filelist_contains(p2_files, filename)) {
|
||||||
_alpm_log(handle, ALPM_LOG_DEBUG,
|
_alpm_log(handle, ALPM_LOG_DEBUG,
|
||||||
"%s exists in both '%s' and '%s'\n", filename,
|
"%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 */
|
/* skip file-file conflicts when being forced */
|
||||||
if(!S_ISDIR(lsbuf.st_mode)
|
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,
|
_alpm_log(handle, ALPM_LOG_DEBUG,
|
||||||
"conflict with file on filesystem being forced\n");
|
"conflict with file on filesystem being forced\n");
|
||||||
resolved_conflict = 1;
|
resolved_conflict = 1;
|
||||||
|
|
Loading…
Add table
Reference in a new issue