Removes the overlap between optflags for different operations that allowed non-sensical combinations of flags such as: $ pacman -Si --changelog $package --changelog is -c, meaning --clean for -S $ pacman -Q --sysupgrade --sysupgrade is -u, meaning --upgrades for -Q Also add a few missing braces. Original-work-by: Dave Reisner <dreisner@archlinux.org> Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com> --- src/pacman/conf.h | 31 ++++++- src/pacman/pacman.c | 245 +++++++++++++++++++++++++++++++++++++--------------- 2 files changed, 206 insertions(+), 70 deletions(-) diff --git a/src/pacman/conf.h b/src/pacman/conf.h index dcd3204..e263d7c 100644 --- a/src/pacman/conf.h +++ b/src/pacman/conf.h @@ -146,7 +146,36 @@ enum { OP_GPGDIR, OP_DBONLY, OP_FORCE, - OP_COLOR + OP_COLOR, + OP_DBPATH, + OP_CASCADE, + OP_CHANGELOG, + OP_CLEAN, + OP_NODEPS, + OP_DEPS, + OP_EXPLICIT, + OP_GROUPS, + OP_HELP, + OP_INFO, + OP_CHECK, + OP_LIST, + OP_FOREIGN, + OP_NATIVE, + OP_NOSAVE, + OP_OWNS, + OP_FILE, + OP_PRINT, + OP_QUIET, + OP_ROOT, + OP_RECURSIVE, + OP_SEARCH, + OP_UNREQUIRED, + OP_UPGRADES, + OP_SYSUPGRADE, + OP_UNNEEDED, + OP_VERBOSE, + OP_DOWNLOADONLY, + OP_REFRESH }; /* clean method */ diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c index d2114e6..93baa44 100644 --- a/src/pacman/pacman.c +++ b/src/pacman/pacman.c @@ -446,14 +446,25 @@ static int parsearg_global(int opt) check_optarg(); config->logfile = strndup(optarg, PATH_MAX); break; - case OP_NOCONFIRM: config->noconfirm = 1; break; + case OP_NOCONFIRM: + config->noconfirm = 1; + break; + case OP_DBPATH: case 'b': check_optarg(); config->dbpath = strdup(optarg); break; - case 'r': check_optarg(); config->rootdir = strdup(optarg); break; - case 'v': (config->verbose)++; break; - default: return 1; + case OP_ROOT: + case 'r': + check_optarg(); + config->rootdir = strdup(optarg); + break; + case OP_VERBOSE: + case 'v': + (config->verbose)++; + break; + default: + return 1; } return 0; } @@ -471,22 +482,67 @@ static int parsearg_database(int opt) static int parsearg_query(int opt) { switch(opt) { - case 'c': config->op_q_changelog = 1; break; - case 'd': config->op_q_deps = 1; break; - case 'e': config->op_q_explicit = 1; break; - case 'g': (config->group)++; break; - case 'i': (config->op_q_info)++; break; - case 'k': (config->op_q_check)++; break; - case 'l': config->op_q_list = 1; break; - case 'm': config->op_q_locality |= PKG_LOCALITY_LOCAL; break; - case 'n': config->op_q_locality |= PKG_LOCALITY_FOREIGN; break; - case 'o': config->op_q_owns = 1; break; - case 'p': config->op_q_isfile = 1; break; - case 'q': config->quiet = 1; break; - case 's': config->op_q_search = 1; break; - case 't': (config->op_q_unrequired)++; break; - case 'u': config->op_q_upgrade = 1; break; - default: return 1; + case OP_CHANGELOG: + case 'c': + config->op_q_changelog = 1; + break; + case OP_DEPS: + case 'd': + config->op_q_deps = 1; + break; + case OP_EXPLICIT: + case 'e': + config->op_q_explicit = 1; + break; + case OP_GROUPS: + case 'g': + (config->group)++; + break; + case OP_INFO: + case 'i': + (config->op_q_info)++; + break; + case OP_CHECK: + case 'k': + (config->op_q_check)++; + break; + case OP_LIST: + case 'l': + config->op_q_list = 1; + break; + case OP_FOREIGN: + case 'm': + config->op_q_locality |= PKG_LOCALITY_LOCAL; + break; + case OP_NATIVE: + case 'n': + config->op_q_locality |= PKG_LOCALITY_FOREIGN; + break; + case OP_OWNS: + case 'o': + config->op_q_owns = 1; + break; + case OP_FILE: + case 'p': + config->op_q_isfile = 1; + break; + case OP_QUIET: + case 'q': + config->quiet = 1; + break; + case OP_SEARCH: + case 's': + config->op_q_search = 1; + break; + case OP_UNREQUIRED: + case 't': + (config->op_q_unrequired)++; + break; + case OP_UPGRADES: + case 'u': + config->op_q_upgrade = 1; break; + default: + return 1; } return 0; } @@ -495,6 +551,7 @@ static int parsearg_query(int opt) static int parsearg_trans(int opt) { switch(opt) { + case OP_NODEPS: case 'd': if(config->flags & ALPM_TRANS_FLAG_NODEPVERSION) { config->flags |= ALPM_TRANS_FLAG_NODEPS; @@ -502,26 +559,44 @@ static int parsearg_trans(int opt) config->flags |= ALPM_TRANS_FLAG_NODEPVERSION; } break; - case OP_DBONLY: config->flags |= ALPM_TRANS_FLAG_DBONLY; break; - case OP_NOPROGRESSBAR: config->noprogressbar = 1; break; - case OP_NOSCRIPTLET: config->flags |= ALPM_TRANS_FLAG_NOSCRIPTLET; break; - case 'p': config->print = 1; break; + case OP_DBONLY: + config->flags |= ALPM_TRANS_FLAG_DBONLY; + break; + case OP_NOPROGRESSBAR: + config->noprogressbar = 1; + break; + case OP_NOSCRIPTLET: + config->flags |= ALPM_TRANS_FLAG_NOSCRIPTLET; + break; + case OP_PRINT: + case 'p': + config->print = 1; + break; case OP_PRINTFORMAT: check_optarg(); config->print_format = strdup(optarg); break; - default: return 1; + default: + return 1; } return 0; } static int parsearg_remove(int opt) { - if(parsearg_trans(opt) == 0) + if(parsearg_trans(opt) == 0) { return 0; + } switch(opt) { - case 'c': config->flags |= ALPM_TRANS_FLAG_CASCADE; break; - case 'n': config->flags |= ALPM_TRANS_FLAG_NOSAVE; break; + case OP_CASCADE: + case 'c': + config->flags |= ALPM_TRANS_FLAG_CASCADE; + break; + case OP_NOSAVE: + case 'n': + config->flags |= ALPM_TRANS_FLAG_NOSAVE; + break; + case OP_RECURSIVE: case 's': if(config->flags & ALPM_TRANS_FLAG_RECURSE) { config->flags |= ALPM_TRANS_FLAG_RECURSEALL; @@ -529,8 +604,12 @@ static int parsearg_remove(int opt) config->flags |= ALPM_TRANS_FLAG_RECURSE; } break; - case 'u': config->flags |= ALPM_TRANS_FLAG_UNNEEDED; break; - default: return 1; + case OP_UNNEEDED: + case 'u': + config->flags |= ALPM_TRANS_FLAG_UNNEEDED; + break; + default: + return 1; } return 0; } @@ -538,8 +617,9 @@ static int parsearg_remove(int opt) /* options common to -S -U */ static int parsearg_upgrade(int opt) { - if(parsearg_trans(opt) == 0) + if(parsearg_trans(opt) == 0) { return 0; + } switch(opt) { case OP_FORCE: config->flags |= ALPM_TRANS_FLAG_FORCE; break; case OP_ASDEPS: config->flags |= ALPM_TRANS_FLAG_ALLDEPS; break; @@ -558,23 +638,50 @@ static int parsearg_upgrade(int opt) static int parsearg_sync(int opt) { - if(parsearg_upgrade(opt) == 0) + if(parsearg_upgrade(opt) == 0) { return 0; + } switch(opt) { - case 'c': (config->op_s_clean)++; break; - case 'g': (config->group)++; break; - case 'i': (config->op_s_info)++; break; - case 'l': config->op_q_list = 1; break; - case 'q': config->quiet = 1; break; - case 's': config->op_s_search = 1; break; - case 'u': (config->op_s_upgrade)++; break; + case OP_CLEAN: + case 'c': + (config->op_s_clean)++; + break; + case OP_GROUPS: + case 'g': + (config->group)++; + break; + case OP_INFO: + case 'i': + (config->op_s_info)++; + break; + case OP_LIST: + case 'l': + config->op_q_list = 1; + break; + case OP_QUIET: + case 'q': + config->quiet = 1; + break; + case OP_SEARCH: + case 's': + config->op_s_search = 1; + break; + case OP_SYSUPGRADE: + case 'u': + (config->op_s_upgrade)++; + break; + case OP_DOWNLOADONLY: case 'w': config->op_s_downloadonly = 1; config->flags |= ALPM_TRANS_FLAG_DOWNLOADONLY; config->flags |= ALPM_TRANS_FLAG_NOCONFLICTS; break; - case 'y': (config->op_s_sync)++; break; - default: return 1; + case OP_REFRESH: + case 'y': + (config->op_s_sync)++; + break; + default: + return 1; } return 0; } @@ -599,36 +706,36 @@ static int parseargs(int argc, char *argv[]) {"deptest", no_argument, 0, 'T'}, /* used by makepkg */ {"upgrade", no_argument, 0, 'U'}, {"version", no_argument, 0, 'V'}, - {"dbpath", required_argument, 0, 'b'}, - {"cascade", no_argument, 0, 'c'}, - {"changelog", no_argument, 0, 'c'}, - {"clean", no_argument, 0, 'c'}, - {"nodeps", no_argument, 0, 'd'}, - {"deps", no_argument, 0, 'd'}, - {"explicit", no_argument, 0, 'e'}, - {"groups", no_argument, 0, 'g'}, {"help", no_argument, 0, 'h'}, - {"info", no_argument, 0, 'i'}, - {"check", no_argument, 0, 'k'}, - {"list", no_argument, 0, 'l'}, - {"foreign", no_argument, 0, 'm'}, - {"native", no_argument, 0, 'n'}, - {"nosave", no_argument, 0, 'n'}, - {"owns", no_argument, 0, 'o'}, - {"file", no_argument, 0, 'p'}, - {"print", no_argument, 0, 'p'}, - {"quiet", no_argument, 0, 'q'}, - {"root", required_argument, 0, 'r'}, - {"recursive", no_argument, 0, 's'}, - {"search", no_argument, 0, 's'}, - {"unrequired", no_argument, 0, 't'}, - {"upgrades", no_argument, 0, 'u'}, - {"sysupgrade", no_argument, 0, 'u'}, - {"unneeded", no_argument, 0, 'u'}, - {"verbose", no_argument, 0, 'v'}, - {"downloadonly", no_argument, 0, 'w'}, - {"refresh", no_argument, 0, 'y'}, + {"dbpath", required_argument, 0, OP_DBPATH}, + {"cascade", no_argument, 0, OP_CASCADE}, + {"changelog", no_argument, 0, OP_CHANGELOG}, + {"clean", no_argument, 0, OP_CLEAN}, + {"nodeps", no_argument, 0, OP_NODEPS}, + {"deps", no_argument, 0, OP_DEPS}, + {"explicit", no_argument, 0, OP_EXPLICIT}, + {"groups", no_argument, 0, OP_GROUPS}, + {"info", no_argument, 0, OP_INFO}, + {"check", no_argument, 0, OP_CHECK}, + {"list", no_argument, 0, OP_LIST}, + {"foreign", no_argument, 0, OP_FOREIGN}, + {"native", no_argument, 0, OP_NATIVE}, + {"nosave", no_argument, 0, OP_NOSAVE}, + {"owns", no_argument, 0, OP_OWNS}, + {"file", no_argument, 0, OP_FILE}, + {"print", no_argument, 0, OP_PRINT}, + {"quiet", no_argument, 0, OP_QUIET}, + {"root", required_argument, 0, OP_ROOT}, + {"recursive", no_argument, 0, OP_RECURSIVE}, + {"search", no_argument, 0, OP_SEARCH}, + {"unrequired", no_argument, 0, OP_UNREQUIRED}, + {"upgrades", no_argument, 0, OP_UPGRADES}, + {"sysupgrade", no_argument, 0, OP_SYSUPGRADE}, + {"unneeded", no_argument, 0, OP_UNNEEDED}, + {"verbose", no_argument, 0, OP_VERBOSE}, + {"downloadonly", no_argument, 0, OP_DOWNLOADONLY}, + {"refresh", no_argument, 0, OP_REFRESH}, {"noconfirm", no_argument, 0, OP_NOCONFIRM}, {"config", required_argument, 0, OP_CONFIG}, {"ignore", required_argument, 0, OP_IGNORE}, -- 1.8.4