mirror of
https://github.com/moparisthebest/pacman
synced 2024-12-22 15:58:50 -05:00
pacman: add front end support for repo usage level
Add a "Usage" key to the repo section of the config which allows for the tokens "Search", "Install", "Upgrade", "All", which correspond to values in the alpm_db_usage_t enum. Users can specify "Usage" multiple times for a given repo, or multiple flags per "Usage" line and they will be OR'd together. If unspecified, the default is full usage of the repo. Signed-off-by: Dave Reisner <dreisner@archlinux.org> Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
parent
106d0fc541
commit
c0ee713704
@ -243,6 +243,27 @@ even be used for different architectures.
|
|||||||
Set the signature verification level for this repository. For more
|
Set the signature verification level for this repository. For more
|
||||||
information, see <<SC,Package and Database Signature Checking>> below.
|
information, see <<SC,Package and Database Signature Checking>> below.
|
||||||
|
|
||||||
|
*Usage =* ...::
|
||||||
|
Set the usage level for this repository. This option takes a list of tokens
|
||||||
|
which must be at least one of the following:
|
||||||
|
*Sync*;;
|
||||||
|
Enables refreshes for this repository.
|
||||||
|
*Search*;;
|
||||||
|
Enables searching for this repository.
|
||||||
|
*Install*;;
|
||||||
|
Enables installation of packages from this repository during a '\--sync'
|
||||||
|
operation.
|
||||||
|
*Upgrade*;;
|
||||||
|
Allows this repository to be a valid source of packages when performing
|
||||||
|
a '\--sysupgrade'.
|
||||||
|
*All*;;
|
||||||
|
Enables all of the above features for the repository. This is the default
|
||||||
|
if not specified.
|
||||||
|
+
|
||||||
|
Note that an enabled repository can be operated on explicitly, regardless of the Usage
|
||||||
|
level set.
|
||||||
|
|
||||||
|
|
||||||
Package and Database Signature Checking[[SC]]
|
Package and Database Signature Checking[[SC]]
|
||||||
---------------------------------------------
|
---------------------------------------------
|
||||||
The 'SigLevel' directive is valid in both the `[options]` and repository
|
The 'SigLevel' directive is valid in both the `[options]` and repository
|
||||||
|
@ -750,8 +750,43 @@ struct section_t {
|
|||||||
/* db section option gathering */
|
/* db section option gathering */
|
||||||
alpm_siglevel_t siglevel;
|
alpm_siglevel_t siglevel;
|
||||||
alpm_list_t *servers;
|
alpm_list_t *servers;
|
||||||
|
alpm_db_usage_t usage;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int process_usage(alpm_list_t *values, alpm_db_usage_t *usage,
|
||||||
|
const char *file, int linenum)
|
||||||
|
{
|
||||||
|
alpm_list_t *i;
|
||||||
|
alpm_db_usage_t level = *usage;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
for(i = values; i; i = i->next) {
|
||||||
|
char *key = i->data;
|
||||||
|
|
||||||
|
if(strcmp(key, "Sync") == 0) {
|
||||||
|
level |= ALPM_DB_USAGE_SYNC;
|
||||||
|
} else if(strcmp(key, "Search") == 0) {
|
||||||
|
level |= ALPM_DB_USAGE_SEARCH;
|
||||||
|
} else if(strcmp(key, "Install") == 0) {
|
||||||
|
level |= ALPM_DB_USAGE_INSTALL;
|
||||||
|
} else if(strcmp(key, "Upgrade") == 0) {
|
||||||
|
level |= ALPM_DB_USAGE_UPGRADE;
|
||||||
|
} else if(strcmp(key, "All") == 0) {
|
||||||
|
level |= ALPM_DB_USAGE_ALL;
|
||||||
|
} else {
|
||||||
|
pm_printf(ALPM_LOG_ERROR,
|
||||||
|
_("config file %s, line %d: '%s' option '%s' not recognized\n"),
|
||||||
|
file, linenum, "Usage", key);
|
||||||
|
ret = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*usage = level;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int _parse_repo(const char *key, char *value, const char *file,
|
static int _parse_repo(const char *key, char *value, const char *file,
|
||||||
int line, struct section_t *section)
|
int line, struct section_t *section)
|
||||||
{
|
{
|
||||||
@ -780,6 +815,16 @@ static int _parse_repo(const char *key, char *value, const char *file,
|
|||||||
FREELIST(values);
|
FREELIST(values);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if(strcmp(key, "Usage") == 0) {
|
||||||
|
alpm_list_t *values = NULL;
|
||||||
|
setrepeatingoption(value, "Usage", &values);
|
||||||
|
if(values) {
|
||||||
|
if(process_usage(values, §ion->usage, file, line)) {
|
||||||
|
FREELIST(values);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
FREELIST(values);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
pm_printf(ALPM_LOG_WARNING,
|
pm_printf(ALPM_LOG_WARNING,
|
||||||
_("config file %s, line %d: directive '%s' in section '%s' not recognized.\n"),
|
_("config file %s, line %d: directive '%s' in section '%s' not recognized.\n"),
|
||||||
@ -820,6 +865,12 @@ static int finish_section(struct section_t *section)
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pm_printf(ALPM_LOG_DEBUG,
|
||||||
|
"setting usage of %d for %s repoistory\n",
|
||||||
|
section->usage == 0 ? ALPM_DB_USAGE_ALL : section->usage,
|
||||||
|
section->name);
|
||||||
|
alpm_db_set_usage(db, section->usage == 0 ? ALPM_DB_USAGE_ALL : section->usage);
|
||||||
|
|
||||||
for(i = section->servers; i; i = alpm_list_next(i)) {
|
for(i = section->servers; i; i = alpm_list_next(i)) {
|
||||||
char *value = i->data;
|
char *value = i->data;
|
||||||
if(_add_mirror(db, value) != 0) {
|
if(_add_mirror(db, value) != 0) {
|
||||||
@ -837,6 +888,7 @@ cleanup:
|
|||||||
section->servers = NULL;
|
section->servers = NULL;
|
||||||
section->siglevel = ALPM_SIG_USE_DEFAULT;
|
section->siglevel = ALPM_SIG_USE_DEFAULT;
|
||||||
section->name = NULL;
|
section->name = NULL;
|
||||||
|
section->usage = 0;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -883,6 +935,7 @@ int parseconfig(const char *file)
|
|||||||
struct section_t section;
|
struct section_t section;
|
||||||
memset(§ion, 0, sizeof(struct section_t));
|
memset(§ion, 0, sizeof(struct section_t));
|
||||||
section.siglevel = ALPM_SIG_USE_DEFAULT;
|
section.siglevel = ALPM_SIG_USE_DEFAULT;
|
||||||
|
section.usage = 0;
|
||||||
/* the config parse is a two-pass affair. We first parse the entire thing for
|
/* the config parse is a two-pass affair. We first parse the entire thing for
|
||||||
* the [options] section so we can get all default and path options set.
|
* the [options] section so we can get all default and path options set.
|
||||||
* Next, we go back and parse everything but [options]. */
|
* Next, we go back and parse everything but [options]. */
|
||||||
|
@ -672,6 +672,7 @@ static int process_target(const char *target, int error)
|
|||||||
if(targname && targname != targstring) {
|
if(targname && targname != targstring) {
|
||||||
alpm_db_t *db;
|
alpm_db_t *db;
|
||||||
const char *dbname;
|
const char *dbname;
|
||||||
|
alpm_db_usage_t usage;
|
||||||
|
|
||||||
*targname = '\0';
|
*targname = '\0';
|
||||||
targname++;
|
targname++;
|
||||||
@ -683,9 +684,19 @@ static int process_target(const char *target, int error)
|
|||||||
ret = 1;
|
ret = 1;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* explicitly mark this repo as valid for installs since
|
||||||
|
* a repo name was given with the target */
|
||||||
|
alpm_db_get_usage(db, &usage);
|
||||||
|
alpm_db_set_usage(db, usage|ALPM_DB_USAGE_INSTALL);
|
||||||
|
|
||||||
dblist = alpm_list_add(NULL, db);
|
dblist = alpm_list_add(NULL, db);
|
||||||
ret = process_targname(dblist, targname, error);
|
ret = process_targname(dblist, targname, error);
|
||||||
alpm_list_free(dblist);
|
alpm_list_free(dblist);
|
||||||
|
|
||||||
|
/* restore old usage so we don't possibly disturb later
|
||||||
|
* targets */
|
||||||
|
alpm_db_set_usage(db, usage);
|
||||||
} else {
|
} else {
|
||||||
targname = targstring;
|
targname = targstring;
|
||||||
dblist = alpm_get_syncdbs(config->handle);
|
dblist = alpm_get_syncdbs(config->handle);
|
||||||
|
Loading…
Reference in New Issue
Block a user