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
|
@ -267,11 +267,13 @@ Sync Options[[SO]]
|
|||
|
||||
*\--ignore* <'package'>::
|
||||
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'>::
|
||||
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]]
|
||||
|
|
|
@ -315,6 +315,8 @@ static int parseargs(int argc, char *argv[])
|
|||
};
|
||||
|
||||
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) {
|
||||
break;
|
||||
}
|
||||
|
@ -327,7 +329,13 @@ static int parseargs(int argc, char *argv[])
|
|||
}
|
||||
config->configfile = strndup(optarg, PATH_MAX);
|
||||
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:
|
||||
/* debug levels are made more 'human readable' than using a raw logmask
|
||||
* 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;
|
||||
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 'F':
|
||||
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;
|
||||
}
|
||||
|
||||
/** 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)
|
||||
{
|
||||
const alpm_list_t *i;
|
||||
|
|
|
@ -46,6 +46,7 @@ void indentprint(const char *str, int indent);
|
|||
char *strtoupper(char *str);
|
||||
char *strtrim(char *str);
|
||||
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 display_targets(const alpm_list_t *syncpkgs, pmdb_t *db_local);
|
||||
int yesno(char *fmt, ...);
|
||||
|
|
Loading…
Reference in New Issue