Added the "bestmatching" configuration keyword to enable pkg best matching.
See the NEWS file for more information.
This commit is contained in:
parent
6c76f6786d
commit
53f13d579e
5
NEWS
5
NEWS
@ -1,5 +1,10 @@
|
||||
xbps-0.42 (???):
|
||||
|
||||
* Added a new configuration keyword "bestmatching", which expects "true" or "false"
|
||||
and disabled by default. If enabled the pkg with the greatest version available
|
||||
in all registered repositories will be choosen, rather than the first package
|
||||
matching the expression. This keyword can be set in a configuration file.
|
||||
|
||||
* xbps-rindex(8): added -d/--debug option.
|
||||
|
||||
* utils: the -C/--config option now expects a path to a directory storing
|
||||
|
@ -13,6 +13,12 @@
|
||||
# Set it to false to disable syslog logging.
|
||||
#syslog=true
|
||||
|
||||
# Enable package best matching (disabled by default). If enabled a package with
|
||||
# the greatest version available in all repositories will be choosen, rather
|
||||
# than on the firt package matching the expression.
|
||||
#
|
||||
#bestmatching=true
|
||||
|
||||
## REPOSITORIES
|
||||
#
|
||||
# The `repository' keyword defines a repository. A complete URL or absolute
|
||||
|
@ -48,7 +48,7 @@
|
||||
*
|
||||
* This header documents the full API for the XBPS Library.
|
||||
*/
|
||||
#define XBPS_API_VERSION "20141105"
|
||||
#define XBPS_API_VERSION "20141107"
|
||||
|
||||
#ifndef XBPS_VERSION
|
||||
#define XBPS_VERSION "UNSET"
|
||||
@ -175,6 +175,13 @@
|
||||
*/
|
||||
#define XBPS_FLAG_DISABLE_SYSLOG 0x00000080
|
||||
|
||||
/**
|
||||
* @def XBPS_FLAG_BESTMATCH
|
||||
* Enable pkg best matching when resolving packages.
|
||||
* Must be set through the xbps_handle::flags member.
|
||||
*/
|
||||
#define XBPS_FLAG_BESTMATCH 0x00000100
|
||||
|
||||
/**
|
||||
* @def XBPS_FETCH_CACHECONN
|
||||
* Default (global) limit of cached connections used in libfetch.
|
||||
|
@ -156,7 +156,8 @@ parse_option(char *buf, char **k, char **v)
|
||||
"repository",
|
||||
"virtualpkg",
|
||||
"include",
|
||||
"preserve"
|
||||
"preserve",
|
||||
"bestmatching"
|
||||
};
|
||||
bool found = false;
|
||||
|
||||
@ -263,6 +264,15 @@ parse_file(struct xbps_handle *xhp, const char *cwd, const char *path, bool nest
|
||||
store_vpkg(xhp, path, nlines, v);
|
||||
} else if (strcmp(k, "preserve") == 0) {
|
||||
store_preserved_file(xhp, v);
|
||||
} else if (strcmp(k, "bestmatching") == 0) {
|
||||
if (strcasecmp(v, "true") == 0) {
|
||||
xhp->flags |= XBPS_FLAG_BESTMATCH;
|
||||
xbps_dbg_printf(xhp, "%s: pkg best matching enabled\n", path);
|
||||
} else {
|
||||
xhp->flags &= ~XBPS_FLAG_BESTMATCH;
|
||||
xbps_dbg_printf(xhp, "%s: pkg best matching disabled\n", path);
|
||||
}
|
||||
xbps_dbg_printf(xhp, "%s: enabling pkg best matching\n", path);
|
||||
}
|
||||
/* Avoid double-nested parsing, only allow it once */
|
||||
if (nested)
|
||||
|
@ -275,6 +275,9 @@ xbps_rpool_get_virtualpkg(struct xbps_handle *xhp, const char *pkg)
|
||||
xbps_dictionary_t
|
||||
xbps_rpool_get_pkg(struct xbps_handle *xhp, const char *pkg)
|
||||
{
|
||||
if (xhp->flags & XBPS_FLAG_BESTMATCH)
|
||||
return repo_find_pkg(xhp, pkg, BEST_PKG);
|
||||
|
||||
return repo_find_pkg(xhp, pkg, REAL_PKG);
|
||||
}
|
||||
|
||||
|
@ -204,12 +204,103 @@ install_dups_body() {
|
||||
atf_check_equal $out 1
|
||||
}
|
||||
|
||||
atf_test_case install_bestmatch
|
||||
|
||||
install_bestmatch_head() {
|
||||
atf_set "descr" "Tests for pkg installations: install with bestmatching enabled"
|
||||
}
|
||||
|
||||
install_bestmatch_body() {
|
||||
mkdir -p repo repo2 pkg_A/usr/bin
|
||||
cd repo
|
||||
xbps-create -A noarch -n A-1.0_1 -s "A pkg" ../pkg_A
|
||||
atf_check_equal $? 0
|
||||
xbps-rindex -d -a $PWD/*.xbps
|
||||
atf_check_equal $? 0
|
||||
cd ../repo2
|
||||
xbps-create -A noarch -n A-1.1_1 -s "A pkg" ../pkg_A
|
||||
xbps-rindex -d -a $PWD/*.xbps
|
||||
atf_check_equal $? 0
|
||||
|
||||
cd ..
|
||||
mkdir -p root/xbps.d
|
||||
echo "bestmatching=true" > root/xbps.d/bestmatch.conf
|
||||
xbps-install -C xbps.d -r root --repository=$PWD/repo --repository=$PWD/repo2 -yvd A
|
||||
atf_check_equal $? 0
|
||||
out=$(xbps-query -r root -p pkgver A)
|
||||
atf_check_equal $out A-1.1_1
|
||||
}
|
||||
|
||||
atf_test_case install_bestmatch_deps
|
||||
|
||||
install_bestmatch_deps_head() {
|
||||
atf_set "descr" "Tests for pkg installations: install with bestmatching enabled for deps"
|
||||
}
|
||||
|
||||
install_bestmatch_deps_body() {
|
||||
mkdir -p repo repo2 pkg_A/usr/bin pkg_B/usr/bin
|
||||
cd repo
|
||||
xbps-create -A noarch -n A-1.0_1 -s "A pkg" ../pkg_A
|
||||
atf_check_equal $? 0
|
||||
xbps-create -A noarch -n B-1.0_1 -s "B pkg" --dependencies "A>=0" ../pkg_B
|
||||
atf_check_equal $? 0
|
||||
xbps-rindex -d -a $PWD/*.xbps
|
||||
atf_check_equal $? 0
|
||||
cd ../repo2
|
||||
xbps-create -A noarch -n A-1.1_1 -s "A pkg" ../pkg_A
|
||||
atf_check_equal $? 0
|
||||
xbps-create -A noarch -n B-1.1_1 -s "B pkg" --dependencies "A>=0" ../pkg_B
|
||||
atf_check_equal $? 0
|
||||
xbps-rindex -d -a $PWD/*.xbps
|
||||
atf_check_equal $? 0
|
||||
|
||||
cd ..
|
||||
mkdir -p root/xbps.d
|
||||
echo "bestmatching=true" > root/xbps.d/bestmatch.conf
|
||||
xbps-install -C xbps.d -r root --repository=$PWD/repo --repository=$PWD/repo2 -yvd B
|
||||
atf_check_equal $? 0
|
||||
out=$(xbps-query -r root -p pkgver A)
|
||||
atf_check_equal $out A-1.1_1
|
||||
out=$(xbps-query -r root -p pkgver B)
|
||||
atf_check_equal $out B-1.1_1
|
||||
}
|
||||
|
||||
atf_test_case install_bestmatch_disabled
|
||||
|
||||
install_bestmatch_disabled_head() {
|
||||
atf_set "descr" "Tests for pkg installations: install with bestmatching disabled"
|
||||
}
|
||||
|
||||
install_bestmatch_disabled_body() {
|
||||
mkdir -p repo repo2 pkg_A/usr/bin
|
||||
cd repo
|
||||
xbps-create -A noarch -n A-1.0_1 -s "A pkg" ../pkg_A
|
||||
atf_check_equal $? 0
|
||||
xbps-rindex -d -a $PWD/*.xbps
|
||||
atf_check_equal $? 0
|
||||
cd ../repo2
|
||||
xbps-create -A noarch -n A-1.1_1 -s "A pkg" ../pkg_A
|
||||
xbps-rindex -d -a $PWD/*.xbps
|
||||
atf_check_equal $? 0
|
||||
|
||||
cd ..
|
||||
mkdir -p root/xbps.d
|
||||
echo "bestmatching=false" > root/xbps.d/bestmatch.conf
|
||||
xbps-install -C xbps.d -r root --repository=$PWD/repo --repository=$PWD/repo2 -yvd A
|
||||
atf_check_equal $? 0
|
||||
out=$(xbps-query -r root -p pkgver A)
|
||||
atf_check_equal $out A-1.0_1
|
||||
}
|
||||
|
||||
atf_init_test_cases() {
|
||||
atf_add_test_case install_empty
|
||||
atf_add_test_case install_with_deps
|
||||
atf_add_test_case install_with_vpkg_deps
|
||||
atf_add_test_case install_if_not_installed_on_update
|
||||
atf_add_test_case install_dups
|
||||
atf_add_test_case install_bestmatch
|
||||
atf_add_test_case install_bestmatch_deps
|
||||
atf_add_test_case install_bestmatch_disabled
|
||||
atf_add_test_case update_if_installed
|
||||
atf_add_test_case update_to_empty_pkg
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user