mirror of
https://github.com/moparisthebest/pacman
synced 2025-03-01 01:41:52 -05:00
CLI args: stricter/better parsing
In the following, the letters SRUDQ refer to the corresponding pacman operations. Most of the work in this commit is about removing as many options as possible from the global section and moving them to where they actually belong. Additionally, --ignore{,group} are added to U and --dbonly is added to S. --dbonly added to S --asdeps moved to S/U/D --asexplicit moved to S/U/D --print-format moved to S/U/R --noprogressbar moved to S/U/R --noscriptlet moved to S/U/R --ignorepkg added to U --ignoregrp added to U -d moved to S/U/R (--nodeps) and Q (--deps) -p moved to S/U/R (--print) and Q (--file) -f moved to S/U Signed-off-by: Xavier Chantry <chantry.xavier@gmail.com> Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
parent
827258f32e
commit
5fcb005ebd
@ -158,6 +158,16 @@ Options
|
|||||||
*\--config* <'file'>::
|
*\--config* <'file'>::
|
||||||
Specify an alternate configuration file.
|
Specify an alternate configuration file.
|
||||||
|
|
||||||
|
*\--ignore* <'package'>::
|
||||||
|
Directs pacman to ignore upgrades of package even if there is one
|
||||||
|
available. Multiple packages can be specified by separating them
|
||||||
|
with a comma.
|
||||||
|
|
||||||
|
*\--ignoregroup* <'group'>::
|
||||||
|
Directs pacman to ignore upgrades of all packages in 'group' even if
|
||||||
|
there is one available. Multiple groups can be specified by
|
||||||
|
separating them with a comma.
|
||||||
|
|
||||||
*\--logfile* <'file'>::
|
*\--logfile* <'file'>::
|
||||||
Specify an alternate log file. This is an absolute path, regardless of
|
Specify an alternate log file. This is an absolute path, regardless of
|
||||||
the installation root setting.
|
the installation root setting.
|
||||||
@ -321,6 +331,10 @@ linkman:pacman.conf[5].
|
|||||||
or '-i' flags will also display those packages in all repositories that
|
or '-i' flags will also display those packages in all repositories that
|
||||||
depend on this package.
|
depend on this package.
|
||||||
|
|
||||||
|
*-k, \--dbonly*::
|
||||||
|
Adds the database entries for the specified packages but does not install any
|
||||||
|
of the files.
|
||||||
|
|
||||||
*-l, \--list*::
|
*-l, \--list*::
|
||||||
List all packages in the specified repositories. Multiple repositories
|
List all packages in the specified repositories. Multiple repositories
|
||||||
can be specified on the command line.
|
can be specified on the command line.
|
||||||
@ -365,21 +379,11 @@ linkman:pacman.conf[5].
|
|||||||
*\--needed*::
|
*\--needed*::
|
||||||
Don't reinstall the targets that are already up-to-date.
|
Don't reinstall the targets that are already up-to-date.
|
||||||
|
|
||||||
*\--ignore* <'package'>::
|
|
||||||
Directs pacman to ignore upgrades of package even if there is one
|
|
||||||
available. Multiple packages can be specified by separating them
|
|
||||||
with a comma.
|
|
||||||
|
|
||||||
*\--ignoregroup* <'group'>::
|
|
||||||
Directs pacman to ignore upgrades of all packages in 'group' even if
|
|
||||||
there is one available. Multiple groups can be specified by
|
|
||||||
separating them with a comma.
|
|
||||||
|
|
||||||
|
|
||||||
Upgrade Options[[UO]]
|
Upgrade Options[[UO]]
|
||||||
--------------------
|
--------------------
|
||||||
*-k, \--dbonly*::
|
*-k, \--dbonly*::
|
||||||
Adds the database entries for the specified packages but do not install any
|
Adds the database entries for the specified packages but does not install any
|
||||||
of the files. On an upgrade operation, the existing package and all files
|
of the files. On an upgrade operation, the existing package and all files
|
||||||
will be removed and the database entry for the new package will be added.
|
will be removed and the database entry for the new package will be added.
|
||||||
|
|
||||||
|
@ -352,6 +352,21 @@ static void setlibpaths(void)
|
|||||||
|
|
||||||
#define check_optarg() if(!optarg) { return(1); }
|
#define check_optarg() if(!optarg) { return(1); }
|
||||||
|
|
||||||
|
typedef void (*fn_add) (const char *s);
|
||||||
|
|
||||||
|
static int parsearg_util_addlist(fn_add fn)
|
||||||
|
{
|
||||||
|
alpm_list_t *list = NULL, *item = NULL; /* lists for splitting strings */
|
||||||
|
|
||||||
|
check_optarg();
|
||||||
|
list = strsplit(optarg, ',');
|
||||||
|
for(item = list; item; item = alpm_list_next(item)) {
|
||||||
|
fn((char *)alpm_list_getdata(item));
|
||||||
|
}
|
||||||
|
FREELIST(list);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
/** Helper function for parsing operation from command-line arguments.
|
/** Helper function for parsing operation from command-line arguments.
|
||||||
* @param opt Keycode returned by getopt_long
|
* @param opt Keycode returned by getopt_long
|
||||||
* @param dryrun If nonzero, application state is NOT changed
|
* @param dryrun If nonzero, application state is NOT changed
|
||||||
@ -398,8 +413,6 @@ static int parsearg_op(int opt, int dryrun)
|
|||||||
static int parsearg_global(int opt)
|
static int parsearg_global(int opt)
|
||||||
{
|
{
|
||||||
switch(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_ARCH: check_optarg(); setarch(optarg); break;
|
case OP_ARCH: check_optarg(); setarch(optarg); break;
|
||||||
case OP_ASK:
|
case OP_ASK:
|
||||||
check_optarg();
|
check_optarg();
|
||||||
@ -449,22 +462,10 @@ static int parsearg_global(int opt)
|
|||||||
config->logfile = strndup(optarg, PATH_MAX);
|
config->logfile = strndup(optarg, PATH_MAX);
|
||||||
break;
|
break;
|
||||||
case OP_NOCONFIRM: config->noconfirm = 1; break;
|
case OP_NOCONFIRM: config->noconfirm = 1; 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 'b':
|
case 'b':
|
||||||
check_optarg();
|
check_optarg();
|
||||||
config->dbpath = strdup(optarg);
|
config->dbpath = strdup(optarg);
|
||||||
break;
|
break;
|
||||||
case 'd':
|
|
||||||
config->op_q_deps = 1;
|
|
||||||
config->flags |= PM_TRANS_FLAG_NODEPS;
|
|
||||||
break;
|
|
||||||
case 'f': config->flags |= PM_TRANS_FLAG_FORCE; break;
|
|
||||||
case 'p': config->op_q_isfile = 1; config->print = 1; break;
|
|
||||||
case 'r': check_optarg(); config->rootdir = strdup(optarg); break;
|
case 'r': check_optarg(); config->rootdir = strdup(optarg); break;
|
||||||
case 'v': (config->verbose)++; break;
|
case 'v': (config->verbose)++; break;
|
||||||
default: return(1);
|
default: return(1);
|
||||||
@ -475,6 +476,8 @@ static int parsearg_global(int opt)
|
|||||||
static int parsearg_database(int opt)
|
static int parsearg_database(int opt)
|
||||||
{
|
{
|
||||||
switch(opt) {
|
switch(opt) {
|
||||||
|
case OP_ASDEPS: config->flags |= PM_TRANS_FLAG_ALLDEPS; break;
|
||||||
|
case OP_ASEXPLICIT: config->flags |= PM_TRANS_FLAG_ALLEXPLICIT; break;
|
||||||
default: return(1);
|
default: return(1);
|
||||||
}
|
}
|
||||||
return(0);
|
return(0);
|
||||||
@ -484,6 +487,7 @@ static int parsearg_query(int opt)
|
|||||||
{
|
{
|
||||||
switch(opt) {
|
switch(opt) {
|
||||||
case 'c': config->op_q_changelog = 1; break;
|
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 'e': config->op_q_explicit = 1; break;
|
||||||
case 'g': (config->group)++; break;
|
case 'g': (config->group)++; break;
|
||||||
case 'i': (config->op_q_info)++; break;
|
case 'i': (config->op_q_info)++; break;
|
||||||
@ -491,6 +495,7 @@ static int parsearg_query(int opt)
|
|||||||
case 'l': config->op_q_list = 1; break;
|
case 'l': config->op_q_list = 1; break;
|
||||||
case 'm': config->op_q_foreign = 1; break;
|
case 'm': config->op_q_foreign = 1; break;
|
||||||
case 'o': config->op_q_owns = 1; break;
|
case 'o': config->op_q_owns = 1; break;
|
||||||
|
case 'p': config->op_q_isfile = 1; break;
|
||||||
case 'q': config->quiet = 1; break;
|
case 'q': config->quiet = 1; break;
|
||||||
case 's': config->op_q_search = 1; break;
|
case 's': config->op_q_search = 1; break;
|
||||||
case 't': config->op_q_unrequired = 1; break;
|
case 't': config->op_q_unrequired = 1; break;
|
||||||
@ -503,9 +508,14 @@ static int parsearg_query(int opt)
|
|||||||
static int parsearg_remove(int opt)
|
static int parsearg_remove(int opt)
|
||||||
{
|
{
|
||||||
switch(opt) {
|
switch(opt) {
|
||||||
|
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->flags |= PM_TRANS_FLAG_CASCADE; break;
|
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 'k': config->flags |= PM_TRANS_FLAG_DBONLY; break;
|
||||||
case 'n': config->flags |= PM_TRANS_FLAG_NOSAVE; break;
|
case 'n': config->flags |= PM_TRANS_FLAG_NOSAVE; break;
|
||||||
|
case 'p': config->print = 1; break;
|
||||||
case 's':
|
case 's':
|
||||||
if(config->flags & PM_TRANS_FLAG_RECURSE) {
|
if(config->flags & PM_TRANS_FLAG_RECURSE) {
|
||||||
config->flags |= PM_TRANS_FLAG_RECURSEALL;
|
config->flags |= PM_TRANS_FLAG_RECURSEALL;
|
||||||
@ -521,30 +531,23 @@ static int parsearg_remove(int opt)
|
|||||||
|
|
||||||
static int parsearg_sync(int opt)
|
static int parsearg_sync(int opt)
|
||||||
{
|
{
|
||||||
alpm_list_t *list = NULL, *item = NULL; /* lists for splitting strings */
|
|
||||||
|
|
||||||
switch(opt) {
|
switch(opt) {
|
||||||
case OP_IGNORE:
|
case OP_ASDEPS: config->flags |= PM_TRANS_FLAG_ALLDEPS; break;
|
||||||
check_optarg();
|
case OP_ASEXPLICIT: config->flags |= PM_TRANS_FLAG_ALLEXPLICIT; break;
|
||||||
list = strsplit(optarg, ',');
|
case OP_IGNORE: parsearg_util_addlist(alpm_option_add_ignorepkg); break;
|
||||||
for(item = list; item; item = alpm_list_next(item)) {
|
case OP_IGNOREGROUP: parsearg_util_addlist(alpm_option_add_ignoregrp); break;
|
||||||
alpm_option_add_ignorepkg((char *)alpm_list_getdata(item));
|
|
||||||
}
|
|
||||||
FREELIST(list);
|
|
||||||
break;
|
|
||||||
case OP_IGNOREGROUP:
|
|
||||||
check_optarg();
|
|
||||||
list = strsplit(optarg, ',');
|
|
||||||
for(item = list; item; item = alpm_list_next(item)) {
|
|
||||||
alpm_option_add_ignoregrp((char *)alpm_list_getdata(item));
|
|
||||||
}
|
|
||||||
FREELIST(list);
|
|
||||||
break;
|
|
||||||
case OP_NEEDED: config->flags |= PM_TRANS_FLAG_NEEDED; break;
|
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 '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 'g': (config->group)++; break;
|
||||||
case 'i': (config->op_s_info)++; break;
|
case 'i': (config->op_s_info)++; break;
|
||||||
case 'l': config->op_q_list = 1; 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 'q': config->quiet = 1; break;
|
||||||
case 's': config->op_s_search = 1; break;
|
case 's': config->op_s_search = 1; break;
|
||||||
case 'u': (config->op_s_upgrade)++; break;
|
case 'u': (config->op_s_upgrade)++; break;
|
||||||
@ -570,7 +573,17 @@ static int parsearg_deptest(int opt)
|
|||||||
static int parsearg_upgrade(int opt)
|
static int parsearg_upgrade(int opt)
|
||||||
{
|
{
|
||||||
switch(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 'k': config->flags |= PM_TRANS_FLAG_DBONLY; break;
|
||||||
|
case 'p': config->print = 1; break;
|
||||||
default: return(1);
|
default: return(1);
|
||||||
}
|
}
|
||||||
return(0);
|
return(0);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user