diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libalpm/sync.c | 18 | ||||
-rw-r--r-- | lib/libalpm/sync.h | 3 | ||||
-rw-r--r-- | lib/libalpm/trans.c | 6 |
3 files changed, 21 insertions, 6 deletions
diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c index e843b07a..c5607bc8 100644 --- a/lib/libalpm/sync.c +++ b/lib/libalpm/sync.c @@ -1338,7 +1338,7 @@ int _alpm_sync_load(alpm_handle_t *handle, alpm_list_t **data) return 0; } -int _alpm_sync_commit(alpm_handle_t *handle, alpm_list_t **data) +int _alpm_sync_check(alpm_handle_t *handle, alpm_list_t **data) { alpm_trans_t *trans = handle->trans; alpm_event_t event; @@ -1355,7 +1355,8 @@ int _alpm_sync_commit(alpm_handle_t *handle, alpm_list_t **data) if(data) { *data = conflict; } else { - alpm_list_free_inner(conflict, (alpm_list_fn_free)alpm_fileconflict_free); + alpm_list_free_inner(conflict, + (alpm_list_fn_free)alpm_fileconflict_free); alpm_list_free(conflict); } RET_ERR(handle, ALPM_ERR_FILE_CONFLICTS, -1); @@ -1380,12 +1381,21 @@ int _alpm_sync_commit(alpm_handle_t *handle, alpm_list_t **data) EVENT(handle, &event); } + return 0; +} + +int _alpm_sync_commit(alpm_handle_t *handle) +{ + alpm_trans_t *trans = handle->trans; + /* remove conflicting and to-be-replaced packages */ if(trans->remove) { - _alpm_log(handle, ALPM_LOG_DEBUG, "removing conflicting and to-be-replaced packages\n"); + _alpm_log(handle, ALPM_LOG_DEBUG, + "removing conflicting and to-be-replaced packages\n"); /* we want the frontend to be aware of commit details */ if(_alpm_remove_packages(handle, 0) == -1) { - _alpm_log(handle, ALPM_LOG_ERROR, _("could not commit removal transaction\n")); + _alpm_log(handle, ALPM_LOG_ERROR, + _("could not commit removal transaction\n")); return -1; } } diff --git a/lib/libalpm/sync.h b/lib/libalpm/sync.h index 6281550f..60ebb750 100644 --- a/lib/libalpm/sync.h +++ b/lib/libalpm/sync.h @@ -26,7 +26,8 @@ int _alpm_sync_prepare(alpm_handle_t *handle, alpm_list_t **data); int _alpm_sync_load(alpm_handle_t *handle, alpm_list_t **data); -int _alpm_sync_commit(alpm_handle_t *handle, alpm_list_t **data); +int _alpm_sync_check(alpm_handle_t *handle, alpm_list_t **data); +int _alpm_sync_commit(alpm_handle_t *handle); #endif /* _ALPM_SYNC_H */ diff --git a/lib/libalpm/trans.c b/lib/libalpm/trans.c index 6a26e753..ed073c09 100644 --- a/lib/libalpm/trans.c +++ b/lib/libalpm/trans.c @@ -183,6 +183,10 @@ int SYMEXPORT alpm_trans_commit(alpm_handle_t *handle, alpm_list_t **data) if(trans->flags & ALPM_TRANS_FLAG_DOWNLOADONLY) { return 0; } + if(_alpm_sync_check(handle, data) != 0) { + /* pm_errno is set by _alpm_sync_check() */ + return -1; + } } trans->state = STATE_COMMITING; @@ -198,7 +202,7 @@ int SYMEXPORT alpm_trans_commit(alpm_handle_t *handle, alpm_list_t **data) return -1; } } else { - if(_alpm_sync_commit(handle, data) == -1) { + if(_alpm_sync_commit(handle) == -1) { /* pm_errno is set by _alpm_sync_commit() */ alpm_errno_t save = handle->pm_errno; alpm_logaction(handle, ALPM_CALLER_PREFIX, "transaction failed\n"); |