Linux Archive

Linux Archive (http://www.linux-archive.org/)
-   ArchLinux Pacman Development (http://www.linux-archive.org/archlinux-pacman-development/)
-   -   pacman: add front end support for repo usage level (http://www.linux-archive.org/archlinux-pacman-development/679553-pacman-add-front-end-support-repo-usage-level.html)

Dave Reisner 07-03-2012 03:16 AM

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>
---
I'm wondering if there ought to be a way to specify 'None' here, which would
basically restrict you to only listing the contents of a repo and nothing else.

doc/pacman.conf.5.txt | 16 ++++++++++++++++
src/pacman/conf.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++ +
2 files changed, 67 insertions(+)

diff --git a/doc/pacman.conf.5.txt b/doc/pacman.conf.5.txt
index a9c5db3..4f50df9 100644
--- a/doc/pacman.conf.5.txt
+++ b/doc/pacman.conf.5.txt
@@ -226,6 +226,22 @@ even be used for different architectures.
Set the signature verification level for this repository. For more
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 can be any of the following:
+ *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.
+
+
Package and Database Signature Checking
---------------------------------------
The 'SigLevel' directive is valid in both the `[options]` and repository
diff --git a/src/pacman/conf.c b/src/pacman/conf.c
index 4aaacb5..00df6f8 100644
--- a/src/pacman/conf.c
+++ b/src/pacman/conf.c
@@ -636,6 +636,7 @@ struct section_t {
/* db section option gathering */
alpm_siglevel_t siglevel;
alpm_list_t *servers;
+ alpm_db_usage_t usage;
};

/**
@@ -669,6 +670,12 @@ static int finish_section(struct section_t *section, int parse_options)
goto cleanup;
}

+ pm_printf(ALPM_LOG_DEBUG,
+ "setting usage of %d for %s repoistory
",
+ 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)) {
char *value = i->data;
if(_add_mirror(db, value) != 0) {
@@ -687,6 +694,38 @@ cleanup:
section->siglevel = ALPM_SIG_USE_DEFAULT;
free(section->name);
section->name = NULL;
+ section->usage = 0;
+ return ret;
+}
+
+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, "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_WARNING,
+ _("config file %s, line %d: directive '%s' in section '%s' not recognized.
"),
+ file, linenum, key, "options");
+ ret = 1;
+ }
+ }
+
+ *usage = level;
+
return ret;
}

@@ -856,6 +895,17 @@ static int _parseconfig(const char *file, struct section_t *section,
}
FREELIST(values);
}
+ } else if(strcmp(key, "Usage") == 0) {
+ alpm_list_t *values = NULL;
+ setrepeatingoption(value, "Usage", &values);
+ if(values) {
+ if(process_usage(values, &section->usage, file, linenum)) {
+ FREELIST(values);
+ ret = 1;
+ goto cleanup;
+ }
+ FREELIST(values);
+ }
} else {
pm_printf(ALPM_LOG_WARNING,
_("config file %s, line %d: directive '%s' in section '%s' not recognized.
"),
@@ -886,6 +936,7 @@ int parseconfig(const char *file)
struct section_t section;
memset(&section, 0, sizeof(struct section_t));
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 [options] section so we can get all default and path options set.
* Next, we go back and parse everything but [options]. */
--
1.7.11.1


All times are GMT. The time now is 03:41 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.