Fix #43 (xbps-install: unhelpful message for invalid dependency)
If a package that is going to be installed or updated contains invalid dependencies return ENXIO and XBPS_STATE_INVALID_DEP xbps state to clients. This improves the error messages returned to the clients when such condition happens.
This commit is contained in:
parent
21f32a75c5
commit
e60677116d
11
NEWS
11
NEWS
@ -1,5 +1,16 @@
|
|||||||
xbps-0.38 (???):
|
xbps-0.38 (???):
|
||||||
|
|
||||||
|
* libxbps: return ENXIO and a meaningful error message if a package that is
|
||||||
|
going to be installed or updated has invalid dependencies, i.e:
|
||||||
|
|
||||||
|
$ xbps-install --repository=$HOME/repo -n foo
|
||||||
|
ERROR: foo-1.0_1: can't guess pkgname for dependency '>=invalid-spec_1'
|
||||||
|
Package `foo' contains invalid dependencies, exiting.
|
||||||
|
$
|
||||||
|
|
||||||
|
This fixes #43 (xbps-install: unhelpful message for invalid dependency)
|
||||||
|
submitted by Dominik Honnef.
|
||||||
|
|
||||||
* libxbps: fixed a new issue with packages that provide/replace the
|
* libxbps: fixed a new issue with packages that provide/replace the
|
||||||
same virtual package that is going to be replaced. The issue could be
|
same virtual package that is going to be replaced. The issue could be
|
||||||
reproduced easily by installing any awk package (gawk, mawk, or nawk),
|
reproduced easily by installing any awk package (gawk, mawk, or nawk),
|
||||||
|
@ -159,8 +159,12 @@ state_cb(struct xbps_state_cb_data *xscd, void *cbdata _unused)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
xbps_dbg_printf(xscd->xhp,
|
if (xscd->desc)
|
||||||
"%s: unknown state %d\n", xscd->arg, xscd->state);
|
xbps_error_printf("%s\n", xscd->desc);
|
||||||
|
else
|
||||||
|
xbps_dbg_printf(xscd->xhp,
|
||||||
|
"%s: unknown state %d\n", xscd->arg, xscd->state);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -224,6 +224,8 @@ install_new_pkg(struct xbps_handle *xhp, const char *pkg, bool reinstall)
|
|||||||
} else if (rv == ENOTSUP) {
|
} else if (rv == ENOTSUP) {
|
||||||
fprintf(stderr, "No repositories "
|
fprintf(stderr, "No repositories "
|
||||||
"currently registered!\n");
|
"currently registered!\n");
|
||||||
|
} else if (rv == ENXIO) {
|
||||||
|
fprintf(stderr, "Package `%s' contains invalid dependencies, exiting.\n", pkg);
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "Unexpected error: %s\n",
|
fprintf(stderr, "Unexpected error: %s\n",
|
||||||
strerror(rv));
|
strerror(rv));
|
||||||
|
@ -48,7 +48,7 @@
|
|||||||
*
|
*
|
||||||
* This header documents the full API for the XBPS Library.
|
* This header documents the full API for the XBPS Library.
|
||||||
*/
|
*/
|
||||||
#define XBPS_API_VERSION "20140604"
|
#define XBPS_API_VERSION "20140702"
|
||||||
|
|
||||||
#ifndef XBPS_VERSION
|
#ifndef XBPS_VERSION
|
||||||
#define XBPS_VERSION "UNSET"
|
#define XBPS_VERSION "UNSET"
|
||||||
@ -275,6 +275,7 @@ extern "C" {
|
|||||||
* - XBPS_STATE_UNPACK_FAIL: package unpack has failed.
|
* - XBPS_STATE_UNPACK_FAIL: package unpack has failed.
|
||||||
* - XBPS_STATE_REPOSYNC_FAIL: syncing remote repositories has failed.
|
* - XBPS_STATE_REPOSYNC_FAIL: syncing remote repositories has failed.
|
||||||
* - XBPS_STATE_REPO_KEY_IMPORT: repository is signed and needs to import pubkey.
|
* - XBPS_STATE_REPO_KEY_IMPORT: repository is signed and needs to import pubkey.
|
||||||
|
* - XBPS_STATE_INVALID_DEP: package has an invalid dependency.
|
||||||
*/
|
*/
|
||||||
typedef enum xbps_state {
|
typedef enum xbps_state {
|
||||||
XBPS_STATE_UNKNOWN = 0,
|
XBPS_STATE_UNKNOWN = 0,
|
||||||
@ -313,7 +314,8 @@ typedef enum xbps_state {
|
|||||||
XBPS_STATE_UNPACK_FAIL,
|
XBPS_STATE_UNPACK_FAIL,
|
||||||
XBPS_STATE_REPOSYNC_FAIL,
|
XBPS_STATE_REPOSYNC_FAIL,
|
||||||
XBPS_STATE_CONFIGURE_DONE,
|
XBPS_STATE_CONFIGURE_DONE,
|
||||||
XBPS_STATE_REPO_KEY_IMPORT
|
XBPS_STATE_REPO_KEY_IMPORT,
|
||||||
|
XBPS_STATE_INVALID_DEP
|
||||||
} xbps_state_t;
|
} xbps_state_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1035,6 +1037,7 @@ xbps_object_iterator_t xbps_array_iter_from_dict(xbps_dictionary_t dict,
|
|||||||
* @retval EEXIST Package is already installed (reinstall wasn't enabled).
|
* @retval EEXIST Package is already installed (reinstall wasn't enabled).
|
||||||
* @retval ENOENT Package not matched in repository pool.
|
* @retval ENOENT Package not matched in repository pool.
|
||||||
* @retval ENOTSUP No repositories are available.
|
* @retval ENOTSUP No repositories are available.
|
||||||
|
* @retval ENXIO Package depends on invalid dependencies.
|
||||||
* @retval EINVAL Any other error ocurred in the process.
|
* @retval EINVAL Any other error ocurred in the process.
|
||||||
*/
|
*/
|
||||||
int xbps_transaction_install_pkg(struct xbps_handle *xhp,
|
int xbps_transaction_install_pkg(struct xbps_handle *xhp,
|
||||||
@ -1051,6 +1054,11 @@ int xbps_transaction_install_pkg(struct xbps_handle *xhp,
|
|||||||
* @param[in] pkgname The package name to update.
|
* @param[in] pkgname The package name to update.
|
||||||
*
|
*
|
||||||
* @return 0 on success, otherwise an errno value.
|
* @return 0 on success, otherwise an errno value.
|
||||||
|
* @retval EEXIST Package is already up-to-date.
|
||||||
|
* @retval ENOENT Package not matched in repository pool.
|
||||||
|
* @retval ENOTSUP No repositories are available.
|
||||||
|
* @retval ENXIO Package depends on invalid dependencies.
|
||||||
|
* @retval EINVAL Any other error ocurred in the process.
|
||||||
*/
|
*/
|
||||||
int xbps_transaction_update_pkg(struct xbps_handle *xhp, const char *pkgname);
|
int xbps_transaction_update_pkg(struct xbps_handle *xhp, const char *pkgname);
|
||||||
|
|
||||||
@ -1060,7 +1068,9 @@ int xbps_transaction_update_pkg(struct xbps_handle *xhp, const char *pkgname);
|
|||||||
* into the transaction dictionary.
|
* into the transaction dictionary.
|
||||||
*
|
*
|
||||||
* @param[in] xhp Pointer to the xbps_handle struct.
|
* @param[in] xhp Pointer to the xbps_handle struct.
|
||||||
|
*
|
||||||
* @return 0 on success, otherwise an errno value.
|
* @return 0 on success, otherwise an errno value.
|
||||||
|
* @retval EEXIST All installed package are already up-to-date.
|
||||||
*/
|
*/
|
||||||
int xbps_transaction_update_packages(struct xbps_handle *xhp);
|
int xbps_transaction_update_packages(struct xbps_handle *xhp);
|
||||||
|
|
||||||
|
@ -187,8 +187,10 @@ find_repo_deps(struct xbps_handle *xhp,
|
|||||||
}
|
}
|
||||||
if (((pkgname = xbps_pkgpattern_name(reqpkg)) == NULL) &&
|
if (((pkgname = xbps_pkgpattern_name(reqpkg)) == NULL) &&
|
||||||
((pkgname = xbps_pkg_name(reqpkg)) == NULL)) {
|
((pkgname = xbps_pkg_name(reqpkg)) == NULL)) {
|
||||||
xbps_dbg_printf(xhp, "can't guess pkgname for %s\n", reqpkg);
|
xbps_dbg_printf(xhp, "%s: can't guess pkgname for dependency: %s\n", curpkg, reqpkg);
|
||||||
rv = EINVAL;
|
xbps_set_cb_state(xhp, XBPS_STATE_INVALID_DEP, ENXIO, NULL,
|
||||||
|
"%s: can't guess pkgname for dependency '%s'", curpkg, reqpkg);
|
||||||
|
rv = ENXIO;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user