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:
Nathan Jones 2007-11-13 19:32:56 -05:00 committed by Dan McGee
parent 70a91cbb22
commit 46ec9e3548
4 changed files with 55 additions and 4 deletions

View file

@ -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]]

View file

@ -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);

View file

@ -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;

View file

@ -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, ...);