On Thu, 21 Feb 2013 13:42:20 -0500
Dave Reisner <[email protected]> wrote:

> This prevents "non-sensical" combinations of flags from being
> misinterpreted, such as:
> 
>   $ pacman -Si --changelog $package
>     --changelog is -c, meaning --clean for -S
> 
>   $ pacman -Q --sysupgrade
>     --sysupgrade is -u, meaning --upgrades for -Q
> 
> Signed-off-by: Dave Reisner <[email protected]>
> ---
>  src/pacman/conf.h   | 16 ++++++++++++++-
>  src/pacman/pacman.c | 56 
> ++++++++++++++++++++++++++---------------------------
>  2 files changed, 43 insertions(+), 29 deletions(-)
> 
> diff --git a/src/pacman/conf.h b/src/pacman/conf.h
> index d85d11f..c1fd499 100644
> --- a/src/pacman/conf.h
> +++ b/src/pacman/conf.h
> @@ -129,7 +129,21 @@ enum {
>       OP_PRINTFORMAT,
>       OP_GPGDIR,
>       OP_DBONLY,
> -     OP_FORCE
> +     OP_FORCE,
> +     OP_CASCADE,
> +     OP_CHANGELOG,
> +     OP_CLEAN,
> +     OP_NODEPS,
> +     OP_DEPS,
> +     OP_NATIVE,
> +     OP_NOSAVE,
> +     OP_FILE,
> +     OP_PRINT,
> +     OP_RECURSIVE,
> +     OP_SEARCH,
> +     OP_UPGRADES,
> +     OP_SYSUPGRADE,
> +     OP_UNNEEDED
>  };
>  
>  /* clean method */
> diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
> index 38b28e1..513243a 100644
> --- a/src/pacman/pacman.c
> +++ b/src/pacman/pacman.c
> @@ -456,21 +456,21 @@ 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 OP_CHANGELOG: config->op_q_changelog = 1; break;
> +             case OP_DEPS: 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 OP_NATIVE: 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 OP_FILE: config->op_q_isfile = 1; break;
>               case 'q': config->quiet = 1; break;
> -             case 's': config->op_q_search = 1; break;
> +             case OP_SEARCH: config->op_q_search = 1; break;
>               case 't': config->op_q_unrequired = 1; break;
> -             case 'u': config->op_q_upgrade = 1; break;
> +             case OP_UPGRADES: config->op_q_upgrade = 1; break;
>               default: return 1;
>       }
>       return 0;
> @@ -480,7 +480,7 @@ static int parsearg_query(int opt)
>  static int parsearg_trans(int opt)
>  {
>       switch(opt) {
> -             case 'd':
> +             case OP_NODEPS:
>                       if(config->flags & ALPM_TRANS_FLAG_NODEPVERSION) {
>                               config->flags |= ALPM_TRANS_FLAG_NODEPS;
>                       } else {
> @@ -490,7 +490,7 @@ static int parsearg_trans(int opt)
>               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_PRINT: config->print = 1; break;
>               case OP_PRINTFORMAT:
>                       check_optarg();
>                       config->print_format = strdup(optarg);
> @@ -505,16 +505,16 @@ static int parsearg_remove(int opt)
>       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 's':
> +             case OP_CASCADE: config->flags |= ALPM_TRANS_FLAG_CASCADE; 
> break;
> +             case OP_NOSAVE: config->flags |= ALPM_TRANS_FLAG_NOSAVE; break;
> +             case OP_RECURSIVE:
>                       if(config->flags & ALPM_TRANS_FLAG_RECURSE) {
>                               config->flags |= ALPM_TRANS_FLAG_RECURSEALL;
>                       } else {
>                               config->flags |= ALPM_TRANS_FLAG_RECURSE;
>                       }
>                       break;
> -             case 'u': config->flags |= ALPM_TRANS_FLAG_UNNEEDED; break;
> +             case OP_UNNEEDED: config->flags |= ALPM_TRANS_FLAG_UNNEEDED; 
> break;
>               default: return 1;
>       }
>       return 0;
> @@ -546,13 +546,13 @@ static int parsearg_sync(int opt)
>       if(parsearg_upgrade(opt) == 0)
>               return 0;
>       switch(opt) {
> -             case 'c': (config->op_s_clean)++; break;
> +             case OP_CLEAN: (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_SYSUPGRADE: (config->op_s_upgrade)++; break;
>               case 'w':
>                       config->op_s_downloadonly = 1;
>                       config->flags |= ALPM_TRANS_FLAG_DOWNLOADONLY;
> @@ -585,11 +585,11 @@ static int parseargs(int argc, char *argv[])
>               {"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'},
> +             {"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, 'e'},
>               {"groups",     no_argument,       0, 'g'},
>               {"help",       no_argument,       0, 'h'},
> @@ -597,19 +597,19 @@ static int parseargs(int argc, char *argv[])
>               {"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'},
> +             {"native",     no_argument,       0, OP_NATIVE},
> +             {"nosave",     no_argument,       0, OP_NOSAVE},
>               {"owns",       no_argument,       0, 'o'},
> -             {"file",       no_argument,       0, 'p'},
> -             {"print",      no_argument,       0, 'p'},
> +             {"file",       no_argument,       0, OP_FILE},
> +             {"print",      no_argument,       0, OP_PRINT},
>               {"quiet",      no_argument,       0, 'q'},
>               {"root",       required_argument, 0, 'r'},
> -             {"recursive",  no_argument,       0, 's'},
> -             {"search",     no_argument,       0, 's'},
> +             {"recursive",  no_argument,       0, OP_RECURSIVE},
> +             {"search",     no_argument,       0, OP_SEARCH},
>               {"unrequired", no_argument,       0, 't'},
> -             {"upgrades",   no_argument,       0, 'u'},
> -             {"sysupgrade", no_argument,       0, 'u'},
> -             {"unneeded",   no_argument,       0, 'u'},
> +             {"upgrades",   no_argument,       0, OP_UPGRADES},
> +             {"sysupgrade", no_argument,       0, OP_SYSUPGRADE},
> +             {"unneeded",   no_argument,       0, OP_UNNEEDED},
>               {"verbose",    no_argument,       0, 'v'},
>               {"downloadonly", no_argument,     0, 'w'},
>               {"refresh",    no_argument,       0, 'y'},

This breaks the single letter options.

$ ./pacman -Sc
error: invalid option

Reply via email to