API clean up (part 2), plus misc changes and improvements.
- Rename regpkgs_dictionary to regpkgdb_dictionary to better describe what is is. - Change some funcs in plist.c to return a boolean rather than int. - Hide more internal funcs off the API. - Simplify xbps_repository_update_pkg() and remove its second arg. - Hide implementation details in xbps_repository_pool, now to iterate over the pool you have to use xbps_repository_pool_foreach and its struct repository_pool_index. - Introduce xbps_{init,end}, to initialize/destroy some stuff in the library. - Introduce xbps_dbg_printf to printf stuff for debugging purposes. - xbps-{bin,repo}: added -d arg to enable debugging output. - Before checking if a config file needs to be installed or such, check that package contains the "conf_files" array. - Remove obsolete dirs as well while updating packages. - If transaction dictionary is ready remove the "missing_deps" array. Bump XBPS_RELVER to 20101118. --HG-- rename : lib/regpkgs_dictionary.c => lib/regpkgdb_dictionary.c
This commit is contained in:
@@ -29,6 +29,7 @@
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <assert.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <xbps_api.h>
|
||||
#include "defs.h"
|
||||
@@ -56,7 +57,7 @@ xbps_check_pkg_integrity_all(void)
|
||||
int rv = 0;
|
||||
size_t npkgs = 0, nbrokenpkgs = 0;
|
||||
|
||||
d = xbps_regpkgs_dictionary_init();
|
||||
d = xbps_regpkgdb_dictionary_get();
|
||||
if (d == NULL)
|
||||
return ENODEV;
|
||||
|
||||
@@ -82,7 +83,7 @@ out:
|
||||
if (iter)
|
||||
prop_object_iterator_release(iter);
|
||||
|
||||
xbps_regpkgs_dictionary_release();
|
||||
xbps_regpkgdb_dictionary_release();
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
@@ -30,6 +30,7 @@
|
||||
#include <errno.h>
|
||||
#include <ctype.h>
|
||||
#include <assert.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <xbps_api.h>
|
||||
#include "defs.h"
|
||||
@@ -102,9 +103,6 @@ download_package_list(prop_object_iterator_t iter)
|
||||
if (cachedir == NULL)
|
||||
return EINVAL;
|
||||
|
||||
/* Set default limit of global and per-host cached connections */
|
||||
xbps_fetch_set_cache_connection(0, 0);
|
||||
|
||||
while ((obj = prop_object_iterator_next(iter)) != NULL) {
|
||||
prop_dictionary_get_cstring_nocopy(obj, "repository", &repoloc);
|
||||
prop_dictionary_get_cstring_nocopy(obj, "pkgver", &pkgver);
|
||||
@@ -293,11 +291,14 @@ xbps_autoupdate_pkgs(bool yes)
|
||||
if (rv == ENOENT) {
|
||||
printf("No packages currently registered.\n");
|
||||
return 0;
|
||||
} else if (rv == ENOPKG) {
|
||||
} else if (rv == ENXIO) {
|
||||
printf("All packages are up-to-date.\n");
|
||||
return 0;
|
||||
} else {
|
||||
fprintf(stderr, "xbps-bin: unexpected error %s\n",
|
||||
strerror(rv));
|
||||
return -1;
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
return xbps_exec_transaction(yes);
|
||||
@@ -337,15 +338,16 @@ xbps_install_new_pkg(const char *pkg)
|
||||
free(pkgname);
|
||||
return 0;
|
||||
}
|
||||
rv = xbps_repository_install_pkg(pkgpatt, true);
|
||||
if (rv == EAGAIN) {
|
||||
fprintf(stderr, "xbps-bin: unable to locate '%s' in "
|
||||
"repository pool.\n", pkg);
|
||||
rv = 1;
|
||||
} else if (rv != 0 && rv != ENOENT) {
|
||||
fprintf(stderr, "xbps-bin: unexpected error: %s",
|
||||
strerror(errno));
|
||||
rv = -1;
|
||||
if ((rv = xbps_repository_install_pkg(pkgpatt)) != 0) {
|
||||
if (rv == EAGAIN) {
|
||||
fprintf(stderr, "xbps-bin: unable to locate '%s' in "
|
||||
"repository pool.\n", pkg);
|
||||
rv = -1;
|
||||
} else {
|
||||
fprintf(stderr, "xbps-bin: unexpected error: %s\n",
|
||||
strerror(rv));
|
||||
rv = -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (pkgmatch)
|
||||
@@ -358,28 +360,22 @@ xbps_install_new_pkg(const char *pkg)
|
||||
int
|
||||
xbps_update_pkg(const char *pkgname)
|
||||
{
|
||||
prop_dictionary_t pkgd;
|
||||
int rv = 0;
|
||||
|
||||
pkgd = xbps_find_pkg_dict_installed(pkgname, false);
|
||||
printf("Finding new '%s' package...\n", pkgname);
|
||||
if (pkgd) {
|
||||
rv = xbps_repository_update_pkg(pkgname, pkgd);
|
||||
if (rv == EEXIST) {
|
||||
printf("Package '%s' is up to date.\n", pkgname);
|
||||
rv = 0;
|
||||
} else if (rv == ENOENT) {
|
||||
fprintf(stderr, "Package '%s' not found in "
|
||||
"repository pool.\n", pkgname);
|
||||
rv = 0;
|
||||
}
|
||||
prop_object_release(pkgd);
|
||||
} else {
|
||||
rv = xbps_repository_update_pkg(pkgname);
|
||||
if (rv == EEXIST)
|
||||
printf("Package '%s' is up to date.\n", pkgname);
|
||||
else if (rv == ENOENT)
|
||||
fprintf(stderr, "Package '%s' not found in "
|
||||
"repository pool.\n", pkgname);
|
||||
else if (rv == ENODEV)
|
||||
printf("Package '%s' not installed.\n", pkgname);
|
||||
return 0;
|
||||
else if (rv != 0) {
|
||||
fprintf(stderr, "xbps-bin: unexpected error %s\n",
|
||||
strerror(rv));
|
||||
return -1;
|
||||
}
|
||||
|
||||
return rv;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -435,11 +431,10 @@ replace_packages(prop_dictionary_t trans_dict, prop_dictionary_t pkgd,
|
||||
prop_object_release(instd);
|
||||
|
||||
version = xbps_get_pkg_version(pkgver);
|
||||
rv = xbps_remove_pkg(reppkgn, version, false);
|
||||
if (rv != 0) {
|
||||
if ((rv = xbps_remove_pkg(reppkgn, version, false)) != 0) {
|
||||
fprintf(stderr, "xbps-bin: couldn't remove %s (%s)\n",
|
||||
reppkgn, strerror(rv));
|
||||
return rv;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
prop_object_iterator_release(replaces_iter);
|
||||
@@ -552,8 +547,7 @@ exec_transaction(struct transaction *trans)
|
||||
printf("Replacing %s files (%s -> %s) ...\n",
|
||||
pkgname, instver, version);
|
||||
|
||||
rv = xbps_remove_pkg(pkgname, version, true);
|
||||
if (rv != 0) {
|
||||
if ((rv = xbps_remove_pkg(pkgname, version, true)) != 0) {
|
||||
fprintf(stderr, "xbps-bin: error "
|
||||
"replacing %s-%s (%s)\n", pkgname,
|
||||
instver, strerror(rv));
|
||||
@@ -617,14 +611,15 @@ xbps_exec_transaction(bool yes)
|
||||
return rv;
|
||||
|
||||
trans->dict = xbps_repository_get_transaction_dict();
|
||||
if (trans->dict == NULL)
|
||||
if (trans->dict == NULL) {
|
||||
rv = errno;
|
||||
goto out;
|
||||
|
||||
/*
|
||||
* Bail out if there are unresolved deps.
|
||||
*/
|
||||
array = prop_dictionary_get(trans->dict, "missing_deps");
|
||||
if (prop_array_count(array) > 0) {
|
||||
}
|
||||
if (rv == ENOENT) {
|
||||
/*
|
||||
* Bail out if there are unresolved deps.
|
||||
*/
|
||||
array = prop_dictionary_get(trans->dict, "missing_deps");
|
||||
show_missing_deps(trans->dict);
|
||||
goto out;
|
||||
}
|
||||
@@ -644,9 +639,6 @@ xbps_exec_transaction(bool yes)
|
||||
|
||||
trans->yes = yes;
|
||||
rv = exec_transaction(trans);
|
||||
DPRINTF(("Dictionary AFTER transaction happened:\n"));
|
||||
DPRINTF(("%s", prop_dictionary_externalize(trans->dict)));
|
||||
|
||||
out:
|
||||
if (trans->iter)
|
||||
prop_object_iterator_release(trans->iter);
|
||||
|
@@ -30,6 +30,7 @@
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
#include <assert.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <xbps_api.h>
|
||||
#include "defs.h"
|
||||
@@ -44,7 +45,7 @@ usage(void)
|
||||
" autoremove\n"
|
||||
" autoupdate\n"
|
||||
" check\t\t[<pkgname>|<all>]\n"
|
||||
" find-files\t<pattern>\n"
|
||||
" find-files\t\t<pattern>\n"
|
||||
" install\t\t[<pkgname(s)>|<pkgpattern(s)>]\n"
|
||||
" list\t\t[state]\n"
|
||||
" list-manual\n"
|
||||
@@ -59,6 +60,7 @@ usage(void)
|
||||
" update\t\t<pkgname(s)>\n"
|
||||
" Options shared by all targets:\n"
|
||||
" -c\t\t<cachedir>\n"
|
||||
" -d\t\tDebug output\n"
|
||||
" -r\t\t<rootdir>\n"
|
||||
" -v\t\tShows verbose messages\n"
|
||||
" -V\t\tPrints the xbps release version\n"
|
||||
@@ -120,8 +122,7 @@ list_manual_packages(prop_object_t obj, void *arg, bool *loop_done)
|
||||
static void
|
||||
cleanup(int signum)
|
||||
{
|
||||
xbps_regpkgs_dictionary_release();
|
||||
xbps_fetch_unset_cache_connection();
|
||||
xbps_end();
|
||||
exit(signum);
|
||||
}
|
||||
|
||||
@@ -132,15 +133,18 @@ main(int argc, char **argv)
|
||||
pkg_state_t pkgstate = 0;
|
||||
struct sigaction sa;
|
||||
int i = 0, c, flags = 0, rv = 0;
|
||||
bool yes, purge;
|
||||
bool yes, purge, with_debug;
|
||||
|
||||
yes = purge = false;
|
||||
yes = purge = with_debug = false;
|
||||
|
||||
while ((c = getopt(argc, argv, "Vcfpr:vy")) != -1) {
|
||||
while ((c = getopt(argc, argv, "Vcdfpr:vy")) != -1) {
|
||||
switch (c) {
|
||||
case 'c':
|
||||
xbps_set_cachedir(optarg);
|
||||
break;
|
||||
case 'd':
|
||||
with_debug = true;
|
||||
break;
|
||||
case 'f':
|
||||
flags |= XBPS_FLAG_FORCE;
|
||||
break;
|
||||
@@ -184,9 +188,13 @@ main(int argc, char **argv)
|
||||
sigaction(SIGTERM, &sa, NULL);
|
||||
sigaction(SIGQUIT, &sa, NULL);
|
||||
|
||||
if ((dict = xbps_regpkgs_dictionary_init()) == NULL) {
|
||||
if (errno != ENOENT) {
|
||||
rv = errno;
|
||||
/*
|
||||
* Initialize stuff for libxbps.
|
||||
*/
|
||||
xbps_init(with_debug);
|
||||
|
||||
if ((dict = xbps_regpkgdb_dictionary_get()) == NULL) {
|
||||
if (errno && errno != ENOENT) {
|
||||
fprintf(stderr,
|
||||
"E: couldn't initialize regpkgdb dict: %s\n",
|
||||
strerror(errno));
|
||||
@@ -194,6 +202,15 @@ main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
if ((rv = xbps_repository_pool_init()) != 0) {
|
||||
if (rv != ENOENT) {
|
||||
fprintf(stderr,
|
||||
"E: couldn't initialize repository pool: %s\n",
|
||||
strerror(rv));
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
if (strcasecmp(argv[0], "list") == 0) {
|
||||
/* Lists packages currently registered in database. */
|
||||
if (argc < 1 || argc > 2)
|
||||
@@ -221,11 +238,8 @@ main(int argc, char **argv)
|
||||
}
|
||||
|
||||
}
|
||||
if (!xbps_callback_array_iter_in_dict(dict, "packages",
|
||||
list_pkgs_in_dict, &pkgstate)) {
|
||||
rv = errno;
|
||||
goto out;
|
||||
}
|
||||
rv = xbps_callback_array_iter_in_dict(dict, "packages",
|
||||
list_pkgs_in_dict, &pkgstate);
|
||||
|
||||
} else if (strcasecmp(argv[0], "install") == 0) {
|
||||
/* Installs a binary package and required deps. */
|
||||
@@ -361,7 +375,7 @@ main(int argc, char **argv)
|
||||
|
||||
rv = xbps_callback_array_iter_in_dict(dict, "packages",
|
||||
list_manual_packages, NULL);
|
||||
|
||||
|
||||
} else if (strcasecmp(argv[0], "show-revdeps") == 0) {
|
||||
/*
|
||||
* Show reverse dependencies for a package.
|
||||
|
@@ -2,12 +2,12 @@
|
||||
.\" Title: xbps-bin
|
||||
.\" Author: [see the "AUTHORS" section]
|
||||
.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
|
||||
.\" Date: 31/10/2010
|
||||
.\" Date: 18/11/2010
|
||||
.\" Manual: \ \&
|
||||
.\" Source: \ \&
|
||||
.\" Language: English
|
||||
.\"
|
||||
.TH "XBPS\-BIN" "8" "31/10/2010" "\ \&" "\ \&"
|
||||
.TH "XBPS\-BIN" "8" "18/11/2010" "\ \&" "\ \&"
|
||||
.\" -----------------------------------------------------------------
|
||||
.\" * set default formatting
|
||||
.\" -----------------------------------------------------------------
|
||||
@@ -43,6 +43,11 @@ of
|
||||
\fI/blah/cachedir\fR\&.
|
||||
.RE
|
||||
.PP
|
||||
\fB\-d\fR
|
||||
.RS 4
|
||||
Enables extra debugging output to be shown to stderr.
|
||||
.RE
|
||||
.PP
|
||||
\fB\-f\fR
|
||||
.RS 4
|
||||
Used currently in the
|
||||
|
Reference in New Issue
Block a user