diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/pacman/pacman.c | 164 |
1 files changed, 81 insertions, 83 deletions
diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c index 39390a53..43d59c19 100644 --- a/src/pacman/pacman.c +++ b/src/pacman/pacman.c @@ -91,26 +91,14 @@ static void usage(int op, const char * const myname) printf("%s: %s {-R --remove} [%s] <%s>\n", str_usg, myname, str_opt, str_pkg); printf("%s:\n", str_opt); printf(_(" -c, --cascade remove packages and all packages that depend on them\n")); - printf(_(" -d, --nodeps skip dependency checks\n")); printf(_(" -k, --dbonly only remove database entries, do not remove files\n")); printf(_(" -n, --nosave remove configuration files as well\n")); printf(_(" -s, --recursive remove dependencies also (that won't break packages)\n" " (-ss includes explicitly installed dependencies too)\n")); printf(_(" -u, --unneeded remove unneeded packages (that won't break packages)\n")); - printf(_(" --print only print the targets instead of performing the operation\n")); - printf(_(" --print-format <string>\n" - " specify how the targets should be printed\n")); } else if(op == PM_OP_UPGRADE) { printf("%s: %s {-U --upgrade} [%s] <%s>\n", str_usg, myname, str_opt, str_file); printf("%s:\n", str_opt); - printf(_(" --asdeps install packages as non-explicitly installed\n")); - printf(_(" --asexplicit install packages as explicitly installed\n")); - printf(_(" -d, --nodeps skip dependency checks\n")); - printf(_(" -f, --force force install, overwrite conflicting files\n")); - printf(_(" -k, --dbonly add database entries, do not install or keep existing files\n")); - printf(_(" --print only print the targets instead of performing the operation\n")); - printf(_(" --print-format <string>\n" - " specify how the targets should be printed\n")); } else if(op == PM_OP_QUERY) { printf("%s: %s {-Q --query} [%s] [%s]\n", str_usg, myname, str_opt, str_pkg); printf("%s:\n", str_opt); @@ -124,50 +112,59 @@ static void usage(int op, const char * const myname) printf(_(" -m, --foreign list installed packages not found in sync db(s) [filter]\n")); printf(_(" -o, --owns <file> query the package that owns <file>\n")); printf(_(" -p, --file <package> query a package file instead of the database\n")); + printf(_(" -q, --quiet show less information for query and search\n")); printf(_(" -s, --search <regex> search locally-installed packages for matching strings\n")); printf(_(" -t, --unrequired list packages not required by any package [filter]\n")); printf(_(" -u, --upgrades list outdated packages [filter]\n")); - printf(_(" -q, --quiet show less information for query and search\n")); } else if(op == PM_OP_SYNC) { printf("%s: %s {-S --sync} [%s] [%s]\n", str_usg, myname, str_opt, str_pkg); printf("%s:\n", str_opt); - printf(_(" --asdeps install packages as non-explicitly installed\n")); - printf(_(" --asexplicit install packages as explicitly installed\n")); printf(_(" -c, --clean remove old packages from cache directory (-cc for all)\n")); - printf(_(" -d, --nodeps skip dependency checks\n")); - printf(_(" -f, --force force install, overwrite conflicting files\n")); printf(_(" -g, --groups view all members of a package group\n")); printf(_(" -i, --info view package information\n")); printf(_(" -l, --list <repo> view a list of packages in a repo\n")); + printf(_(" -q, --quiet show less information for query and search\n")); printf(_(" -s, --search <regex> search remote repositories for matching strings\n")); printf(_(" -u, --sysupgrade upgrade installed packages (-uu allows downgrade)\n")); printf(_(" -w, --downloadonly download packages but do not install/upgrade anything\n")); printf(_(" -y, --refresh download fresh package databases from the server\n")); printf(_(" --needed don't reinstall up to date packages\n")); - printf(_(" --ignore <pkg> ignore a package upgrade (can be used more than once)\n")); - printf(_(" --ignoregroup <grp>\n" - " ignore a group upgrade (can be used more than once)\n")); - printf(_(" --print only print the targets instead of performing the operation\n")); - printf(_(" --print-format <string>\n" - " specify how the targets should be printed\n")); - printf(_(" -q, --quiet show less information for query and search\n")); } else if (op == PM_OP_DATABASE) { printf("%s: %s {-D --database} <%s> <%s>\n", str_usg, myname, str_opt, str_pkg); printf("%s:\n", str_opt); printf(_(" --asdeps mark packages as non-explicitly installed\n")); printf(_(" --asexplicit mark packages as explicitly installed\n")); } + switch(op) { + case PM_OP_SYNC: + case PM_OP_UPGRADE: + printf(_(" -f, --force force install, overwrite conflicting files\n")); + printf(_(" -k, --dbonly add database entries, do not install or keep existing files\n")); + printf(_(" --asdeps install packages as non-explicitly installed\n")); + printf(_(" --asexplicit install packages as explicitly installed\n")); + printf(_(" --ignore <pkg> ignore a package upgrade (can be used more than once)\n")); + printf(_(" --ignoregroup <grp>\n" + " ignore a group upgrade (can be used more than once)\n")); + /* pass through */ + case PM_OP_REMOVE: + printf(_(" -d, --nodeps skip dependency checks\n")); + printf(_(" --noprogressbar do not show a progress bar when downloading files\n")); + printf(_(" --noscriptlet do not execute the install scriptlet if one exists\n")); + printf(_(" --print only print the targets instead of performing the operation\n")); + printf(_(" --print-format <string>\n" + " specify how the targets should be printed\n")); + break; + } + + printf(_(" -b, --dbpath <path> set an alternate database location\n")); + printf(_(" -r, --root <path> set an alternate installation root\n")); + printf(_(" -v, --verbose be verbose\n")); + printf(_(" --arch <arch> set an alternate architecture\n")); + printf(_(" --cachedir <dir> set an alternate package cache location\n")); printf(_(" --config <path> set an alternate configuration file\n")); + printf(_(" --debug display debug messages\n")); printf(_(" --logfile <path> set an alternate log file\n")); printf(_(" --noconfirm do not ask for any confirmation\n")); - printf(_(" --noprogressbar do not show a progress bar when downloading files\n")); - printf(_(" --noscriptlet do not execute the install scriptlet if one exists\n")); - printf(_(" -v, --verbose be verbose\n")); - printf(_(" --debug display debug messages\n")); - 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")); } } @@ -506,17 +503,31 @@ static int parsearg_query(int opt) return(0); } -static int parsearg_remove(int opt) +/* options common to -S -R -U */ +static int parsearg_trans(int opt) { switch(opt) { + case 'd': config->flags |= PM_TRANS_FLAG_NODEPS; break; + case 'k': config->flags |= PM_TRANS_FLAG_DBONLY; break; case OP_NOPROGRESSBAR: config->noprogressbar = 1; break; case OP_NOSCRIPTLET: config->flags |= PM_TRANS_FLAG_NOSCRIPTLET; break; - case OP_PRINTFORMAT: check_optarg(); config->print_format = strdup(optarg); break; + case 'p': config->print = 1; break; + case OP_PRINTFORMAT: + check_optarg(); + config->print_format = strdup(optarg); + break; + default: return(1); + } + return(0); +} + +static int parsearg_remove(int opt) +{ + if (parsearg_trans(opt) == 0) + return(0); + switch(opt) { case 'c': config->flags |= PM_TRANS_FLAG_CASCADE; break; - case 'd': config->flags |= PM_TRANS_FLAG_NODEPS; break; - case 'k': config->flags |= PM_TRANS_FLAG_DBONLY; break; case 'n': config->flags |= PM_TRANS_FLAG_NOSAVE; break; - case 'p': config->print = 1; break; case 's': if(config->flags & PM_TRANS_FLAG_RECURSE) { config->flags |= PM_TRANS_FLAG_RECURSEALL; @@ -530,25 +541,36 @@ static int parsearg_remove(int opt) return(0); } -static int parsearg_sync(int opt) +/* options common to -S -U */ +static int parsearg_upgrade(int opt) { + if (parsearg_trans(opt) == 0) + return(0); switch(opt) { + case 'f': config->flags |= PM_TRANS_FLAG_FORCE; break; case OP_ASDEPS: config->flags |= PM_TRANS_FLAG_ALLDEPS; break; case OP_ASEXPLICIT: config->flags |= PM_TRANS_FLAG_ALLEXPLICIT; break; - case OP_IGNORE: parsearg_util_addlist(alpm_option_add_ignorepkg); break; - case OP_IGNOREGROUP: parsearg_util_addlist(alpm_option_add_ignoregrp); break; + case OP_IGNORE: + parsearg_util_addlist(alpm_option_add_ignorepkg); + break; + case OP_IGNOREGROUP: + parsearg_util_addlist(alpm_option_add_ignoregrp); + break; + default: return(1); + } + return(0); +} + +static int parsearg_sync(int opt) +{ + if (parsearg_upgrade(opt) == 0) + return(0); + switch(opt) { case OP_NEEDED: config->flags |= PM_TRANS_FLAG_NEEDED; break; - case OP_NOPROGRESSBAR: config->noprogressbar = 1; break; - case OP_NOSCRIPTLET: config->flags |= PM_TRANS_FLAG_NOSCRIPTLET; break; - case OP_PRINTFORMAT: check_optarg(); config->print_format = strdup(optarg); break; case 'c': (config->op_s_clean)++; break; - case 'd': config->flags |= PM_TRANS_FLAG_NODEPS; break; - case 'f': config->flags |= PM_TRANS_FLAG_FORCE; break; case 'g': (config->group)++; break; case 'i': (config->op_s_info)++; break; case 'l': config->op_q_list = 1; break; - case 'k': config->flags |= PM_TRANS_FLAG_DBONLY; break; - case 'p': config->print = 1; break; case 'q': config->quiet = 1; break; case 's': config->op_s_search = 1; break; case 'u': (config->op_s_upgrade)++; break; @@ -563,33 +585,6 @@ static int parsearg_sync(int opt) return(0); } -static int parsearg_deptest(int opt) -{ - switch(opt) { - default: return(1); - } - return(0); -} - -static int parsearg_upgrade(int opt) -{ - switch(opt) { - case OP_ASDEPS: config->flags |= PM_TRANS_FLAG_ALLDEPS; break; - case OP_ASEXPLICIT: config->flags |= PM_TRANS_FLAG_ALLEXPLICIT; break; - case OP_IGNORE: parsearg_util_addlist(alpm_option_add_ignorepkg); break; - case OP_IGNOREGROUP: parsearg_util_addlist(alpm_option_add_ignoregrp); break; - case OP_NOPROGRESSBAR: config->noprogressbar = 1; break; - case OP_NOSCRIPTLET: config->flags |= PM_TRANS_FLAG_NOSCRIPTLET; break; - case OP_PRINTFORMAT: check_optarg(); config->print_format = strdup(optarg); break; - case 'd': config->flags |= PM_TRANS_FLAG_NODEPS; break; - case 'f': config->flags |= PM_TRANS_FLAG_FORCE; break; - case 'k': config->flags |= PM_TRANS_FLAG_DBONLY; break; - case 'p': config->print = 1; break; - default: return(1); - } - return(0); -} - /** Parse command-line arguments for each operation. * @param argc argc * @param argv argv @@ -665,6 +660,7 @@ static int parseargs(int argc, char *argv[]) } else if(opt == 0) { continue; } else if(opt == '?') { + /* unknown option, getopt printed an error */ return(1); } parsearg_op(opt, 0); @@ -686,12 +682,12 @@ static int parseargs(int argc, char *argv[]) /* parse all other options */ optind = 1; while((opt = getopt_long(argc, argv, optstring, opts, &option_index))) { - if(opt < 0) { break; } else if(opt == 0) { continue; } else if(opt == '?') { + /* this should have failed during first pass already */ return(1); } else if(parsearg_op(opt, 1) == 0) { /* opt is an operation */ continue; @@ -711,22 +707,24 @@ static int parseargs(int argc, char *argv[]) result = parsearg_sync(opt); break; case PM_OP_DEPTEST: - result = parsearg_deptest(opt); + result = 1; break; case PM_OP_UPGRADE: result = parsearg_upgrade(opt); break; default: + pm_printf(PM_LOG_ERROR, _("no operation specified (use -h for help)\n")); return(1); } + if (result == 0) + continue; + + /* fall back to global options */ + result = parsearg_global(opt); if(result != 0) { - /* operation-specific option parsing failed, fall back to global options */ - result = parsearg_global(opt); - if(result != 0) { - /* global option parsing failed, abort */ - pm_printf(PM_LOG_ERROR, _("invalid option\n")); - return(result); - } + /* global option parsing failed, abort */ + pm_printf(PM_LOG_ERROR, _("invalid option\n")); + return(result); } } |