Remove PackagesOnHold from xbps.conf; use xbps-pkgdb -m hold|unhold instead.

To put a package on hold mode:
	$ xbps-pkgdb -m hold foo

To unhold the package:
	$ xbps-pkgdb -m unhold foo

To list packages on hold mode:
	$ xbps-query -H

This also close #12 from github.
This commit is contained in:
Juan RP
2013-08-12 14:46:54 +02:00
parent 9c9d5b58dd
commit 776b94e6bc
11 changed files with 96 additions and 60 deletions

View File

@@ -40,34 +40,38 @@ usage(bool fail)
fprintf(stdout,
"Usage: xbps-pkgdb [OPTIONS] [PKGNAME...]\n\n"
"OPTIONS\n"
" -a --all Process all packages\n"
" -C --config <file> Full path to configuration file\n"
" -d --debug Debug mode shown to stderr\n"
" -h --help Print usage help\n"
" -m --mode <auto|manual> Change PKGNAME to automatic or manual mode\n"
" -r --rootdir <dir> Full path to rootdir\n"
" -u --update Update pkgdb to the latest format\n"
" -v --verbose Verbose messages\n"
" -V --version Show XBPS version\n");
" -a --all Process all packages\n"
" -C --config <file> Full path to configuration file\n"
" -d --debug Debug mode shown to stderr\n"
" -h --help Print usage help\n"
" -m --mode <auto|manual|hold|unhold> Change PKGNAME to this mode\n"
" -r --rootdir <dir> Full path to rootdir\n"
" -u --update Update pkgdb to the latest format\n"
" -v --verbose Verbose messages\n"
" -V --version Show XBPS version\n");
exit(fail ? EXIT_FAILURE : EXIT_SUCCESS);
}
static int
change_pkg_instmode(struct xbps_handle *xhp,
const char *pkgname,
const char *modestr)
change_pkg_mode(struct xbps_handle *xhp, const char *pkgname, const char *mode)
{
xbps_dictionary_t pkgd;
bool mode = false;
pkgd = xbps_pkgdb_get_pkg(xhp, pkgname);
if (pkgd == NULL)
return errno;
if (strcmp(modestr, "auto") == 0)
mode = true;
if (strcmp(mode, "auto") == 0)
xbps_dictionary_set_bool(pkgd, "automatic-install", true);
else if (strcmp(mode, "manual") == 0)
xbps_dictionary_set_bool(pkgd, "automatic-install", false);
else if (strcmp(mode, "hold") == 0)
xbps_dictionary_set_bool(pkgd, "hold", true);
else if (strcmp(mode, "unhold") == 0)
xbps_dictionary_remove(pkgd, "hold");
else
usage(true);
xbps_dictionary_set_bool(pkgd, "automatic-install", mode);
return xbps_pkgdb_update(xhp, true);
}
@@ -144,16 +148,13 @@ main(int argc, char **argv)
if (update_format)
convert_pkgdb_format(&xh);
else if (instmode) {
if ((strcmp(instmode, "auto")) && (strcmp(instmode, "manual")))
usage(true);
if (argc == optind) {
fprintf(stderr,
"xbps-pkgdb: missing PKGNAME argument\n");
exit(EXIT_FAILURE);
}
for (i = optind; i < argc; i++) {
rv = change_pkg_instmode(&xh, argv[i], instmode);
rv = change_pkg_mode(&xh, argv[i], instmode);
if (rv != 0) {
fprintf(stderr, "xbps-pkgdb: failed to "
"change to %s mode to %s: %s\n",

View File

@@ -1,4 +1,4 @@
.Dd March 4, 2013
.Dd August 12, 2013
.Os Void Linux
.Dt xbps-pkgdb 8
.Sh NAME
@@ -42,10 +42,19 @@ Specifies a full path to the XBPS configuration file.
Enables extra debugging shown to stderr.
.It Fl h, Fl -help
Show the help usage.
.It Fl m, Fl -mode Ar auto|manual
.It Fl m, Fl -mode Ar auto|manual|hold|unhold
Switches
.Ar PKGNAME
to the specified installation mode: automatic or manual mode.
to the specified mode: automatic or manual installation mode, or to (un)set it on hold mode.
A package that was installed as dependency will be in
.Sy automatic
mode, otherwise will be set to
.Sy manual .
A package in
.Sy hold
mode won't be updated in full system upgrades. The list of packages in this mode can be
seen with
.Xr xbps-query 8 .
.It Fl r, Fl -rootdir Ar dir
Specifies a full path for the target root directory.
.It Fl u, Fl -update

View File

@@ -61,6 +61,7 @@ unsigned int find_longest_pkgver(struct xbps_handle *, xbps_object_t);
int list_pkgs_in_dict(struct xbps_handle *, xbps_object_t, const char *, void *, bool *);
int list_manual_pkgs(struct xbps_handle *, xbps_object_t, const char *, void *, bool *);
int list_hold_pkgs(struct xbps_handle *, xbps_object_t, const char *, void *, bool *);
int list_orphans(struct xbps_handle *);
int list_pkgs_pkgdb(struct xbps_handle *);

View File

@@ -116,6 +116,24 @@ list_manual_pkgs(struct xbps_handle *xhp,
return 0;
}
int
list_hold_pkgs(struct xbps_handle *xhp, xbps_object_t obj,
const char *key, void *arg, bool *loop_done)
{
const char *pkgver;
(void)xhp;
(void)key;
(void)arg;
(void)loop_done;
if (xbps_dictionary_get(obj, "hold")) {
xbps_dictionary_get_cstring_nocopy(obj, "pkgver", &pkgver);
printf("%s\n", pkgver);
}
return 0;
}
int
list_orphans(struct xbps_handle *xhp)
{

View File

@@ -50,6 +50,7 @@ usage(bool fail)
"\nMODE [only one mode may be specified]\n"
" -l --list-pkgs List available packages\n"
" -L --list-repos List working repositories\n"
" -H --list-hold-pkgs List packages on hold state\n"
" -m --list-manual-pkgs List packages installed explicitly\n"
" -O --list-orphans List package orphans\n"
" -o --ownedby PATTERN(s) Search for packages owning PATTERN(s)\n"
@@ -65,7 +66,7 @@ usage(bool fail)
int
main(int argc, char **argv)
{
const char *shortopts = "C:c:D:dfhLlmOop:Rr:sVvXx";
const char *shortopts = "C:c:D:dfhHLlmOop:Rr:sVvXx";
const struct option longopts[] = {
{ "config", required_argument, NULL, 'C' },
{ "cachedir", required_argument, NULL, 'c' },
@@ -74,6 +75,7 @@ main(int argc, char **argv)
{ "help", no_argument, NULL, 'h' },
{ "list-repos", no_argument, NULL, 'L' },
{ "list-pkgs", no_argument, NULL, 'l' },
{ "list-hold-pkgs", no_argument, NULL, 'H' },
{ "list-manual-pkgs", no_argument, NULL, 'm' },
{ "list-orphans", no_argument, NULL, 'O' },
{ "ownedby", no_argument, NULL, 'o' },
@@ -92,12 +94,12 @@ main(int argc, char **argv)
const char *rootdir, *cachedir, *conffile, *props, *defrepo;
int c, flags, rv, show_deps = 0;
bool list_pkgs, list_repos, orphans, own;
bool list_manual, show_prop, show_files, show_rdeps;
bool list_manual, list_hold, show_prop, show_files, show_rdeps;
bool show, search, repo_mode, opmode, fulldeptree;
rootdir = cachedir = conffile = defrepo = props = NULL;
flags = rv = c = 0;
list_pkgs = list_repos = orphans = search = own = false;
list_pkgs = list_repos = list_hold = orphans = search = own = false;
list_manual = show_prop = show_files = false;
show = show_rdeps = fulldeptree = false;
repo_mode = opmode = false;
@@ -119,6 +121,9 @@ main(int argc, char **argv)
case 'f':
show_files = opmode = true;
break;
case 'H':
list_hold = true;
break;
case 'h':
usage(false);
/* NOTREACHED */
@@ -195,6 +200,10 @@ main(int argc, char **argv)
/* list repositories */
rv = repo_list(&xh);
} else if (list_hold) {
/* list on hold pkgs */
rv = xbps_pkgdb_foreach_cb(&xh, list_hold_pkgs, NULL);
} else if (list_manual) {
/* list manual pkgs */
rv = xbps_pkgdb_foreach_cb(&xh, list_manual_pkgs, NULL);

View File

@@ -1,4 +1,4 @@
.Dd July 26, 2013
.Dd August 12, 2013
.Os Void Linux
.Dt xbps-query 8
.Sh NAME
@@ -78,6 +78,8 @@ option is specified, the target
will be queried in the root directory, otherwise it will be
queried in registered repositories.
.Bl -tag -width -x
.If Fl H, Fl -list-hold-pkgs
List packages that are put on hold, and won't be updated in full system upgrades.
.It Fl l, Fl -list-pkgs
Lists registered packages in the package database (pkgdb).
A package can be in any of the following states: