diff --git a/doc/pacsync.pod b/doc/pacsync.pod index 7ef905e..86a18ba 100644 --- a/doc/pacsync.pod +++ b/doc/pacsync.pod @@ -44,6 +44,10 @@ Set an alternate installation root. Set an alternate system root. See L. +=item B<--arch>=F + +set an alternate architecture. + =item B<--debug> Display additional debugging information. diff --git a/doc/pactrans.pod b/doc/pactrans.pod index 0b55ecb..29d720c 100644 --- a/doc/pactrans.pod +++ b/doc/pactrans.pod @@ -74,6 +74,10 @@ Set an alternate sync database extension. Set an alternate database path. +=item B<--arch>=F + +set an alternate architecture. + =item B<--logfile>=F Set an alternate log file path. diff --git a/lib/pacutils/config.c b/lib/pacutils/config.c index f533194..481abbd 100644 --- a/lib/pacutils/config.c +++ b/lib/pacutils/config.c @@ -321,7 +321,7 @@ void pu_config_free(pu_config_t *config) { free(config); } -static int _pu_subst_server_vars(pu_config_t *config) { +int pu_config_subst_server_vars(pu_config_t *config) { alpm_list_t *r; for (r = config->repos; r; r = r->next) { pu_repo_t *repo = r->data; @@ -550,8 +550,6 @@ int pu_config_resolve(pu_config_t *config) { #undef SETBOOL #undef SETDEFAULT - if (_pu_subst_server_vars(config) != 0) { return -1; } - return 0; } @@ -977,3 +975,8 @@ void pu_config_reader_free(pu_config_reader_t *reader) { pu_config_reader_free(reader->_parent); free(reader); } + +pu_config_t *pu_config_add_architecture(pu_config_t *dest, char *arch) { + dest->architectures = alpm_list_add(dest->architectures, strdup(arch)); + return dest; +} diff --git a/lib/pacutils/config.h b/lib/pacutils/config.h index f2f393b..0225898 100644 --- a/lib/pacutils/config.h +++ b/lib/pacutils/config.h @@ -161,6 +161,8 @@ int pu_config_resolve(pu_config_t *config); int pu_config_resolve_sysroot(pu_config_t *config, const char *sysroot); void pu_config_free(pu_config_t *config); +int pu_config_subst_server_vars(pu_config_t *config); + alpm_handle_t *pu_initialize_handle_from_config(pu_config_t *config); pu_config_reader_t *pu_config_reader_new_sysroot(pu_config_t *config, @@ -170,4 +172,6 @@ pu_config_reader_t *pu_config_reader_finit(pu_config_t *config, FILE *stream); int pu_config_reader_next(pu_config_reader_t *reader); void pu_config_reader_free(pu_config_reader_t *reader); +int pu_config_add_architecture(pu_config_t *dest, char *arch); + #endif /* PACUTILS_CONFIG_H */ diff --git a/src/pacconf.c b/src/pacconf.c index dbb17c3..c7ea13f 100644 --- a/src/pacconf.c +++ b/src/pacconf.c @@ -109,7 +109,7 @@ pu_config_t *parse_opts(int argc, char **argv) { while ((c = getopt_long(argc, argv, short_opts, long_opts, NULL)) != -1) { switch (c) { case FLAG_ARCH: - alpm_list_append_strdup(&config->architectures, optarg); + pu_config_add_architecture(config, optarg); break; case FLAG_CONFIG: config_file = optarg; @@ -156,11 +156,23 @@ pu_config_t *parse_opts(int argc, char **argv) { } } + pu_config_t *res; if (raw) { - return pu_ui_config_parse_sysroot(config, config_file, sysroot); + res = pu_ui_config_parse_sysroot(config, config_file, sysroot); } else { - return pu_ui_config_load_sysroot(config, config_file, sysroot); + res = pu_ui_config_load_sysroot(config, config_file, sysroot); } + + if (!res) { + return NULL; + } + + if (pu_config_subst_server_vars(config) != 0) { + fputs("error: substituting repo server values failed", stderr); + return NULL; + } + + return config; } void list_repos(void) { diff --git a/src/pacsync.c b/src/pacsync.c index dd26883..5bae570 100644 --- a/src/pacsync.c +++ b/src/pacsync.c @@ -46,6 +46,7 @@ enum longopt_flags { FLAG_LOGFILE, FLAG_SYSROOT, FLAG_VERSION, + FLAG_ARCH, }; #define hputs(msg) fputs(msg"\n", stream); @@ -59,6 +60,7 @@ void usage(int ret) { hputs(" --dbext= set an alternate sync database extension"); hputs(" --dbpath= set an alternate database location"); hputs(" --sysroot= set an alternate system root"); + hputs(" --arch= set an alternate architecture"); hputs(" --force sync repos even if already up-to-date"); hputs(" --debug enable extra debugging messages"); hputs(" --logfile= set an alternate log file"); @@ -82,6 +84,7 @@ pu_config_t *parse_opts(int argc, char **argv) { { "debug", no_argument, NULL, FLAG_DEBUG }, { "no-timeout", no_argument, NULL, FLAG_NOTIMEOUT }, { "sysroot", required_argument, NULL, FLAG_SYSROOT }, + { "arch", required_argument, NULL, FLAG_ARCH }, { "force", no_argument, &force, 1 }, { "updated", no_argument, &ret_updated, 1 }, { "help", no_argument, NULL, FLAG_HELP }, @@ -110,6 +113,9 @@ pu_config_t *parse_opts(int argc, char **argv) { free(config->dbpath); config->dbpath = strdup(optarg); break; + case FLAG_ARCH: + pu_config_add_architecture(config, optarg); + break; case FLAG_DEBUG: log_level |= ALPM_LOG_DEBUG; log_level |= ALPM_LOG_FUNCTION; @@ -141,6 +147,11 @@ pu_config_t *parse_opts(int argc, char **argv) { return NULL; } + if (pu_config_subst_server_vars(config) != 0) { + fputs("error: substituting repo server values failed", stderr); + return NULL; + } + return config; } diff --git a/src/pactrans.c b/src/pactrans.c index c0ffe3c..c4abd1c 100644 --- a/src/pactrans.c +++ b/src/pactrans.c @@ -93,6 +93,7 @@ enum longopt_flags { FLAG_USE_DEFAULT_PROVIDER, FLAG_VERSION, FLAG_YOLO, + FLAG_ARCH, }; enum replacement_disposition { @@ -149,6 +150,7 @@ void usage(int ret) { hputs(" --dbsync update sync databases prior to the transaction"); hputs(" --dbext= set an alternate sync database extension"); hputs(" --dbpath= set an alternate database location"); + hputs(" --arch= set an alternate architecture"); hputs(" --debug enable extra debugging messages"); hputs(" --no-timeout disable low speed timeouts for downloads"); hputs(" --hookdir= add additional user hook directory"); @@ -270,6 +272,7 @@ pu_config_t *parse_opts(int argc, char **argv) { { "dbext", required_argument, NULL, FLAG_DBEXT }, { "dbpath", required_argument, NULL, FLAG_DBPATH }, { "dbsync", no_argument, NULL, FLAG_DBSYNC }, + { "arch", required_argument, NULL, FLAG_ARCH }, { "debug", optional_argument, NULL, FLAG_DEBUG }, { "hookdir", required_argument, NULL, FLAG_HOOKDIR }, { "logfile", required_argument, NULL, FLAG_LOGFILE }, @@ -383,6 +386,9 @@ pu_config_t *parse_opts(int argc, char **argv) { case FLAG_DBSYNC: dbsync = 1; break; + case FLAG_ARCH: + pu_config_add_architecture(config, optarg); + break; case FLAG_DEBUG: log_level |= ALPM_LOG_DEBUG; log_level |= ALPM_LOG_FUNCTION;