diff options
Diffstat (limited to 'src/pacman')
| -rw-r--r-- | src/pacman/pacman.c | 44 | ||||
| -rw-r--r-- | src/pacman/remove.c | 6 | ||||
| -rw-r--r-- | src/pacman/sync.c | 6 | ||||
| -rw-r--r-- | src/pacman/upgrade.c | 6 | 
4 files changed, 57 insertions, 5 deletions
| diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c index 77c558d1..6e5147c5 100644 --- a/src/pacman/pacman.c +++ b/src/pacman/pacman.c @@ -149,6 +149,7 @@ static void usage(int op, const char * const myname)  		printf(_("  -r, --root <path>    set an alternate installation root\n"));  		printf(_("  -b, --dbpath <path>  set an alternate database location\n"));  		printf(_("      --cachedir <dir> set an alternate package cache location\n")); +		printf(_("      --arch <arch>    set an alternate architecture\n"));  	}  } @@ -195,6 +196,19 @@ static void setuseragent(void)  	setenv("HTTP_USER_AGENT", agent, 0);  } +static void setarch(const char *arch) +{ +	if (strcmp(arch, "auto") == 0) { +		struct utsname un; +		uname(&un); +		pm_printf(PM_LOG_DEBUG, "config: architecture: %s\n", un.machine); +		alpm_option_set_arch(un.machine); +	} else { +		pm_printf(PM_LOG_DEBUG, "config: architecture: %s\n", arch); +		alpm_option_set_arch(arch); +	} +} +  /** Free the resources.   *   * @param ret the return value @@ -376,6 +390,7 @@ static int parseargs(int argc, char *argv[])  		{"ignoregroup", required_argument, 0, 1010},  		{"needed",     no_argument,       0, 1011},  		{"asexplicit",     no_argument,   0, 1012}, +		{"arch",       required_argument, 0, 1013},  		{0, 0, 0, 0}  	}; @@ -450,6 +465,9 @@ static int parseargs(int argc, char *argv[])  			case 1012:  				config->flags |= PM_TRANS_FLAG_ALLEXPLICIT;  				break; +			case 1013: +				setarch(optarg); +				break;  			case 'Q': config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_QUERY); break;  			case 'R': config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_REMOVE); break;  			case 'S': config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_SYNC); break; @@ -787,10 +805,7 @@ static int _parseconfig(const char *file, const char *givensection,  			}  			if(ptr == NULL && strcmp(section, "options") == 0) {  				/* directives without settings, all in [options] */ -				if(strcmp(key, "NoPassiveFtp") == 0) { -					alpm_option_set_nopassiveftp(1); -					pm_printf(PM_LOG_DEBUG, "config: nopassiveftp\n"); -				} else if(strcmp(key, "UseSyslog") == 0) { +				if(strcmp(key, "UseSyslog") == 0) {  					alpm_option_set_usesyslog(1);  					pm_printf(PM_LOG_DEBUG, "config: usesyslog\n");  				} else if(strcmp(key, "ILoveCandy") == 0) { @@ -830,6 +845,10 @@ static int _parseconfig(const char *file, const char *givensection,  						setrepeatingoption(ptr, "HoldPkg", option_add_holdpkg);  					} else if(strcmp(key, "SyncFirst") == 0) {  						setrepeatingoption(ptr, "SyncFirst", option_add_syncfirst); +					} else if(strcmp(key, "Architecture") == 0) { +						if(!alpm_option_get_arch()) { +							setarch(ptr); +						}  					} else if(strcmp(key, "DBPath") == 0) {  						/* don't overwrite a path specified on the command line */  						if(!config->dbpath) { @@ -878,7 +897,22 @@ static int _parseconfig(const char *file, const char *givensection,  					}  				} else if(strcmp(key, "Server") == 0) {  					/* let's attempt a replacement for the current repo */ -					char *server = strreplace(ptr, "$repo", section); +					char *temp = strreplace(ptr, "$repo", section); +					/* let's attempt a replacement for the arch */ +					const char *arch = alpm_option_get_arch(); +					char *server; +					if(arch) { +						server = strreplace(temp, "$arch", arch); +						free(temp); +					} else { +						if(strstr(temp, "$arch")) { +							pm_printf(PM_LOG_ERROR, _("The mirror '%s' contains the $arch" +										" variable, but no Architecture is defined.\n"), ptr); +							ret = 1; +							goto cleanup; +						} +						server = temp; +					}  					if(alpm_db_setserver(db, server) != 0) {  						/* pm_errno is set by alpm_db_setserver */ diff --git a/src/pacman/remove.c b/src/pacman/remove.c index 0efbd94e..b5119fa5 100644 --- a/src/pacman/remove.c +++ b/src/pacman/remove.c @@ -103,6 +103,12 @@ int pacman_remove(alpm_list_t *targets)  		pm_fprintf(stderr, PM_LOG_ERROR, _("failed to prepare transaction (%s)\n"),  		        alpm_strerrorlast());  		switch(pm_errno) { +			case PM_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 PM_ERR_UNSATISFIED_DEPS:  				for(i = data; i; i = alpm_list_next(i)) {  					pmdepmissing_t *miss = alpm_list_getdata(i); diff --git a/src/pacman/sync.c b/src/pacman/sync.c index dc936219..4f101f99 100644 --- a/src/pacman/sync.c +++ b/src/pacman/sync.c @@ -639,6 +639,12 @@ static int sync_trans(alpm_list_t *targets)  		        alpm_strerrorlast());  		switch(pm_errno) {  			alpm_list_t *i; +			case PM_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 PM_ERR_UNSATISFIED_DEPS:  				for(i = data; i; i = alpm_list_next(i)) {  					pmdepmissing_t *miss = alpm_list_getdata(i); diff --git a/src/pacman/upgrade.c b/src/pacman/upgrade.c index 1570f95e..e7691185 100644 --- a/src/pacman/upgrade.c +++ b/src/pacman/upgrade.c @@ -87,6 +87,12 @@ int pacman_upgrade(alpm_list_t *targets)  		pm_fprintf(stderr, PM_LOG_ERROR, _("failed to prepare transaction (%s)\n"),  		        alpm_strerrorlast());  		switch(pm_errno) { +			case PM_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 PM_ERR_UNSATISFIED_DEPS:  				for(i = data; i; i = alpm_list_next(i)) {  					pmdepmissing_t *miss = alpm_list_getdata(i); | 
