summaryrefslogtreecommitdiffstats
path: root/src/pacman/upgrade.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pacman/upgrade.c')
-rw-r--r--src/pacman/upgrade.c114
1 files changed, 3 insertions, 111 deletions
diff --git a/src/pacman/upgrade.c b/src/pacman/upgrade.c
index a99b1370..e4b2e2bf 100644
--- a/src/pacman/upgrade.c
+++ b/src/pacman/upgrade.c
@@ -41,9 +41,8 @@
*/
int pacman_upgrade(alpm_list_t *targets)
{
- alpm_list_t *i, *data = NULL;
+ alpm_list_t *i;
alpm_siglevel_t level = alpm_option_get_default_siglevel(config->handle);
- int retval = 0;
if(targets == NULL) {
pm_printf(ALPM_LOG_ERROR, _("no targets specified (use -h for help)\n"));
@@ -91,115 +90,8 @@ int pacman_upgrade(alpm_list_t *targets)
}
}
- /* Step 2: "compute" the transaction based on targets and flags */
- /* TODO: No, compute nothing. This is stupid. */
- if(alpm_trans_prepare(config->handle, &data) == -1) {
- enum _alpm_errno_t err = alpm_errno(config->handle);
- pm_fprintf(stderr, ALPM_LOG_ERROR, _("failed to prepare transaction (%s)\n"),
- alpm_strerror(err));
- switch(err) {
- case ALPM_ERR_PKG_INVALID_ARCH:
- for(i = data; i; i = alpm_list_next(i)) {
- char *pkg = alpm_list_getdata(i);
- printf(_(":: package %s does not have a valid architecture\n"), pkg);
- }
- break;
- case ALPM_ERR_UNSATISFIED_DEPS:
- for(i = data; i; i = alpm_list_next(i)) {
- alpm_depmissing_t *miss = alpm_list_getdata(i);
- char *depstring = alpm_dep_compute_string(miss->depend);
-
- /* TODO indicate if the error was a virtual package or not:
- * :: %s: requires %s, provided by %s
- */
- printf(_(":: %s: requires %s\n"), miss->target, depstring);
- free(depstring);
- }
- break;
- case ALPM_ERR_CONFLICTING_DEPS:
- for(i = data; i; i = alpm_list_next(i)) {
- alpm_conflict_t *conflict = alpm_list_getdata(i);
- if(strcmp(conflict->package1, conflict->reason) == 0 ||
- strcmp(conflict->package2, conflict->reason) == 0) {
- printf(_(":: %s and %s are in conflict\n"),
- conflict->package1, conflict->package2);
- } else {
- printf(_(":: %s and %s are in conflict (%s)\n"),
- conflict->package1, conflict->package2, conflict->reason);
- }
- }
- break;
- default:
- break;
- }
- trans_release();
- FREELIST(data);
- return 1;
- }
-
- /* Step 3: perform the installation */
- alpm_list_t *packages = alpm_trans_get_add(config->handle);
-
- if(config->print) {
- print_packages(packages);
- trans_release();
- return 0;
- }
-
- /* print targets and ask user confirmation */
- if(packages == NULL) { /* we are done */
- printf(_(" there is nothing to do\n"));
- trans_release();
- return retval;
- }
- display_targets(alpm_trans_get_remove(config->handle), 0);
- display_targets(alpm_trans_get_add(config->handle), 1);
- printf("\n");
- int confirm = yesno(_("Proceed with installation?"));
- if(!confirm) {
- trans_release();
- return retval;
- }
-
- if(alpm_trans_commit(config->handle, &data) == -1) {
- enum _alpm_errno_t err = alpm_errno(config->handle);
- pm_fprintf(stderr, ALPM_LOG_ERROR, _("failed to commit transaction (%s)\n"),
- alpm_strerror(err));
- switch(err) {
- case ALPM_ERR_FILE_CONFLICTS:
- for(i = data; i; i = alpm_list_next(i)) {
- alpm_fileconflict_t *conflict = alpm_list_getdata(i);
- switch(conflict->type) {
- case ALPM_FILECONFLICT_TARGET:
- printf(_("%s exists in both '%s' and '%s'\n"),
- conflict->file, conflict->target, conflict->ctarget);
- break;
- case ALPM_FILECONFLICT_FILESYSTEM:
- printf(_("%s: %s exists in filesystem\n"),
- conflict->target, conflict->file);
- break;
- }
- }
- break;
- case ALPM_ERR_PKG_INVALID:
- case ALPM_ERR_DLT_INVALID:
- for(i = data; i; i = alpm_list_next(i)) {
- char *filename = alpm_list_getdata(i);
- printf(_("%s is invalid or corrupted\n"), filename);
- }
- break;
- default:
- break;
- }
- FREELIST(data);
- trans_release();
- return 1;
- }
-
- if(trans_release() == -1) {
- retval = 1;
- }
- return retval;
+ /* now that targets are resolved, we can hand it all off to the sync code */
+ return sync_prepare_execute();
}
/* vim: set ts=2 sw=2 noet: */