Fix reinstallation of pkgs in repolock mode.
At the time we've been searching for the pkg in a repo, no repos were registered resulting in EINVAL. While here, if there's no declared repos return ENOENT instead.
This commit is contained in:
parent
3da2c3fdda
commit
441f147f05
@ -151,5 +151,7 @@ xbps_dictionary_t HIDDEN xbps_archive_get_dictionary(struct archive *,
|
|||||||
const char HIDDEN *vpkg_user_conf(struct xbps_handle *, const char *);
|
const char HIDDEN *vpkg_user_conf(struct xbps_handle *, const char *);
|
||||||
xbps_array_t HIDDEN xbps_get_pkg_fulldeptree(struct xbps_handle *,
|
xbps_array_t HIDDEN xbps_get_pkg_fulldeptree(struct xbps_handle *,
|
||||||
const char *, bool);
|
const char *, bool);
|
||||||
|
struct xbps_repo HIDDEN *xbps_regget_repo(struct xbps_handle *,
|
||||||
|
const char *);
|
||||||
|
|
||||||
#endif /* !_XBPS_API_IMPL_H_ */
|
#endif /* !_XBPS_API_IMPL_H_ */
|
||||||
|
28
lib/rpool.c
28
lib/rpool.c
@ -79,6 +79,34 @@ xbps_rpool_sync(struct xbps_handle *xhp, const char *uri)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct xbps_repo HIDDEN *
|
||||||
|
xbps_regget_repo(struct xbps_handle *xhp, const char *url)
|
||||||
|
{
|
||||||
|
struct xbps_repo *repo;
|
||||||
|
const char *repouri;
|
||||||
|
|
||||||
|
if (SIMPLEQ_EMPTY(&rpool_queue)) {
|
||||||
|
/* iterate until we have a match */
|
||||||
|
for (unsigned int i = 0; i < xbps_array_count(xhp->repositories); i++) {
|
||||||
|
xbps_array_get_cstring_nocopy(xhp->repositories, i, &repouri);
|
||||||
|
if (strcmp(repouri, url))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
repo = xbps_repo_open(xhp, repouri, false);
|
||||||
|
if (!repo)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
SIMPLEQ_INSERT_TAIL(&rpool_queue, repo, entries);
|
||||||
|
xbps_dbg_printf(xhp, "[rpool] `%s' registered.\n", repouri);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SIMPLEQ_FOREACH(repo, &rpool_queue, entries)
|
||||||
|
if (strcmp(url, repo->uri) == 0)
|
||||||
|
return repo;
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
struct xbps_repo *
|
struct xbps_repo *
|
||||||
xbps_rpool_get_repo(const char *url)
|
xbps_rpool_get_repo(const char *url)
|
||||||
{
|
{
|
||||||
|
@ -108,8 +108,10 @@ trans_find_pkg(struct xbps_handle *xhp, const char *pkg, bool reinstall,
|
|||||||
/* find update from repo */
|
/* find update from repo */
|
||||||
xbps_dictionary_get_cstring_nocopy(pkg_pkgdb, "repository", &repoloc);
|
xbps_dictionary_get_cstring_nocopy(pkg_pkgdb, "repository", &repoloc);
|
||||||
assert(repoloc);
|
assert(repoloc);
|
||||||
if ((repo = xbps_rpool_get_repo(repoloc)) == NULL)
|
if ((repo = xbps_regget_repo(xhp, repoloc)) == NULL) {
|
||||||
return EINVAL;
|
/* not found */
|
||||||
|
return ENOENT;
|
||||||
|
}
|
||||||
pkg_repod = xbps_repo_get_pkg(repo, pkg);
|
pkg_repod = xbps_repo_get_pkg(repo, pkg);
|
||||||
} else {
|
} else {
|
||||||
/* find update from rpool */
|
/* find update from rpool */
|
||||||
|
@ -46,6 +46,36 @@ update_repolock_body() {
|
|||||||
atf_check_equal "$out" "$(readlink -f repo2)"
|
atf_check_equal "$out" "$(readlink -f repo2)"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
atf_test_case reinstall_repolock
|
||||||
|
|
||||||
|
reinstall_repolock_head() {
|
||||||
|
atf_set "descr" "Tests for pkg reinstall: pkg is in repository locked mode"
|
||||||
|
}
|
||||||
|
|
||||||
|
reinstall_repolock_body() {
|
||||||
|
mkdir -p repo pkg_A
|
||||||
|
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 ..
|
||||||
|
# install A-1.0_1 from repository "repo"
|
||||||
|
xbps-install -r root --repository=repo -yvd A-1.0_1
|
||||||
|
atf_check_equal $? 0
|
||||||
|
# A-1.0_1 is now locked
|
||||||
|
xbps-pkgdb -r root -m repolock A
|
||||||
|
atf_check_equal $? 0
|
||||||
|
out=$(xbps-query -r root -p repository A)
|
||||||
|
atf_check_equal "$out" "$(readlink -f repo)"
|
||||||
|
# reinstall A-1.0_1 while repolocked
|
||||||
|
xbps-install -r root --repository=repo -yvfd A-1.0_1
|
||||||
|
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_init_test_cases() {
|
||||||
atf_add_test_case update_repolock
|
atf_add_test_case update_repolock
|
||||||
|
atf_add_test_case reinstall_repolock
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user