[pacman-dev] [PATCH 0/3] Add "Usage" option for repos
I've been using these patches for a while now (see the author date on the actual patches) and would like to present them again for feedback. I've found it tremendously useful (particularly as an Arch packager) to be able to keep an eye on other repos like [staging] without actually having them enabled. Dave Reisner (3): libalpm: introduce a usage level for repos pacman: add front end support for repo usage level pactree: set full usage on DBs when registering doc/pacman.conf.5.txt | 18 +++++++++++++++ lib/libalpm/alpm.h | 22 ++++++++++++++++++ lib/libalpm/be_local.c | 1 + lib/libalpm/be_sync.c | 4 ++++ lib/libalpm/db.c | 22 ++++++++++++++++++ lib/libalpm/db.h | 1 + lib/libalpm/deps.c | 15 +++++++++++-- lib/libalpm/sync.c | 15 +++++++++++-- src/pacman/conf.c | 53 ++++++++++++++++++++++++++++++++++++++++++++ src/pacman/sync.c | 11 +++++++++ src/util/pactree.c | 3 ++- test/pacman/tests/sync051.py | 17 ++++++++++++++ test/pacman/tests/sync052.py | 14 ++++++++++++ 13 files changed, 191 insertions(+), 5 deletions(-) create mode 100644 test/pacman/tests/sync051.py create mode 100644 test/pacman/tests/sync052.py -- 1.8.3.4
This defines a level of interest a user has in a repository. These are described by the bitmask flags in the alpm_db_usage_t enum: ALPM_DB_USAGE_SEARCH: repo is valid for searching ALPM_DB_USAGE_INSTALL: repo is valid for installs (e.g. -S pkg) ALPM_DB_USAGE_UPGRADE: repo is valid for sysupgrades ALPM_DB_USAGE_ALL: all of the above are valid Explicitly listing the contents of a repo will always be valid, and the repo will always be refreshed appropriately on sync operations. Signed-off-by: Dave Reisner <dreisner@archlinux.org> --- lib/libalpm/alpm.h | 22 ++++++++++++++++++++++ lib/libalpm/be_local.c | 1 + lib/libalpm/be_sync.c | 4 ++++ lib/libalpm/db.c | 22 ++++++++++++++++++++++ lib/libalpm/db.h | 1 + lib/libalpm/deps.c | 15 +++++++++++++-- lib/libalpm/sync.c | 15 +++++++++++++-- test/pacman/tests/sync051.py | 17 +++++++++++++++++ test/pacman/tests/sync052.py | 14 ++++++++++++++ 9 files changed, 107 insertions(+), 4 deletions(-) create mode 100644 test/pacman/tests/sync051.py create mode 100644 test/pacman/tests/sync052.py diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h index c6d97c5..b049007 100644 --- a/lib/libalpm/alpm.h +++ b/lib/libalpm/alpm.h @@ -709,6 +709,28 @@ alpm_list_t *alpm_db_get_groupcache(alpm_db_t *db); */ alpm_list_t *alpm_db_search(alpm_db_t *db, const alpm_list_t *needles); +typedef enum _alpm_db_usage_ { + ALPM_DB_USAGE_SYNC = 1, + ALPM_DB_USAGE_SEARCH = (1 << 1), + ALPM_DB_USAGE_INSTALL = (1 << 2), + ALPM_DB_USAGE_UPGRADE = (1 << 3), + ALPM_DB_USAGE_ALL = (1 << 4) - 1, +} alpm_db_usage_t; + +/** Sets the usage of a database. + * @param db pointer to the package database to set the status for + * @param usage a bitmask of alpm_db_usage_t values + * @return 0 on success, or -1 on error + */ +int alpm_db_set_usage(alpm_db_t *db, alpm_db_usage_t usage); + +/** Gets the usage of a database. + * @param db pointer to the package database to get the status of + * @param usage pointer to an alpm_db_usage_t to store db's status + * @return 0 on success, or -1 on error + */ +int alpm_db_get_usage(alpm_db_t *db, alpm_db_usage_t *usage); + /** @} */ /** @addtogroup alpm_api_packages Package Functions diff --git a/lib/libalpm/be_local.c b/lib/libalpm/be_local.c index 49b1c74..2c18a45 100644 --- a/lib/libalpm/be_local.c +++ b/lib/libalpm/be_local.c @@ -1091,6 +1091,7 @@ alpm_db_t *_alpm_db_register_local(alpm_handle_t *handle) } db->ops = &local_db_ops; db->handle = handle; + db->usage = ALPM_DB_USAGE_ALL; if(local_db_validate(db)) { /* pm_errno set in local_db_validate() */ diff --git a/lib/libalpm/be_sync.c b/lib/libalpm/be_sync.c index 0b99684..123d953 100644 --- a/lib/libalpm/be_sync.c +++ b/lib/libalpm/be_sync.c @@ -183,6 +183,10 @@ int SYMEXPORT alpm_db_update(int force, alpm_db_t *db) ASSERT(db != handle->db_local, RET_ERR(handle, ALPM_ERR_WRONG_ARGS, -1)); ASSERT(db->servers != NULL, RET_ERR(handle, ALPM_ERR_SERVER_NONE, -1)); + if(!(db->usage & ALPM_DB_USAGE_SYNC)) { + return 0; + } + syncpath = get_sync_dir(handle); if(!syncpath) { return -1; diff --git a/lib/libalpm/db.c b/lib/libalpm/db.c index 3a04a87..3245d64 100644 --- a/lib/libalpm/db.c +++ b/lib/libalpm/db.c @@ -292,6 +292,23 @@ alpm_list_t SYMEXPORT *alpm_db_search(alpm_db_t *db, const alpm_list_t *needles) return _alpm_db_search(db, needles); } +/** Sets the usage bitmask for a repo */ +int SYMEXPORT alpm_db_set_usage(alpm_db_t *db, alpm_db_usage_t usage) +{ + ASSERT(db != NULL, return -1); + db->usage = usage; + return 0; +} + +/** Gets the usage bitmask for a repo */ +int SYMEXPORT alpm_db_get_usage(alpm_db_t *db, alpm_db_usage_t *usage) +{ + ASSERT(db != NULL, return -1); + ASSERT(usage != NULL, return -1); + *usage = db->usage; + return 0; +} + /** @} */ @@ -365,6 +382,11 @@ alpm_list_t *_alpm_db_search(alpm_db_t *db, const alpm_list_t *needles) { const alpm_list_t *i, *j, *k; alpm_list_t *ret = NULL; + + if(!(db->usage & ALPM_DB_USAGE_SEARCH)) { + return NULL; + } + /* copy the pkgcache- we will free the list var after each needle */ alpm_list_t *list = alpm_list_copy(_alpm_db_get_pkgcache(db)); diff --git a/lib/libalpm/db.h b/lib/libalpm/db.h index 8029293..4bb6ee9 100644 --- a/lib/libalpm/db.h +++ b/lib/libalpm/db.h @@ -73,6 +73,7 @@ struct __alpm_db_t { /* flags determining validity, local, loaded caches, etc. */ enum _alpm_dbstatus_t status; alpm_siglevel_t siglevel; + alpm_db_usage_t usage; }; diff --git a/lib/libalpm/deps.c b/lib/libalpm/deps.c index c8aabb2..745eac1 100644 --- a/lib/libalpm/deps.c +++ b/lib/libalpm/deps.c @@ -654,7 +654,14 @@ static alpm_pkg_t *resolvedep(alpm_handle_t *handle, alpm_depend_t *dep, /* 1. literals */ for(i = dbs; i; i = i->next) { - alpm_pkg_t *pkg = _alpm_db_get_pkgfromcache(i->data, dep->name); + alpm_pkg_t *pkg; + alpm_db_t *db = i->data; + + if(!(db->usage & (ALPM_DB_USAGE_INSTALL|ALPM_DB_USAGE_UPGRADE))) { + continue; + } + + pkg = _alpm_db_get_pkgfromcache(db, dep->name); if(pkg && _alpm_depcmp_literal(pkg, dep) && !alpm_pkg_find(excluding, pkg->name)) { if(_alpm_pkg_should_ignore(handle, pkg)) { @@ -676,7 +683,11 @@ static alpm_pkg_t *resolvedep(alpm_handle_t *handle, alpm_depend_t *dep, } /* 2. satisfiers (skip literals here) */ for(i = dbs; i; i = i->next) { - for(j = _alpm_db_get_pkgcache(i->data); j; j = j->next) { + alpm_db_t *db = i->data; + if(!(db->usage & (ALPM_DB_USAGE_INSTALL|ALPM_DB_USAGE_UPGRADE))) { + continue; + } + for(j = _alpm_db_get_pkgcache(db); j; j = j->next) { alpm_pkg_t *pkg = j->data; /* with hash != hash, we can even skip the strcmp() as we know they can't * possibly be the same string */ diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c index f9217bd..98c0bc1 100644 --- a/lib/libalpm/sync.c +++ b/lib/libalpm/sync.c @@ -60,7 +60,12 @@ alpm_pkg_t SYMEXPORT *alpm_sync_newversion(alpm_pkg_t *pkg, alpm_list_t *dbs_syn pkg->handle->pm_errno = 0; for(i = dbs_sync; !spkg && i; i = i->next) { - spkg = _alpm_db_get_pkgfromcache(i->data, pkg->name); + alpm_db_t *db = i->data; + if(!(db->usage & ALPM_DB_USAGE_SEARCH)) { + continue; + } + + spkg = _alpm_db_get_pkgfromcache(db, pkg->name); } if(spkg == NULL) { @@ -212,8 +217,14 @@ int SYMEXPORT alpm_sync_sysupgrade(alpm_handle_t *handle, int enable_downgrade) /* Search for replacers then literal (if no replacer) in each sync database. */ for(j = handle->dbs_sync; j; j = j->next) { alpm_db_t *sdb = j->data; - alpm_list_t *replacers = check_replacers(handle, lpkg, sdb); + alpm_list_t *replacers; + + if(!(sdb->usage & ALPM_DB_USAGE_UPGRADE)) { + continue; + } + /* Check sdb */ + replacers = check_replacers(handle, lpkg, sdb); if(replacers) { trans->add = alpm_list_join(trans->add, replacers); /* jump to next local package */ diff --git a/test/pacman/tests/sync051.py b/test/pacman/tests/sync051.py new file mode 100644 index 0000000..8908dd9 --- /dev/null +++ b/test/pacman/tests/sync051.py @@ -0,0 +1,17 @@ +self.description = "upgrade a package with a disabled repo" + +sp = pmpkg("dummy", "2.0-1") +self.addpkg2db("syncdisabled", sp) + +sp = pmpkg("dummy", "1.0-2") +self.addpkg2db("sync", sp) + +lp = pmpkg("dummy", "1.0-1") +self.addpkg2db("local", lp) + +self.args = "-S %s" % sp.name + +self.db['syncdisabled'].option['Usage'] = ['Search'] + +self.addrule("PACMAN_RETCODE=0") +self.addrule("PKG_VERSION=dummy|1.0-2") diff --git a/test/pacman/tests/sync052.py b/test/pacman/tests/sync052.py new file mode 100644 index 0000000..6ac8fe2 --- /dev/null +++ b/test/pacman/tests/sync052.py @@ -0,0 +1,14 @@ +self.description = "sysupgrade with a disabled repo" + +sp = pmpkg("dummy", "1.0-2") +self.addpkg2db("sync", sp) + +lp = pmpkg("dummy", "1.0-1") +self.addpkg2db("local", lp) + +self.args = "-Syu" + +self.db['sync'].option['Usage'] = ['Search'] + +self.addrule("PACMAN_RETCODE=0") +self.addrule("PKG_VERSION=dummy|1.0-1") -- 1.8.3.4
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> --- doc/pacman.conf.5.txt | 18 +++++++++++++++++ src/pacman/conf.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/pacman/sync.c | 11 +++++++++++ 3 files changed, 82 insertions(+) diff --git a/doc/pacman.conf.5.txt b/doc/pacman.conf.5.txt index 049faee..ba471b4 100644 --- a/doc/pacman.conf.5.txt +++ b/doc/pacman.conf.5.txt @@ -243,6 +243,24 @@ 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 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. + + Package and Database Signature Checking[[SC]] --------------------------------------------- The 'SigLevel' directive is valid in both the `[options]` and repository diff --git a/src/pacman/conf.c b/src/pacman/conf.c index ab6dae0..e6f8cf3 100644 --- a/src/pacman/conf.c +++ b/src/pacman/conf.c @@ -749,6 +749,7 @@ struct section_t { /* db section option gathering */ alpm_siglevel_t siglevel; alpm_list_t *servers; + alpm_db_usage_t usage; }; /** @@ -782,6 +783,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\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)) { char *value = i->data; if(_add_mirror(db, value) != 0) { @@ -800,6 +807,40 @@ 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, "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; } @@ -970,6 +1011,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, §ion->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.\n"), @@ -1000,6 +1052,7 @@ int parseconfig(const char *file) struct section_t section; memset(§ion, 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]. */ diff --git a/src/pacman/sync.c b/src/pacman/sync.c index 942f765..8e90293 100644 --- a/src/pacman/sync.c +++ b/src/pacman/sync.c @@ -672,6 +672,7 @@ static int process_target(const char *target, int error) if(targname && targname != targstring) { alpm_db_t *db; const char *dbname; + alpm_db_usage_t usage; *targname = '\0'; targname++; @@ -683,9 +684,19 @@ static int process_target(const char *target, int error) ret = 1; 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); ret = process_targname(dblist, targname, error); alpm_list_free(dblist); + + /* restore old usage so we don't possibly disturb later + * targets */ + alpm_db_set_usage(db, usage); } else { targname = targstring; dblist = alpm_get_syncdbs(config->handle); -- 1.8.3.4
Signed-off-by: Dave Reisner <dreisner@archlinux.org> --- src/util/pactree.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/util/pactree.c b/src/util/pactree.c index 42c75aa..328b6aa 100644 --- a/src/util/pactree.c +++ b/src/util/pactree.c @@ -211,7 +211,8 @@ static int register_syncs(void) section = strndup(&line[1], linelen - 2); if(section && strcmp(section, "options") != 0) { - alpm_register_syncdb(handle, section, level); + alpm_db_t *db = alpm_register_syncdb(handle, section, level); + alpm_db_set_usage(db, ALPM_DB_USAGE_ALL); } } } -- 1.8.3.4
On 05/08/13 03:25, Dave Reisner wrote:
I've been using these patches for a while now (see the author date on the actual patches) and would like to present them again for feedback. I've found it tremendously useful (particularly as an Arch packager) to be able to keep an eye on other repos like [staging] without actually having them enabled.
+*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
I like these patches, and I believe I had the last version of them on my working branch for a while. I have just one comment for some discussion: performing
+ a '\--sysupgrade'. + *All*;; + Enables all of the above features for the repository. This is the default + if not specified.
I think the description here needs to be clearer. Sync allows use to list the contents of the repo with -Sl? Search, Install and Upgrade obviously imply Sync. Does Install only allow explicit installation - i.e. "-S repo/foo", or is "-S foo" enough? Is Upgrade different from All? I would assume it implies Install (just by description). So here is my suggestion. Can we put these in an order where the higher up ones imply everything below? Sync < Search < Install < Upgrade == All Allan
On Mon, Aug 05, 2013 at 11:17:13AM +1000, Allan McRae wrote:
On 05/08/13 03:25, Dave Reisner wrote:
I've been using these patches for a while now (see the author date on the actual patches) and would like to present them again for feedback. I've found it tremendously useful (particularly as an Arch packager) to be able to keep an eye on other repos like [staging] without actually having them enabled.
I like these patches, and I believe I had the last version of them on my working branch for a while. I have just one comment for some discussion:
+*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.
I think the description here needs to be clearer. Sync allows use to list the contents of the repo with -Sl?
Acting on a repo explicitly should ignore usage. I suppose I could make that clear.
Search, Install and Upgrade obviously imply Sync. Does Install only allow explicit installation - i.e. "-S repo/foo", or is "-S foo" enough?
If you set 'Install' for Usage, '-S foo' is sufficient.
Is Upgrade different from All? I would assume it implies Install (just by description).
-U has no concept of repos. Usage isn't relevant here.
So here is my suggestion. Can we put these in an order where the higher up ones imply everything below?
Sync < Search < Install < Upgrade == All
Allan
Hrmm. So, I suspect that 'Sync Search' will be the common alternative as 'Sync' or 'Search' on their own are not very useful, though 'Sync' alone will still allow for -S $repo/$pkg. 'Install' without 'Sync' *and* 'Search' isn't very useful either, but if you want the effects of all 3 of these, you simply don't specify usage. I'm +0 on the idea of adding a hierarchy. Anyone else have an opinion?
On 21/08/13 11:57, Dave Reisner wrote:
On Mon, Aug 05, 2013 at 11:17:13AM +1000, Allan McRae wrote:
On 05/08/13 03:25, Dave Reisner wrote:
I've been using these patches for a while now (see the author date on the actual patches) and would like to present them again for feedback. I've found it tremendously useful (particularly as an Arch packager) to be able to keep an eye on other repos like [staging] without actually having them enabled.
I like these patches, and I believe I had the last version of them on my working branch for a while. I have just one comment for some discussion:
+*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.
I think the description here needs to be clearer. Sync allows use to list the contents of the repo with -Sl?
Acting on a repo explicitly should ignore usage. I suppose I could make that clear.
Search, Install and Upgrade obviously imply Sync. Does Install only allow explicit installation - i.e. "-S repo/foo", or is "-S foo" enough?
If you set 'Install' for Usage, '-S foo' is sufficient.
Is Upgrade different from All? I would assume it implies Install (just by description).
-U has no concept of repos. Usage isn't relevant here.
So here is my suggestion. Can we put these in an order where the higher up ones imply everything below?
Sync < Search < Install < Upgrade == All
Allan
Hrmm. So, I suspect that 'Sync Search' will be the common alternative as 'Sync' or 'Search' on their own are not very useful, though 'Sync' alone will still allow for -S $repo/$pkg. 'Install' without 'Sync' *and* 'Search' isn't very useful either, but if you want the effects of all 3 of these, you simply don't specify usage.
I'm +0 on the idea of adding a hierarchy. Anyone else have an opinion?
On IRC we discussed not adding the hierarchy and adding some more documentation. @Dave: are the patches on your branch good to go now? Allan
On Tue, Sep 03, 2013 at 04:02:07PM +1000, Allan McRae wrote:
On 21/08/13 11:57, Dave Reisner wrote:
On Mon, Aug 05, 2013 at 11:17:13AM +1000, Allan McRae wrote:
On 05/08/13 03:25, Dave Reisner wrote:
I've been using these patches for a while now (see the author date on the actual patches) and would like to present them again for feedback. I've found it tremendously useful (particularly as an Arch packager) to be able to keep an eye on other repos like [staging] without actually having them enabled.
I like these patches, and I believe I had the last version of them on my working branch for a while. I have just one comment for some discussion:
+*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.
I think the description here needs to be clearer. Sync allows use to list the contents of the repo with -Sl?
Acting on a repo explicitly should ignore usage. I suppose I could make that clear.
Search, Install and Upgrade obviously imply Sync. Does Install only allow explicit installation - i.e. "-S repo/foo", or is "-S foo" enough?
If you set 'Install' for Usage, '-S foo' is sufficient.
Is Upgrade different from All? I would assume it implies Install (just by description).
-U has no concept of repos. Usage isn't relevant here.
So here is my suggestion. Can we put these in an order where the higher up ones imply everything below?
Sync < Search < Install < Upgrade == All
Allan
Hrmm. So, I suspect that 'Sync Search' will be the common alternative as 'Sync' or 'Search' on their own are not very useful, though 'Sync' alone will still allow for -S $repo/$pkg. 'Install' without 'Sync' *and* 'Search' isn't very useful either, but if you want the effects of all 3 of these, you simply don't specify usage.
I'm +0 on the idea of adding a hierarchy. Anyone else have an opinion?
On IRC we discussed not adding the hierarchy and adding some more documentation.
@Dave: are the patches on your branch good to go now?
Allan
Yeah, I rehashed some of the documentation to make it a bit clearler. What's on my branch should be good to go.
participants (3)
-
Allan McRae
-
Dave Reisner
-
Dave Reisner