diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/pacman/pacman.h | 1 | ||||
| -rw-r--r-- | src/pacman/sync.c | 19 | ||||
| -rw-r--r-- | src/pacman/upgrade.c | 114 | 
3 files changed, 16 insertions, 118 deletions
diff --git a/src/pacman/pacman.h b/src/pacman/pacman.h index 762e112d..8bb9cb27 100644 --- a/src/pacman/pacman.h +++ b/src/pacman/pacman.h @@ -32,6 +32,7 @@ int pacman_query(alpm_list_t *targets);  int pacman_remove(alpm_list_t *targets);  /* sync.c */  int pacman_sync(alpm_list_t *targets); +int sync_prepare_execute(void);  /* upgrade.c */  int pacman_upgrade(alpm_list_t *targets); diff --git a/src/pacman/sync.c b/src/pacman/sync.c index 5e1643e4..42a99020 100644 --- a/src/pacman/sync.c +++ b/src/pacman/sync.c @@ -712,9 +712,6 @@ cleanup:  static int sync_trans(alpm_list_t *targets)  { -	int retval = 0; -	alpm_list_t *data = NULL; -	alpm_list_t *packages = NULL;  	alpm_list_t *i;  	/* Step 1: create a new transaction... */ @@ -726,8 +723,8 @@ static int sync_trans(alpm_list_t *targets)  	for(i = targets; i; i = alpm_list_next(i)) {  		char *targ = alpm_list_getdata(i);  		if(process_target(targ) == 1) { -			retval = 1; -			goto cleanup; +			trans_release(); +			return 1;  		}  	} @@ -736,11 +733,19 @@ static int sync_trans(alpm_list_t *targets)  		alpm_logaction(config->handle, "starting full system upgrade\n");  		if(alpm_sync_sysupgrade(config->handle, config->op_s_upgrade >= 2) == -1) {  			pm_fprintf(stderr, ALPM_LOG_ERROR, "%s\n", alpm_strerror(alpm_errno(config->handle))); -			retval = 1; -			goto cleanup; +			trans_release(); +			return 1;  		}  	} +	return sync_prepare_execute(); +} + +int sync_prepare_execute(void) +{ +	alpm_list_t *i, *packages, *data = NULL; +	int retval = 0; +  	/* Step 2: "compute" the transaction based on targets and flags */  	if(alpm_trans_prepare(config->handle, &data) == -1) {  		enum _alpm_errno_t err = alpm_errno(config->handle); 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: */  | 
