diff options
Diffstat (limited to 'lib/libalpm')
| -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");  | 
