Make it easier to ignore multiple packages.
This makes --ignore and --ignoregroup able to accept multiple packages/groups by separating each with a comma. For instance: pacman -Su --ignore kernel26,udev,glibc This was requested in the comments of FS#8054. Signed-off-by: Nathan Jones <nathanj@insightbb.com> Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
parent
70a91cbb22
commit
46ec9e3548
4 changed files with 55 additions and 4 deletions
|
@ -267,11 +267,13 @@ Sync Options[[SO]]
|
||||||
|
|
||||||
*\--ignore* <'package'>::
|
*\--ignore* <'package'>::
|
||||||
Directs pacman to ignore upgrades of package even if there is one
|
Directs pacman to ignore upgrades of package even if there is one
|
||||||
available.
|
available. Multiple packages can be specified by separating them
|
||||||
|
with a comma.
|
||||||
|
|
||||||
*\--ignoregroup* <'group'>::
|
*\--ignoregroup* <'group'>::
|
||||||
Directs pacman to ignore upgrades of all packages in 'group' even if
|
Directs pacman to ignore upgrades of all packages in 'group' even if
|
||||||
there is one available.
|
there is one available. Multiple groups can be specified by
|
||||||
|
separating them with a comma.
|
||||||
|
|
||||||
|
|
||||||
Handling Config Files[[HCF]]
|
Handling Config Files[[HCF]]
|
||||||
|
|
|
@ -315,6 +315,8 @@ static int parseargs(int argc, char *argv[])
|
||||||
};
|
};
|
||||||
|
|
||||||
while((opt = getopt_long(argc, argv, "ARUFQSTr:b:vkhscVfmnoldepituwygz", opts, &option_index))) {
|
while((opt = getopt_long(argc, argv, "ARUFQSTr:b:vkhscVfmnoldepituwygz", opts, &option_index))) {
|
||||||
|
alpm_list_t *list = NULL, *item = NULL; /* lists for splitting strings */
|
||||||
|
|
||||||
if(opt < 0) {
|
if(opt < 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -327,7 +329,13 @@ static int parseargs(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
config->configfile = strndup(optarg, PATH_MAX);
|
config->configfile = strndup(optarg, PATH_MAX);
|
||||||
break;
|
break;
|
||||||
case 1002: alpm_option_add_ignorepkg(strdup(optarg)); break;
|
case 1002:
|
||||||
|
list = strsplit(optarg, ',');
|
||||||
|
for(item = list; item; item = alpm_list_next(item)) {
|
||||||
|
alpm_option_add_ignorepkg((char *)alpm_list_getdata(item));
|
||||||
|
}
|
||||||
|
FREELIST(list);
|
||||||
|
break;
|
||||||
case 1003:
|
case 1003:
|
||||||
/* debug levels are made more 'human readable' than using a raw logmask
|
/* debug levels are made more 'human readable' than using a raw logmask
|
||||||
* here, error and warning are set in config_new, though perhaps a
|
* here, error and warning are set in config_new, though perhaps a
|
||||||
|
@ -371,7 +379,13 @@ static int parseargs(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
config->have_logfile = 1;
|
config->have_logfile = 1;
|
||||||
break;
|
break;
|
||||||
case 1010: alpm_option_add_ignoregrp(strdup(optarg)); break;
|
case 1010:
|
||||||
|
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 'A': config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_ADD); break;
|
case 'A': config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_ADD); break;
|
||||||
case 'F':
|
case 'F':
|
||||||
config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_UPGRADE);
|
config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_UPGRADE);
|
||||||
|
|
|
@ -293,6 +293,40 @@ char *strreplace(const char *str, const char *needle, const char *replace)
|
||||||
return newstr;
|
return newstr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Splits a string into a list of strings using the chosen character as
|
||||||
|
* a delimiter.
|
||||||
|
*
|
||||||
|
* @param str the string to split
|
||||||
|
* @param splitchar the character to split at
|
||||||
|
*
|
||||||
|
* @return a list containing the duplicated strings
|
||||||
|
*/
|
||||||
|
alpm_list_t *strsplit(const char *str, const char splitchar)
|
||||||
|
{
|
||||||
|
alpm_list_t *list = NULL;
|
||||||
|
const char *prev = str;
|
||||||
|
char *dup = NULL;
|
||||||
|
|
||||||
|
while((str = strchr(str, splitchar))) {
|
||||||
|
dup = strndup(prev, str - prev);
|
||||||
|
if(dup == NULL) {
|
||||||
|
return(NULL);
|
||||||
|
}
|
||||||
|
list = alpm_list_add(list, dup);
|
||||||
|
|
||||||
|
str++;
|
||||||
|
prev = str;
|
||||||
|
}
|
||||||
|
|
||||||
|
dup = strdup(prev);
|
||||||
|
if(dup == NULL) {
|
||||||
|
return(NULL);
|
||||||
|
}
|
||||||
|
list = alpm_list_add(list, strdup(prev));
|
||||||
|
|
||||||
|
return(list);
|
||||||
|
}
|
||||||
|
|
||||||
void list_display(const char *title, const alpm_list_t *list)
|
void list_display(const char *title, const alpm_list_t *list)
|
||||||
{
|
{
|
||||||
const alpm_list_t *i;
|
const alpm_list_t *i;
|
||||||
|
|
|
@ -46,6 +46,7 @@ void indentprint(const char *str, int indent);
|
||||||
char *strtoupper(char *str);
|
char *strtoupper(char *str);
|
||||||
char *strtrim(char *str);
|
char *strtrim(char *str);
|
||||||
char *strreplace(const char *str, const char *needle, const char *replace);
|
char *strreplace(const char *str, const char *needle, const char *replace);
|
||||||
|
alpm_list_t *strsplit(const char *str, const char splitchar);
|
||||||
void list_display(const char *title, const alpm_list_t *list);
|
void list_display(const char *title, const alpm_list_t *list);
|
||||||
void display_targets(const alpm_list_t *syncpkgs, pmdb_t *db_local);
|
void display_targets(const alpm_list_t *syncpkgs, pmdb_t *db_local);
|
||||||
int yesno(char *fmt, ...);
|
int yesno(char *fmt, ...);
|
||||||
|
|
Loading…
Add table
Reference in a new issue